Update Expensify card UI#89379
Conversation
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
There was a problem hiding this comment.
Pull request overview
This PR refreshes the Expensify card details UI across personal, workspace Expensify, and workspace company card pages to match a new design. It moves cardholder names onto the card artwork, replaces inline menu rows for primary actions (View transactions / Freeze / Unfreeze / Update card) with a shared centered button row, adds a frozen card icon to the unfreeze button, and reorders/restyles card details (name above other fields, remaining limit hint). A small shared helper component and a navigation utility for "view transactions" are introduced and reused.
Changes:
- New shared
CardDetailsActionButtons/CardDetailsActionButtonUI andnavigateToCardTransactionshelper, adopted by the three card detail pages. FrozenCardHeaderredesigned: status text centered, freeze icon moved onto the unfreeze button (now labeled "Unfreeze card"), optional children rendered next to it with equal width.- Reorganized fields and removed cardholder/
MenuItemrows on workspace card pages; renamed the "Reveal details" CTA to "Reveal" (with translations and test updates).
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/pages/settings/Wallet/CardDetailsActionButtons.tsx | New shared centered action buttons row with equal-width context. |
| src/libs/CardNavigationUtils.ts | New helper to navigate to a card's transactions search. |
| src/components/FrozenCardHeader.tsx | Centers status, adds freeze icon to unfreeze button, supports children. |
| src/components/CardPreview.tsx | Sets fixed height when an overlay image is present. |
| src/pages/settings/Wallet/ExpensifyCardPage/index.tsx | Adopts new action buttons, reorders rows, renames "Reveal details" → "Reveal". |
| src/pages/workspace/expensifyCard/WorkspaceExpensifyCardDetailsPage.tsx | Adopts new layout/buttons; moves card name row above. |
| src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx | Adopts new layout/buttons; replaces last-updated row and update menu item. |
| src/styles/variables.ts | Adds cardDetailsActionButtonMinWidth. |
| src/languages/*.ts | Adds cardPage.cardDetails.reveal translation. |
| tests/ui/WalletExpensifyCardPageTest.tsx | Updates tests to look up the renamed translation key. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
🚧 @nkuoch has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
@ShridharGoel There's a gap below the Change PIN row. It appears to be caused by this change
|
|
Good catch - let's follow up and fix that. I think that would be grouped in the rows below, right? |
|
How to get a card with this PIN option? |
|
Let's wrap all MenuItems in the View with a top margin in the last part |
|
🚀 Deployed to staging by https://github.com/nkuoch in version: 9.3.78-0 🚀
Bundle Size Analysis (Sentry): |
|
Yes, a help site update is needed. PR #89379 renamed the virtual card button from Reveal details to Reveal, which is referenced in the cardholder help article. Draft PR created: #91127 Change: No other help articles reference this button text. |
|
Deploy Blocker #91137 was identified to be related to this PR. |
|
Deploy Blocker #91138 was identified to be related to this PR. |
|
Deploy Blocker #91139 was identified to be related to this PR. |
@ShridharGoel can you plz work on this |
|
🚀 Deployed to production by https://github.com/roryabraham in version: 9.3.78-1 🚀
|
The card details page button was renamed from "Reveal details" to "Reveal" in Expensify#89379. Update the help article to match. Co-authored-by: Shridhar Goel <ShridharGoel@users.noreply.github.com>
|
@ShridharGoel @Pujan92 REC-20260608101625.mp4 |

Explanation of Change
Updated the Expensify card details pages to match the new UI:
Fixed Issues
$ #87497
PROPOSAL: N/A
Tests
Offline tests
QA Steps
Same as tests.
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, 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.ScrollViewcomponent to make it scrollable when more elements are added to the page.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
Screen.Recording.2026-05-02.at.12.43.37.AM.mov
MacOS: Chrome / Safari