Repository navigation
Conversation
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@codex review |
|
@MelvinBot review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bf73a117e2
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
🤖 Code review: split the confirmation footer by variants pt2 One thing I'd fix before merge — the amount field's autofocus is silently dropped. Everything else is robustness/style, and I confirmed several things that look risky in the diff are actually fine. 🔴
|
| Step | Status |
|---|---|
| ✅ | |
| ✅ | |
JS console errors/warnings during both flowsNot checkable: the web driver has no console inspection command. No error banners, toasts, or broken screens appeared in either flow, but that is not equivalent to a console check. |
❌ |
Note the smoke test only covers the manual and distance-map variants. Scan, odometer, invoice, and the compact-mode path are untested, and the autofocus regression above would not show up in either flow I ran.
…rs-pt2 # Conflicts: # src/components/MoneyRequestConfirmationList/sections/InvoiceSenderField.tsx
|
@codex review |
|
Codex Review: Didn't find any major issues. Another round soon, please! Reviewed commit: ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
|
@MelvinBot review |
|
🤖 Code review round 2: split the confirmation footer by variants pt2 No behavior regression found. I traced all eight router branches and every prop each variant threads, and the refactor is equivalent to the old
Two things worth addressing before merge, both about the new structure rather than the behavior it produces. 🟡 The router is the point of this PR and has no test coverage
And all five assertions target the same shared element:
This matters more than usual because this PR deleted a guard rather than moving it. Ask: the harness in that file is already 90% of the work. Parameterize 🟡 The footer shape now hinges on optional
|
|
@MelvinBot review |
|
🤖 Code review round 3: split the confirmation footer by variants pt2 Both round-2 asks are addressed, and the new router test is the right shape — I mutation-tested it and it genuinely catches a misroute. One gap left in the new test, and it's the one branch that matters most. 🟡 The new test doesn't lock in the invoice-first ordering
I confirmed this by moving the invoice branch from the top of the router to just above the One-line fix — give the invoice case a mode that would otherwise route elsewhere: renderFooter({isScanRequest: true}, CONST.IOU.ACTION.CREATE, CONST.IOU.TYPE.INVOICE);
expect(jest.mocked(InvoiceFooter)).toHaveBeenCalled();
expect(jest.mocked(ScanFooter)).not.toHaveBeenCalled();That is also a more faithful regression test: the risk you documented isn't "invoice doesn't route", it's "invoice silently loses the map, Distance, Rate, or compact mode if it ever gains a request type". While you're there, the seven 🟢 Still open from round 2 (both optional)
Verified fixed since round 2
Stale comment fixed — Router test coverage. All eight branches are now exercised, up from one. I mutation-tested it rather than taking it on faith: reordering the distance branches so bare Mocking each variant to Gates. The round-1 and round-2 behavior analysis still stands: no regression found across all eight branches and the props each variant threads. 🤖 Web test steps verification results:
|
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppios.moviOS: mWeb SafariMacOS: Chrome / Safariweb1.movweb2.mov |
|
typescript failing |
|
@situchan I'll be OOO next week, is it possible to do the review today? |
|
yes |
|
Codex Review: Didn't find any major issues. Breezy! Reviewed commit: ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
🤖 Regression review — no confirmed user-reachable regressionI reconstructed what the old What I would still change before merging are three robustness gaps, not behavior breaks: 1. The invoice branch is checked first, and nothing enforces its invariant
I could not find a reachable path today: Suggested: make the guard self-enforcing — 2.
|
🤖 Code quality reviewThe direction is right, and a few things here are genuinely good: pushing Four things I'd fix before merge, then some smaller stuff. 1. Two dispatcher lines look symmetric and aren't
Drop the redundant conjunct on 2.
|
|
Melvin's feedback overview:
iouType === CONST.IOU.TYPE.INVOICE can't be scan/distance request, so I think the condition is okay the way it's rigth now.
I think it's a small code cleanup we can do in the following PRs.
Since it currently works as expected, I wouldn't consider it's a problem for future callers.
I think it's okay to keep it as is, considering it's more readable
I think it's a cleanup that can be made in the following PRs.
THIS is actually valid, and it will be resolved when we split |
|
I'll be OOO next week, back on September 14 🌴 |
|
Agree automated reviews are not blockers |
…9449-confirmation-footers-pt2
|
🚧 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.4.74-0 🚀
|
|
No help site changes are required, so I did not create a draft PR. This PR is an internal refactor with no behavior change. It splits How I checked
Since there is no help site PR, the review and |
|
🚀 Deployed to production by https://github.com/mountiny in version: 9.4.74-2 🚀
|










Explanation of Change
Refactor with no behavior change.
Follows #99578, which turned
MoneyRequestConfirmationListFooterinto a dispatcher with per-type variants and migrated per-diem and time footers. This one migrates the rest and deletes the fallback.Six new variants:
DistanceMapFooterDistanceManualFooterDistanceOdometerFooterScanFooterManualFooterInvoiceFooterEach renders only the sections its expense type reaches.
Fixed Issues
$ #99449
PROPOSAL: N/A
Tests
This is a refactor with no intended behavior change, so testing is regression-focused: every expense type must render and submit exactly as before.
Please, verify the confirmation page looks and works same way as before in the next scenariosu:
Offline tests
Same, as in Tests section
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
Same, as in Tests section
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)Avatar, 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
Manual
manual.mp4
Scan
scan.mp4
Distance -> map
distance_map.mp4
Distance -> manual
distance_manual.mp4
Distance -> odometr
distance_odometr.mp4
Invoice
invoice.mp4
Submit from self dm
submit.mp4