[Fix] Older UI briefly appears after refreshing call details#210
Merged
khushalsonawat merged 2 commits intodevfrom May 5, 2026
Merged
[Fix] Older UI briefly appears after refreshing call details#210khushalsonawat merged 2 commits intodevfrom
khushalsonawat merged 2 commits intodevfrom
Conversation
khushalsonawat
approved these changes
May 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Problem: Reloading with the test detail drawer open flashed a 90vw skeleton, then collapsed to the 50vw voice drawer with real content.
Cause: Drawer visibility was URL-driven (?rowIndex=… persists across reload), but row data lived in a non-persisted Zustand store. On reload, the URL reopened the drawer immediately while data was still null — isVoiceCall evaluated false, so the wide 90vw skeleton rendered until the fetch completed and flipped the layout to 50vw.
Fix in TestDetailSideDrawer.jsx — four layers:
Gate open on store data, not URL — drawer only slides in once testDetailDrawerOpen is populated.
keepMounted={hasUrlRowIndex} — child stays mounted while drawer is hidden so its existing restore effect can fetch and populate the store.
Reorder the effect — setIsFetching(null) runs before setTestDetailDrawerOpen(data), eliminating the interim frame.
Child early-returns null when !data || isFetching === "initial" — defense-in-depth against async re-renders.
Result: drawer stays hidden, child silently restores the row, then drawer slides in directly at the correct width with real content. In-session cell clicks are unaffected.
Linked issues
TH-4345
Closes TH-4345
Type of change
How was this tested?
Screenshots / recordings (if UI)
Checklist
make check-all/yarn check-allpasses locally