[No QA] perf: Search S4 useSearchSnapshot data layer#93805
[No QA] perf: Search S4 useSearchSnapshot data layer#93805BartekObudzinski wants to merge 13 commits into
Conversation
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f85853d8f2
ℹ️ 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".
|
@BartekObudzinski ESlint if failing |
|
@vit all good now |
|
@MelvinBot do regression test on android |
|
@FitseTLT Can you review? Thanks! |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari |
2026-06-19.16-13-26.mp4 |
|
just updated the docs fyi, the bug you mean you can't create track distance? @FitseTLT |
It is crasing when u create an expense while on spend page. It is not happening on main. |
|
Thanks I could reproduce that, looking into that |
|
PR doesn’t need product input as a perf PR. Unassigning and unsubscribing myself. |
Explanation of Change
`` now consumes a single
useSearchSnapshot(...)for every variant and feeds the existing `SearchList`. The hook owns the entire projection (both `getSections` stages, group sub-snapshots, sort, columns, defer gating, highlight stamping) and absorbs the two-phase optimistic-row resilience, so the screen runs the live merge and the optimistic lifecycle exactly once. This removes the parallel double-pipeline (and the duplicated optimistic lifecycle on the flat-expense path) that the earlier S4+S5 draft carried.Behavior-preserving.
useSearchSnapshotis a hydrated facade for now:datais the fully sorted + joined rows thatSearchListstill reads display fields off. Identities-only is deferred to S5/S6, once the rows self-hydrate.searchResultsand the highlight keys are passed in transitionally (the snapshot subscription moves into the hook in S6).Fixed Issues
$ #93940
PROPOSAL:
Tests
Offline tests
QA Steps
No QA
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: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari