Fix fullScreenBlockingView bleeding over navigationTabBar (deploy blockers after debugTabView update)#93078
Conversation
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
578868e to
0e03137
Compare
0e03137 to
b2cc5b8
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b2cc5b8087
ℹ️ 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".
|
|
||
| useEffect(() => { | ||
| if (!shouldForceFullScreen) { | ||
| if (!shouldForceFullScreen || !isFocused) { |
There was a problem hiding this comment.
Preserve blocking state under transparent RHP
When a fullscreen route is visible underneath the right modal/RHP, the route is blurred, so useIsFocused() is false even though its fixed forcedBlockingViewContainer is still rendered behind the transparent modal. In that state this guard removes or skips the route key, which makes TabNavigatorBar apply its zIndex: 1 again and lets the navigation tab bar bleed over the blocking view until the RHP closes. Please avoid gating the blocking key solely on focus; it needs to remain set for visible routes under transparent modals and only be pruned when the route is no longer on the visible stack.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
ForceFullScreenView keeps rendering its opaque full-screen forcedBlockingViewContainer regardless of focus — the focus guard only controls the isBlockingViewVisible flag that coordinates the NavigationTabBar. Since the tab bar belongs to the focused route, when the blocking screen is blurred it's correct to release the key and let the focused screen own the tab bar; on re-focus the effect re-registers it and the tab bar hides again. So gating on focus is intentional here and behaves correctly.
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppCleanShot.2026-06-12.at.16.07.56.5.mp4Android: mWeb ChromeCleanShot.2026-06-12.at.16.05.36.3.mp4iOS: HybridAppCleanShot.2026-06-12.at.16.06.42.4.mp4iOS: mWeb SafariCleanShot.2026-06-12.at.16.03.23.2.mp4MacOS: Chrome / SafariCleanShot.2026-06-12.at.15.58.05.1.mp4 |
suneox
left a comment
There was a problem hiding this comment.
The fix worked as expected on all platforms.
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
Explanation of Change
ForceFullScreenViewregistered its route key in the full-screen blocking view context regardless of focus, so a backgrounded blocking screen keptisBlockingViewVisibletrue and hid theNavigationTabBaron other screens. This adds auseIsFocusedguard so the route key is only registered while the screen is focused.Fixed Issues
$ #92327
$ #92409
PROPOSAL:
Tests
REPLACE/goBackToHometo return Home while skipping more than one route (e.g. tap a link/action that takes you back to the home report list).isBlockingViewVisibleno longer remains stuck — the blocking view's effect on the tab bar is cleared even though the blocking screen was never formally unmounted.Offline tests
N/A — purely client-side navigation state reconciliation; no API calls or Onyx writes are involved.
QA Steps
Same as tests.
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))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_native.mov
Android: mWeb Chrome
android_web.mov
iOS: Native
ios_native.mov
iOS: mWeb Safari
ios_web.mov
MacOS: Chrome / Safari
web.mov