Gate settlement frequency and currency conversion fees selection behind a Save button (a11y On Input, PR 10) - #99235
Conversation
…nd a Save button (a11y On Input, PR 10) Co-authored-by: truph01 <truph01@users.noreply.github.com>
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
🤖 I ran the testing steps on the Android emulator, but I could not execute either functional test case at runtime — both target pages are unreachable on the Melvin Android test account, so I have no screenshots/recording proving the actual Save-button flow. Here's exactly where each one blocked: Test Case 1 — Settlement frequency (Workspace → Expensify Card → Settings → Settlement frequency) Test Case 2 — Currency conversion fees (Workspace → Workflows → Currency conversion fees) What I could verify (source review, not runtime): both pages correctly stage the selection in local state and gate the commit behind a Save button.
No JS console / red-box errors appeared during navigation. Screenshots (blockers, not the test flow)Blocking screens captured while trying to reach the pages are attached in the follow-up comment: the bank-account magic-code validation screen (blocks Test Case 1 and, indirectly, Test Case 2) and the Workflows → Payments section with no Currency conversion fees row. Bottom line: the code changes look correct, but neither test case could be proven on Android in this environment because they require an active Expensify Card program (bank account + email magic code) and the Global Reimbursement FX betas. To get real device proof, this needs a pre-provisioned account with an Expensify Card program and the |
|
🤖 I ran the testing steps on Web, but I could not execute either functional test case at runtime — both target pages are unreachable on the Melvin web test account, so I have no screenshots/recording proving the actual Save-button flow. This matches what I found on Android. Here's where each one blocked: Test Case 1 — Settlement frequency (Workspace → Expensify Card → Settings → Settlement frequency) Test Case 2 — Currency conversion fees (Workspace → Workflows → Currency conversion fees) What I could verify (source review, not runtime): both pages correctly stage the selection in local state and gate the commit behind a Save button.
No JS console errors / error banners appeared during navigation. Screenshots (blockers, not the test flow)Blocking screens are attached in the follow-up comment: the Expensify Card promo page (no Settlement frequency page yet), the bank-account KYC step that blocks issuing a card, and the Workflows page with no Currency conversion fees row. Bottom line: the code changes look correct, but neither test case could be proven on Web in this environment for the same reason as Android — they require an active Expensify Card program (bank account + KYC) and the Global Reimbursement FX betas. To get real proof, this needs a pre-provisioned account with an Expensify Card program and the |
|
🤖 Blocking screens captured while attempting the test cases on Web: Test Case 1 blocker — Expensify Card page shows only the "Get the Expensify Card" promo (no Settlement frequency page until a card program exists)Test Case 1 blocker — Issuing a card requires adding a real bank account (KYC), not completable in an automated testTest Case 2 blocker — Workspace → Workflows has no "Currency conversion fees" entry point (betas + reimbursement bank account not enabled) |
|
@MelvinBot Mark this PR as ready |
|
🤖 Done — this PR is now marked Ready for review. |





Explanation of Change
This addresses a WCAG 3.2.2 "On Input" accessibility violation, part of the batched plan in issue #74834 (PR 10). Two single-select settings pages committed the change (and, in one case, navigated away) the instant a row was tapped, so the layout/context changed without the user explicitly confirming — disorienting for screen-reader and low-vision users.
Both pages now stage the selection in local state and only persist it when the user presses the Save button (via
confirmButtonOptionsonSelectionList), matching the pattern already shipped in PRs 3–8:WorkspaceSettlementFrequencyPage— Daily/Monthly settlement frequency is staged and written on Save (no navigation, same as before).WorkspaceWorkflowsCurrencyConversionFeesPage— Company-pays/Employee-pays preference is staged and written, then navigates back, on Save.The Save button is disabled until the staged selection differs from the persisted value, so a no-op selection changes nothing.
🤖 Generated by MelvinBot. Checks run locally:
lint-changed✅,typecheck-tsgo✅. React Compiler compliance check couldn't run in this environment (base-ref resolution); no manual memoization was added, so CI will validate. Fullnpm test/ storybook smoke deferred to CI.Fixed Issues
$ #74834
PROPOSAL: #74834 (comment)
Tests
Offline tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari