Files
sim/apps
Waleed 65435f89aa improvement(sidebar): memoize workflow/folder rows for faster tab navigation (#5428)
* improvement(sidebar): memoize workflow/folder rows for faster tab navigation

Switching between workspace tabs re-rendered every workflow and folder row in
the sidebar because the rows (and the shared export hooks they call) subscribed
to useParams, which re-renders on every navigation.

- Wrap WorkflowItem and FolderItem in React.memo (the only un-memoized leaf
  rows; every sibling row was already memoized).
- Decouple the rows from useParams: thread workspaceId as a stable prop from
  WorkflowList (matching the FileList convention), and expose the live active
  workflowId through a stable activeWorkflowIdRef on SidebarListContext, read
  only in delete callbacks — never during render.
- Refactor the three shared export hooks (used only by these two rows) to take
  workspaceId as a param instead of calling useParams internally.
- Stabilize handleWorkflowClick's identity via refs so the shared list context
  no longer changes identity on navigation.
- Lazy-init the drag-drop siblings Map ref.

On a tab switch only the two rows whose active state flips now re-render.

* fix(sidebar): add workspaceId to render-callback deps

renderWorkflowItem/renderFolderSection now pass workspaceId into the rows, so
they must list it as a dependency — otherwise a workspace switch that doesn't
also change workflowId would leave the callbacks closing over a stale
workspaceId (wrong-workspace deletes/exports).
2026-07-05 10:59:53 -07:00
..