Conversation
|
@Krishna2323 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] |
|
@codex review |
|
Codex Review: Didn't find any major issues. Breezy! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Krishna2323
left a comment
There was a problem hiding this comment.
Tested on web, and this doesn't fully fix it there. The scroll still jumps up and down sometimes while typing, the search input can still end up out of view, and clearing the field doesn't work correctly either.
Monosnap.screencast.2026-08-29.06-13-54.mp4
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@Krishna2323 Kind ping here, Thanks! |
|
On my radar for today. |
|
On my radar for today |
Krishna2323
left a comment
There was a problem hiding this comment.
@KJ21-ENG This grew quite a bit from the original fix. Most of that is handling local input state vs. activeSearchString, which feels like a lot of complexity for a scroll bug.
Could we try a single effect instead?
useLayoutEffect(() => {
if (!isTextInputFocused(inputRef)) {
return;
}
listRef.current?.scrollToOffset({offset: 0, animated: false});
}, [activeSearchString, listRef]);This covers typing, clearing, and imperative updates with one timing, which might also avoid the web jitter. The only gap is whitespace-only edits, but those don't refilter anyway.
The tests are good, but many are covering the extra batching/whitespace/imperative behavior introduced by this PR. Simplifying the fix should let us drop most of those.
|
@Krishna2323 Thanks, this was a good call. I switched the fix to the single focused The deep-scroll edit and clear flow now stays fully visible and focused on Android, and the remaining whitespace edge is clean on web. Attaching both latest recordings below. Web: pr99451-web-whitespace.movAndroid: pr99451-android-deep-scroll.mp4 |
Krishna2323
left a comment
There was a problem hiding this comment.
@KJ21-ENG The issue is still reproducible on android:
android_hybrid.mp4
|
Strange, checking it 🏃🏻♂️ |
|
@Krishna2323 Fixed. PR99451-Android-fixed-search.mp4 |
|
@KJ21-ENG, I can see a double-header flicker: Monosnap.screencast.2026-09-10.02-31-08.mp4 |
|
|
Latest after-fix video. native-fix-on-edit-clear.mp4 |
|
@KJ21-ENG two patches here touch core RN and FlashList native code. Can you explain what specifically forced patching (vs. a JS-only fix), and have you filed/considered filing these upstream? |
|
@Krishna2323 The patches address two separate behaviors that remained after the JS search-reset fix:
Neither change has been filed upstream yet; both patch notes state that. I agree both warrant upstream discussion with minimal reproductions: the RN case as a more granular scrolling control, and the FlashList case as a sticky-overlay release timing issue. Supporting evidence1. Existing RN control: the rejected focus-scoped workaround broke Tab revealWith the
Rejected prototype sequence, 18 seconds. The diagnostic reveal above is a separate manual step, not automatic scrolling. The recording has no keypress overlay; the Tab result is corroborated by the recorded runtime snapshots and these focus/control screenshots. rn-broad-flag-rejected-trial.mp42. FlashList: the tested JS Cell-opacity workaround replaced duplication with a blank strip
Original duplicate transition, 4 seconds: flashlist-original-duplicate.mp4Rejected JS workaround, 5 seconds. The blank-strip frame is at 00:02 in this excerpt: flashlist-js-workaround-gap.mp4This is the Table-owned normal-Cell opacity workaround. It is not footage of a 3. Matched RN rectangle-scroll comparison with the other fixes held constantSame rebuilt Android binary and JavaScript, with the sticky-header correction and delayed-focus-helper skip active in both conditions. Native child-focus scrolling remains enabled. Only the Table's declarative rectangle-suppression ownership is toggled. Rectangle requests enabled: the input stops at the clipped intermediate position before the JS reset. The first edit shows that position around 00:02, followed by the full description/search position around 00:03. rn-rectangle-enabled.mp4Rectangle requests suppressed: the corresponding edit and clear return directly to the full search-header position. rn-rectangle-suppressed.mp4 |
|
@Krishna2323 Kind ping here. Thanks! |
|
Reviewing today... |
Monosnap.screencast.2026-09-18.04-37-43.mp4 |
|
lmk when this is ready please |
|
@Krishna2323 I replayed the sequence from your video on 5421ab1: scroll with the search focused, enter L, scroll and add k, clear both characters, repeat the scrolled K/clear flow twice, then enter A, scroll, and clear it. I couldn't reproduce the double-header flash in this recording. This was on a physical realme RMX1971 running Android 11/API 30. Could you confirm the commit you tested and whether both dependency patches were applied and the Android app rebuilt? That will help me match your setup and trace the remaining difference. Thanks! pr-99451-android-reviewer-sequence.mp4 |
|
@JS00001, could you please run an ad hoc build for native? |





Explanation of Change
Focused query changes reset a scrolled table after its list ref is attached, keeping search visible through matching results, no results, and clearing.
On Android, scrolling-header searches also avoid the delayed focus scroll that opposed the first swipe and temporarily suppress native caret-rectangle scrolling that caused a clipped intermediate stop. Native child-focus navigation remains enabled. The FlashList patch hides the stale sticky copy as scrolling crosses its release boundary. Focus ownership is scoped to each table and released on blur, removal, or menu suppression. Regression coverage and patch documentation accompany these changes.
Fixed Issues
$ #99373
PROPOSAL: N/A (deploy-blocker follow-up to #93877; no proposal flow)
Tests
athat still returns several categories. Verify search returns fully into view in one movement, retains its value and focus, and shows one column header without a duplicate or blank header strip.Offline tests
Load the category list, disconnect the device's network, and repeat search, no-results, clear, and scroll checks against the loaded data. Search and focus should behave the same. This change does not alter API calls, stored data, or optimistic updates.
QA Steps
Same as tests.
PR Author Checklist
Platform scope note: this regression is specific to native keyboard and FlashList behavior. Android and iOS native are covered by the recordings below. The mWeb and desktop platform items are marked complete as reviewed and not applicable to this native-only fix, not as claims of additional platform recordings.
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionStyleUtilshelper.mainbefore the final native recordings and validation.Screenshots/Videos
Android: Native
Record_2026-08-25-18-50-42_40d2c9e2d8fb5b5aba3904834590021e.compressed.mp4
Android: mWeb Chrome
iOS: Native
Screen.Recording.2026-08-25.at.7.25.38.PM.mov
iOS: mWeb Safari
MacOS: Chrome / Safari
646286470-222d5177-65ac-474b-bfbb-ffe83e1dcaed.1.mov