Part of
Tracking: Search screen decomposition — eliminate parallel double-merge (perf)
What needs to be done
This is the first PR in the Search screen decomposition (Milestone 1, Wave A):
- Drop
reportActions, exportReportActions, allReportMetadata, reportAttributesDerivedValue from <Search> and getSections — these were the highest-churn parallel merge inputs
- Replace array-valued
allActions field on row items with four primitive capability booleans (canPay / canApprove / canSubmit / canChangeApprover) for React Compiler-stable value tracking
- Introduce
useLiveRowCapabilities hook: row-level live recompute so primary action buttons reflect real Onyx state, not snapshot-stale values
- Replace
applySelectionToItem with useRowSelection per-row selection reads; delete the screen-level selection dep on renderItem
Expected outcome
SPAN_OPEN_REPORT P90 improved
- Row-tap no longer reconciles all visible rows in the same frame
- Measured: -20.5% total commit duration, -20.7% components rendered on row-tap
PR
#91438
Issue Owner
Current Issue Owner: @mallenexpensify
Part of
Tracking: Search screen decomposition — eliminate parallel double-merge (perf)
What needs to be done
This is the first PR in the Search screen decomposition (Milestone 1, Wave A):
reportActions,exportReportActions,allReportMetadata,reportAttributesDerivedValuefrom<Search>andgetSections— these were the highest-churn parallel merge inputsallActionsfield on row items with four primitive capability booleans (canPay/canApprove/canSubmit/canChangeApprover) for React Compiler-stable value trackinguseLiveRowCapabilitieshook: row-level live recompute so primary action buttons reflect real Onyx state, not snapshot-stale valuesapplySelectionToItemwithuseRowSelectionper-row selection reads; delete the screen-level selection dep onrenderItemExpected outcome
SPAN_OPEN_REPORTP90 improvedPR
#91438
Issue Owner
Current Issue Owner: @mallenexpensify