Problem
WorkspacesListPage subscribes to the entire COLLECTION.POLICY key without a selector and uses unstable inline renderItem and row props. When a user opens a tab inside a workspace (e.g. Workflows), openPolicyWorkflowsPage performs an optimistic Onyx.merge on the policy entry. Because WorkspacesListPage remains mounted but blurred, that merge triggers a full re-render of the list and every row — a rerender storm during normal workspace navigation.
Solution
Split the component into a thin WorkspacesListPage wrapper and a WorkspacesListPageContent inner component, then wrap the inner component with FreezeWrapper from @libs/Navigation/AppNavigator/FreezeWrapper. While the screen is blurred, FreezeWrapper suspends the React tree so Onyx updates that arrive during the visit are batched and applied only when the user returns to the page.
PR
#90970
Issue Owner
Current Issue Owner: @abzokhattab
Problem
WorkspacesListPagesubscribes to the entireCOLLECTION.POLICYkey without a selector and uses unstable inlinerenderItemand row props. When a user opens a tab inside a workspace (e.g. Workflows),openPolicyWorkflowsPageperforms an optimisticOnyx.mergeon the policy entry. BecauseWorkspacesListPageremains mounted but blurred, that merge triggers a full re-render of the list and every row — a rerender storm during normal workspace navigation.Solution
Split the component into a thin
WorkspacesListPagewrapper and aWorkspacesListPageContentinner component, then wrap the inner component withFreezeWrapperfrom@libs/Navigation/AppNavigator/FreezeWrapper. While the screen is blurred,FreezeWrappersuspends the React tree so Onyx updates that arrive during the visit are batched and applied only when the user returns to the page.PR
#90970
Issue Owner
Current Issue Owner: @abzokhattab