Skip to content

Commit d700700

Browse files
committed
Fix incremental thread event UI state seeding and remove redundant useShallow
- Call syncThreads in applyEventBatch for thread.created/thread.deleted events so incrementally created threads get their seedVisitedAt populated in threadLastVisitedAtById, matching the snapshot recovery path behavior. - Remove unnecessary useShallow wrapper from store.projects and store.threads selectors in Sidebar. Zustand's default Object.is comparison already skips re-renders when these array references are unchanged, making the O(n) shallow comparison pure overhead.
1 parent f659da5 commit d700700

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

apps/web/src/components/Sidebar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,8 @@ function SortableProjectItem({
436436
}
437437

438438
export default function Sidebar() {
439-
const projects = useStore(useShallow((store) => store.projects));
440-
const serverThreads = useStore(useShallow((store) => store.threads));
439+
const projects = useStore((store) => store.projects);
440+
const serverThreads = useStore((store) => store.threads);
441441
const { projectExpandedById, projectOrder, threadLastVisitedAtById } = useUiStateStore(
442442
useShallow((store) => ({
443443
projectExpandedById: store.projectExpandedById,

apps/web/src/routes/__root.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,18 @@ function EventRouter() {
230230
const projects = useStore.getState().projects;
231231
syncProjects(projects.map((project) => ({ id: project.id, cwd: project.cwd })));
232232
}
233+
const needsThreadUiSync = nextEvents.some(
234+
(event) => event.type === "thread.created" || event.type === "thread.deleted",
235+
);
236+
if (needsThreadUiSync) {
237+
const threads = useStore.getState().threads;
238+
syncThreads(
239+
threads.map((thread) => ({
240+
id: thread.id,
241+
seedVisitedAt: thread.updatedAt ?? thread.createdAt,
242+
})),
243+
);
244+
}
233245
const draftStore = useComposerDraftStore.getState();
234246
for (const threadId of batchEffects.clearPromotedDraftThreadIds) {
235247
clearPromotedDraftThread(threadId);

0 commit comments

Comments
 (0)