diff --git a/src/renderer/components/team/dialogs/TaskCommentsSection.tsx b/src/renderer/components/team/dialogs/TaskCommentsSection.tsx index 426ec636..4cb94fad 100644 --- a/src/renderer/components/team/dialogs/TaskCommentsSection.tsx +++ b/src/renderer/components/team/dialogs/TaskCommentsSection.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useMemo, useState } from 'react'; import { MarkdownViewer } from '@renderer/components/chat/viewers/MarkdownViewer'; import { ReplyQuoteBlock } from '@renderer/components/team/activity/ReplyQuoteBlock'; @@ -54,11 +54,15 @@ export const TaskCommentsSection = ({ const [expandedCommentIds, setExpandedCommentIds] = useState>(new Set()); const [visibleCount, setVisibleCount] = useState(INITIAL_VISIBLE_COMMENTS); - useEffect(() => { + // Reset state when task changes (React-approved setState-during-render pattern) + const resetKey = teamIdKey(teamName, taskId); + const [prevResetKey, setPrevResetKey] = useState(resetKey); + if (prevResetKey !== resetKey) { + setPrevResetKey(resetKey); setVisibleCount(INITIAL_VISIBLE_COMMENTS); setExpandedCommentIds(new Set()); setReplyTo(null); - }, [teamIdKey(teamName, taskId)]); + } const toggleCommentExpanded = useCallback((commentId: string) => { setExpandedCommentIds((prev) => { diff --git a/src/renderer/components/team/editor/QuickOpenDialog.tsx b/src/renderer/components/team/editor/QuickOpenDialog.tsx index 3e8d2c37..84345468 100644 --- a/src/renderer/components/team/editor/QuickOpenDialog.tsx +++ b/src/renderer/components/team/editor/QuickOpenDialog.tsx @@ -37,22 +37,31 @@ export const QuickOpenDialog = ({ const [allFiles, setAllFiles] = useState([]); const [loading, setLoading] = useState(true); - // Load all project files on mount via backend API + // Reset state when projectPath changes (React-approved setState-during-render pattern) + const [prevProjectPath, setPrevProjectPath] = useState(projectPath); + if (prevProjectPath !== projectPath) { + setPrevProjectPath(projectPath); + setLoading(true); + setAllFiles([]); + } + + // Load all project files via backend API useEffect(() => { let cancelled = false; - setLoading(true); - window.electronAPI.editor - .listFiles() - .then((files) => { + const fetchFiles = async (): Promise => { + try { + const files = await window.electronAPI.editor.listFiles(); if (!cancelled) { setAllFiles(files); setLoading(false); } - }) - .catch(() => { + } catch { if (!cancelled) setLoading(false); - }); + } + }; + + void fetchFiles(); return () => { cancelled = true;