Fixes critical React crash on the Kanban board view (#830)

* Changes from fix/board-react-crash

* fix: Prevent cascading re-renders and crashes from high-frequency WS events
This commit is contained in:
gsxdsm
2026-03-03 19:23:44 -08:00
committed by GitHub
parent ae48065820
commit dd7108a7a0
9 changed files with 212 additions and 153 deletions

View File

@@ -1044,6 +1044,9 @@ export const useAppStore = create<AppState & AppActions>()((set, get) => ({
set((state) => {
const current = state.autoModeByWorktree[key];
if (!current) return state;
// Idempotent: skip if task is not in the list to avoid creating new
// object references that trigger unnecessary re-renders.
if (!current.runningTasks.includes(taskId)) return state;
return {
autoModeByWorktree: {
...state.autoModeByWorktree,
@@ -1097,13 +1100,20 @@ export const useAppStore = create<AppState & AppActions>()((set, get) => ({
addRecentlyCompletedFeature: (featureId: string) => {
set((state) => {
// Idempotent: skip if already tracked to avoid creating a new Set reference
// that triggers unnecessary re-renders in useBoardColumnFeatures.
if (state.recentlyCompletedFeatures.has(featureId)) return state;
const newSet = new Set(state.recentlyCompletedFeatures);
newSet.add(featureId);
return { recentlyCompletedFeatures: newSet };
});
},
clearRecentlyCompletedFeatures: () => set({ recentlyCompletedFeatures: new Set() }),
clearRecentlyCompletedFeatures: () => {
// Idempotent: skip if already empty to avoid creating a new Set reference.
if (get().recentlyCompletedFeatures.size === 0) return;
set({ recentlyCompletedFeatures: new Set() });
},
setMaxConcurrency: (max) => set({ maxConcurrency: max }),