Fix iOS freeze on locked-account pay in selection mode (#95026)#95063
Fix iOS freeze on locked-account pay in selection mode (#95026)#95063Krishna2323 wants to merge 5 commits into
Conversation
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@codex review |
ReviewThe fix is sound and well-scoped. It resolves the iOS freeze by deferring the blocking-modal presentation until the payment popover's dismiss animation finishes (via The refactor in A few non-blocking questions/suggestions:
The added test mock at Note: I reviewed the logic but could not execute the unit test in my environment, so please confirm CI passes. |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2026-07-02.at.9.51.20.AM.movAndroid: mWeb ChromeiOS: HybridAppios.moviOS: mWeb SafariMacOS: Chrome / Safariweb.mov |
|
Codex Review: Didn't find any major issues. Already looking forward to the next diff. 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 in android: Locked account modal shows 2 times Screen.Recording.2026-07-02.at.9.49.32.AM.movproduction Screen.Recording.2026-07-02.at.9.51.20.AM.mov |
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Fixed: Monosnap.screencast.2026-07-02.17-45-41.mp4Monosnap.screencast.2026-07-02.17-52-47.mp4 |
| * On iOS, presenting a modal while another modal is dismissing freezes the app. | ||
| */ | ||
| function deferModalPresentationAfterPopoverDismiss(presentModal: () => void) { | ||
| if (getPlatform() !== CONST.PLATFORM.IOS) { |
There was a problem hiding this comment.
Please use separate files as per our platform philosophy
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
|
Codex Review: Didn't find any major issues. Hooray! 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". |
|
We did not find an internal engineer to review this PR, trying to assign a random engineer to #95026 as well as to this PR... Please reach out for help on Slack if no one gets assigned! |
|
🤖 Reviewed the change. The approach is sound — deferring the blocking modal until the popover's dismiss transition completes is the right fix for the iOS "present-a-modal-while-another-is-dismissing" freeze, and the platform-split util ( A few things worth confirming before merge: 1. Inconsistent deferral of the verify-account / restricted-action navigations in 2. Naming / JSDoc 3. Test coverage None of these block the core fix — (1) is the one I'd want an answer on. Nice, targeted change otherwise. |
Explanation of Change
Fixed Issues
$ #95026
PROPOSAL:
Tests
Offline tests
QA Steps
Same as tests
Verify that no errors appear in the JS console
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand 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_hybrid.mp4
Android: mWeb Chrome
android_mWeb.mp4
iOS: Native
ios_hybrid.mp4
iOS: mWeb Safari
ios_mWeb.mp4
MacOS: Chrome / Safari
web_chrome.mp4