[Multi-Scan] Support Multi-Scan in Receipt page#63352
[Multi-Scan] Support Multi-Scan in Receipt page#63352cristipaval merged 56 commits intoExpensify:mainfrom
Conversation
…scan-page' into feature/multi-scan-wire-up
…scan-page' into feature/multi-scan-wire-up
|
@dukenv0307 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
@cristipaval that is correct, current main |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! 🧪🧪
|
|
The delete button doesn't work for me in this latest adhoc build. |
@dubielzyk-expensify Is there any chance something might've been broken with the ios ad hoc build as it was the case recently? |
|
@dubielzyk-expensify @cristipaval |
|
On it 🚀 |
|
🚧 @shawnborton 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, Desktop, and Web. Happy testing! 🧪🧪
|
|
tested Android ad hoc build and it works as expected, however I do not have the option to test ios ad hoc build due to certificates issue, I'd appreciate it if someone could verify if the issue got fixed 🙏🏻 |
|
delete button works on my iPhone too 👍 |
|
iOS looks good to me too 👍 |
|
@cristipaval @dubielzyk-expensify hey, just wanted to ask if we should move forward with merging this PR and opening a follow up ticket about different size photos in the attachment carousel view? |
|
Yep, that works for me 👍 As long as we follow-up shortly to address them I'm okay with merging |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
@Swor71 This PR can be tested only on mWeb and Native apps, right? |
|
🚀 Deployed to staging by https://github.com/cristipaval in version: 9.1.73-0 🚀
|
|
🚀 Deployed to production by https://github.com/puneetlath in version: 9.1.73-0 🚀
|
| } | ||
|
|
||
| InteractionManager.runAfterInteractions(() => { | ||
| removeTransactionReceipt(currentReceipt.transactionID); |
There was a problem hiding this comment.
Coming from #65252, if users delete the first receipt, we should promote the second one to the main transaction and preserve the common value from the first one
| const activeReceipt = receipts.find((receipt) => receipt.transactionID === route?.params?.transactionID); | ||
| const activeReceiptIndex = receipts.findIndex((receipt) => receipt.transactionID === activeReceipt?.transactionID); | ||
|
|
||
| setCurrentReceipt(activeReceipt); | ||
| setPage(activeReceiptIndex); | ||
| }, [receipts, route?.params?.transactionID]); |
There was a problem hiding this comment.
Coming from #79304 checklist: The current logic maintains two separate state variables:
page: Updated during carousel navigationcurrentReceipt: Only set once on mount based onroute.params.transactionID
When users navigate with arrows, page changes but currentReceipt never updates. The delete handler uses the stale currentReceipt.transactionID so we should get currentReceipt from page index

Explanation of Change
This PR introduces
ReceiptViewModalto display receipts when pressed on from filmstrip in multi select mode. Additionally, it refactors common UI parts forAttachmentCarouselintoAttachmentCarouselViewFixed Issues
$ #61182
DOC: https://docs.google.com/document/d/1ZjSjfIM7N8jhBwyYA4nz3Fe0cvOEXdu-6FA3pethL1Q/edit?tab=t.0#bookmark=id.noo0mxn10b0l
PROPOSAL:
Tests
Pre-step: Turn canUseMultiScan value into true here and here.
Steps:
mWeb/mobile:
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 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))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
480.Screen.Recording.2025-06-04.at.19.18.18.mov
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
480.ScreenRecording_06-04-2025.18-18-47_1.mov
MacOS: Chrome / Safari
MacOS: Desktop