fix: prevent infinite re-render loop in task selection useEffect (#442)

* fix: prevent infinite re-render loop in task selection useEffect

The useEffect for syncing selectedTask was causing infinite re-renders because:
1. selectedTask object was in the dependency array
2. setSelectedTask(updatedTask) created new reference
3. New reference triggered effect again → infinite loop

Fix:
- Add reference equality check (updatedTask !== selectedTask)
- Remove selectedTask from dependency array (keep only ID/specId)

Fixes #441

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Signed-off-by: Abe Diaz (@abe238) <abe238@gmail.com>

* chore: add ESLint disable comment for intentional dependency omission

Address code review feedback from Gemini Code Assist: explicitly
acknowledge the intentional omission of selectedTask object from
the dependency array to satisfy react-hooks/exhaustive-deps rule.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Signed-off-by: Abe Diaz (@abe238) <abe238@gmail.com>

---------

Signed-off-by: Abe Diaz (@abe238) <abe238@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Alex <63423455+AlexMadera@users.noreply.github.com>
This commit is contained in:
Abe Diaz (@abe238)
2025-12-31 01:47:58 -08:00
committed by GitHub
parent c15bb31146
commit 2effa53517
+3 -2
View File
@@ -392,11 +392,12 @@ export function App() {
const updatedTask = tasks.find(
(t) => t.id === selectedTask.id || t.specId === selectedTask.specId
);
if (updatedTask) {
if (updatedTask && updatedTask !== selectedTask) {
setSelectedTask(updatedTask);
}
}
}, [tasks, selectedTask?.id, selectedTask?.specId, selectedTask]);
// eslint-disable-next-line react-hooks/exhaustive-deps -- Intentionally omit selectedTask object to prevent infinite re-render loop
}, [tasks, selectedTask?.id, selectedTask?.specId]);
const handleTaskClick = (task: Task) => {
setSelectedTask(task);