Migrate InteractionManager - (Newly added usages) batch 1#94171
Conversation
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@Pujan92 @ikevin127 One of you needs to 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] |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 40a4ba93e0
ℹ️ 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".
|
I'll be OOO starting tomorrow, so @collectioneur will take care of this PR from now on |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppSimulator.Screen.Recording.-.iPhone.15.Pro.-.2026-06-25.at.21.06.16.movSimulator.Screen.Recording.-.iPhone.15.Pro.-.2026-06-26.at.00.07.55.movSimulator.Screen.Recording.-.iPhone.15.Pro.-.2026-06-30.at.13.46.20.moviOS: mWeb SafariMacOS: Chrome / SafariScreen.Recording.2026-06-26.at.00.02.25.movScreen.Recording.2026-06-25.at.23.59.36.mov |
| const validTransactions = Object.fromEntries(Object.entries(allTransactions ?? {}).filter((entry): entry is [string, Transaction] => entry[1] !== undefined)); | ||
| InteractionManager.runAfterInteractions(() => { | ||
| TransitionTracker.runAfterTransitions({ | ||
| waitForUpcomingTransition: true, |
There was a problem hiding this comment.
Do we need this bcoz I see the delay in opening the delete modal?
Simulator.Screen.Recording.-.iPhone.15.Pro.-.2026-06-26.at.00.12.55.mov
There was a problem hiding this comment.
Yes, I've confirmed it isn't needed here because the delete modal already waits for the options modal to close. Thanks!
Screen.Recording.2026-06-29.at.11.02.46.mov
|
@collectioneur plz fix the conflicts |
|
@Pujan92 resolved 🫡 |
|
@roryabraham all fixed, thanks! |
|
🚧 roryabraham 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/roryabraham in version: 9.4.26-0 🚀
|
|
🤖 Help site review: no changes required. I reviewed the changes in this PR and no updates are needed to the help site files under This PR is a purely internal engineering refactor with no user-facing behavior change:
None of these touch feature behavior, UI copy, tab/settings labels, pricing, or workflows that the help site documents — the contact-permission prompt, search router, and bulk/selection actions all keep their existing user-facing behavior. So there is nothing to document or update. No draft docs PR was created since no changes are required. |
|
Deploy Blocker #95114 was identified to be related to this PR. |
…miss Restore the InteractionManager deferral around the Search bulk-delete dispatch that Expensify#94171 removed. Dispatching the delete synchronously as the confirm modal dismissed caused the deletion to be dropped on iOS, leaving the selected expenses undeleted (Expensify#95114). Co-authored-by: Marco Chávez <marcochavezf@users.noreply.github.com>
|
🚀 Deployed to production by https://github.com/grgia in version: 9.4.27-2 🚀
Bundle Size Analysis (Sentry): |
Explanation of Change
Migration of remaining usages of InteractionManager.
This PR also migrates the ConfirmModal from
src/components/ContactPermissionModal/index.native.tsxto useConfirmModal and refactors the component into a hooksrc/hooks/ContactPermissionModal/index.native.ts.Fixed Issues
$ #71913
$ #83071
PROPOSAL:
Tests
ContactPermissionModalPrerequisites: Have an account with a workspace created and use a simulator/device that hasn't been prompted for contact permissions yet
Account->Troubleshootand pressClear cache and restartCreate expenseNextSearchRouter.tsxuseSearchBulkActions.tsxSpend->ReportsSelectDelete->ConfirmuseSelectionModeReportActions.tsxSelectHoldand confirm it (input any reason)ApproveOffline tests
N/A
QA Steps
Same as Tests.
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
Android: Native
Android: mWeb Chrome
useSearchBulkActions.tsxleftovers-3-delete-report.mov
iOS: Native
ContactPermissionModalleftovers-1-contacts.mov
useSelectionModeReportActions.tsxleftovers-4-onhold.mov
iOS: mWeb Safari
MacOS: Chrome / Safari
SearchRouter.tsxleftovers-2-search-input.mov