diff --git a/webview-ui/src/App.tsx b/webview-ui/src/App.tsx index 40105320..1a6c4b28 100644 --- a/webview-ui/src/App.tsx +++ b/webview-ui/src/App.tsx @@ -31,91 +31,104 @@ const AppContent = () => { const [detailedTask, setDetailedTask] = useState(null) const [detailedStory, setDetailedStory] = useState(null) - const handleMessage = useCallback((e: MessageEvent) => { - const message: ExtensionMessage = e.data - switch (message.type) { - case "action": - switch (message.action!) { - case "settingsButtonClicked": - setShowSettings(true) - setShowHistory(false) - setShowHaiTaskList(false) - setDetailedStory(null) - setDetailedTask(null) - setShowMcp(false) - setShowAccount(false) - setShowExperts(false) - break - case "historyButtonClicked": - setShowSettings(false) - setShowHistory(true) - setShowHaiTaskList(false) - setDetailedStory(null) - setDetailedTask(null) - setShowMcp(false) - setShowAccount(false) - setShowExperts(false) - break - case "mcpButtonClicked": - setShowSettings(false) - setShowHistory(false) - setShowHaiTaskList(false) - setDetailedStory(null) - setDetailedTask(null) - setShowMcp(true) - setShowAccount(false) - setShowExperts(false) - break - case "accountButtonClicked": - setShowSettings(false) - setShowHistory(false) - setShowHaiTaskList(false) - setDetailedStory(null) - setDetailedTask(null) - setShowMcp(false) - setShowAccount(true) - setShowExperts(false) - break - case "chatButtonClicked": - setShowSettings(false) - setShowHistory(false) - setShowHaiTaskList(false) - setDetailedStory(null) - setDetailedTask(null) - setShowMcp(false) - setShowAccount(false) - setShowExperts(false) - break - case "haiBuildTaskListClicked": - setShowSettings(false) - setShowHistory(false) - setShowHaiTaskList(true) - setDetailedStory(null) - setDetailedTask(null) - setShowMcp(false) - setShowAccount(false) - setShowExperts(false) - break - case "expertsButtonClicked": - setShowSettings(false) - setShowHistory(false) - setShowHaiTaskList(false) - setDetailedStory(null) - setDetailedTask(null) - setShowMcp(false) - setShowAccount(false) - setShowExperts(true) - break - } - break - case "haiTaskData": - setTaskList(message.haiTaskData!.tasks) - setTaskLastUpdatedTs(message.haiTaskData!.ts) - setHaiConfig({ ...haiConfig, folder: message.haiTaskData!.folder, ts: message.haiTaskData!.ts }) - break - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) + const onConfigure = useCallback( + (loadDefault: boolean) => { + if (loadDefault) { + vscode.postMessage({ type: "onHaiConfigure", text: haiConfig?.folder }) + } else { + vscode.postMessage({ type: "onHaiConfigure" }) + } + }, + [haiConfig?.folder], + ) + + const handleMessage = useCallback( + (e: MessageEvent) => { + const message: ExtensionMessage = e.data + switch (message.type) { + case "action": + switch (message.action!) { + case "settingsButtonClicked": + setShowSettings(true) + setShowHistory(false) + setShowHaiTaskList(false) + setDetailedStory(null) + setDetailedTask(null) + setShowMcp(false) + setShowAccount(false) + setShowExperts(false) + break + case "historyButtonClicked": + setShowSettings(false) + setShowHistory(true) + setShowHaiTaskList(false) + setDetailedStory(null) + setDetailedTask(null) + setShowMcp(false) + setShowAccount(false) + setShowExperts(false) + break + case "mcpButtonClicked": + setShowSettings(false) + setShowHistory(false) + setShowHaiTaskList(false) + setDetailedStory(null) + setDetailedTask(null) + setShowMcp(true) + setShowAccount(false) + setShowExperts(false) + break + case "accountButtonClicked": + setShowSettings(false) + setShowHistory(false) + setShowHaiTaskList(false) + setDetailedStory(null) + setDetailedTask(null) + setShowMcp(false) + setShowAccount(true) + setShowExperts(false) + break + case "chatButtonClicked": + setShowSettings(false) + setShowHistory(false) + setShowHaiTaskList(false) + setDetailedStory(null) + setDetailedTask(null) + setShowMcp(false) + setShowAccount(false) + setShowExperts(false) + break + case "haiBuildTaskListClicked": + setShowSettings(false) + setShowHistory(false) + setShowHaiTaskList(true) + setDetailedStory(null) + setDetailedTask(null) + setShowMcp(false) + setShowAccount(false) + setShowExperts(false) + break + case "expertsButtonClicked": + setShowSettings(false) + setShowHistory(false) + setShowHaiTaskList(false) + setDetailedStory(null) + setDetailedTask(null) + setShowMcp(false) + setShowAccount(false) + setShowExperts(true) + break + } + break + case "haiTaskData": + setTaskList(message.haiTaskData!.tasks) + setTaskLastUpdatedTs(message.haiTaskData!.ts) + setHaiConfig({ ...haiConfig, folder: message.haiTaskData!.folder, ts: message.haiTaskData!.ts }) + break + } + }, + [haiConfig, setHaiConfig], + ) useEvent("message", handleMessage) @@ -139,18 +152,12 @@ const AppContent = () => { if (haiConfig?.folder) { onConfigure(true) } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [haiConfig?.folder]) + }, [haiConfig?.folder, onConfigure]) const onHaiTaskCancel = () => { setShowHaiTaskList(false) } - const onConfigure = (loadDefault: boolean) => { - loadDefault && vscode.postMessage({ type: "onHaiConfigure", text: haiConfig?.folder }) - !loadDefault && vscode.postMessage({ type: "onHaiConfigure" }) - } - const onHaiTaskReset = () => { setTaskList([]) vscode.postMessage({ type: "onHaiConfigure", bool: false })