Repository navigation
Conversation
Rename ConfirmationPageButtonBase/SecondaryButton exports to match their file names, and drop the en dash from the new index.tsx header comment.
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
…hook Also rename ConfirmationPage layout/Content and style props to StyleProp so file names match their exports and style props accept arrays/conditionals.
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
|
@ZhenjaHorbach comments applied, thanks for the review! |
|
Thanks @Guccio163 |
…-fork into Guccio163/confirmationPage/introduction
|
@ZhenjaHorbach not anymore 😁 |
|
Changes look good! |
…-fork into Guccio163/confirmationPage/introduction
|
LGTM! |
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/mountiny in version: 9.5.16-0 🚀
|
|
No help site update needed. This PR refactors how |
|
@Guccio163 @ZhenjaHorbach @MelvinBot All set confirmation screen not displayed. Are we missing anythinh here. Can you please check the video attached? 1-web.mp4 |
|
This looks like a problem with test steps 3–4, not with this PR. Share → Copy URL copies the expense thread link ( To reach the screen, open the review route for that expense directly: Use the expense thread's Details
I couldn't open the attached video, so I'm assuming you followed steps 3–4 as written. If you opened the review URL directly and still didn't see "All set!", please share the URL you used.
|
|
@Guccio163 @MelvinBot Hmm.. it's not here page displayed when review route URL is used
|
|
The URL in your screenshot uses the expense report's ID ( To get the right ID:
Details
|
|
🚀 Deployed to staging by https://github.com/mountiny in version: 9.5.18-0 🚀
|
|
No help site update is needed. This PR only refactors how |
|
🚀 Deployed to production by https://github.com/grgia in version: 9.5.18-1 🚀
Bundle Size Analysis (Sentry): |

Explanation of Change
ConfirmationPageis migrated from a single monolithic component to a composition-based API, following the same pattern already established forButtonandHeader.ConfirmationPage.Illustration,.Heading,.Description,.PrimaryButton,.SecondaryButton,.Content) lives undersrc/components/ConfirmationPage/, exposed as a compound component viaObject.assign.ConfirmationPageDefaultis a composed preset covering the common illustration/heading/description/button shape, for callers that don't need custom composition.descriptionComponent, or an inline footer error) compose the primitives directly:<ConfirmationPage><ConfirmationPage.Content>…</ConfirmationPage.Content><FixedFooter>…</FixedFooter></ConfirmationPage>.ConfirmationPageare migrated (24 ontoConfirmationPageDefault, the rest onto direct composition where the preset doesn't fit). The oldsrc/components/ConfirmationPage.tsxis deleted — nothing imports it anymore.MergeResultPage's large per-result config object (the most complex caller, with CTA/secondary-button/footer variants per merge-account result) is extracted into auseMergeResultConfirmationConfighook, so the page component itself only renders.tsc,lint,spell, React Compiler compliance, and the existing Jest suite (including the UI tests that render these pages) — all clean, no regressions.Fixed Issues
$ #101224
PROPOSAL:
Tests
Test case 1: ConfirmationPageDefault preset (duplicate-expense review empty state)
https://staging.new.expensify.com/r/<reportID>— it only opens the expense thread, not the Review duplicates screen.reportIDfrom the copied URL and open the review route directly in a browser tab (use the expense thread'sreportIDin both places):https://staging.new.expensify.com/r/<reportID>/duplicates/review/<reportID>(On mobile, open the same URL via a deep link, e.g.
adb shell am start -n <package>/ExpensifyActivityBase -d <url>on Android orxcrun simctl openurl booted <url>on iOS simulator.)DynamicReviewPage's empty-state branch, composed withConfirmationPageDefault.Offline tests
N/A — this PR only changes how existing UI is composed internally; it doesn't touch data fetching, Onyx, or network logic, so there's no new offline-specific behavior to test.
QA Steps
Same as Tests section above.
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected) — all 33 existingConfirmationPagecall sites were migrated and verified, not just a sampleStyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)ConfirmationPageConfirmationPageis not itself a deeplink targetDesignlabel 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-native.mp4
Android: mWeb Chrome
iOS: Native
ios-native.mp4
iOS: mWeb Safari
MacOS: Chrome / Safari
macos-chrome.mp4