Skip to content

Commit c8e1571

Browse files
committed
Fix project.deleted handler to clean up thread index maps
Clean up threadIdsByProjectId and sidebarThreadsById entries when a project is deleted, preventing stale index entries if thread.deleted events don't arrive before or alongside the project deletion.
1 parent f72141e commit c8e1571

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

apps/web/src/store.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -637,8 +637,22 @@ export function applyOrchestrationEvent(state: AppState, event: OrchestrationEve
637637
}
638638

639639
case "project.deleted": {
640-
const projects = state.projects.filter((project) => project.id !== event.payload.projectId);
641-
return projects.length === state.projects.length ? state : { ...state, projects };
640+
const deletedProjectId = event.payload.projectId;
641+
const projects = state.projects.filter((project) => project.id !== deletedProjectId);
642+
if (projects.length === state.projects.length) {
643+
return state;
644+
}
645+
const orphanedThreadIds = state.threadIdsByProjectId[deletedProjectId];
646+
if (!orphanedThreadIds || orphanedThreadIds.length === 0) {
647+
const { [deletedProjectId]: _, ...threadIdsByProjectId } = state.threadIdsByProjectId;
648+
return _ ? { ...state, projects, threadIdsByProjectId } : { ...state, projects };
649+
}
650+
const { [deletedProjectId]: _, ...threadIdsByProjectId } = state.threadIdsByProjectId;
651+
const sidebarThreadsById = { ...state.sidebarThreadsById };
652+
for (const threadId of orphanedThreadIds) {
653+
delete sidebarThreadsById[threadId];
654+
}
655+
return { ...state, projects, threadIdsByProjectId, sidebarThreadsById };
642656
}
643657

644658
case "thread.created": {

0 commit comments

Comments
 (0)