Skip to content

Commit 0f1165c

Browse files
authored
Fix: Get array back into a working state (#126)
1 parent cf1b88f commit 0f1165c

File tree

30 files changed

+1069
-1067
lines changed

30 files changed

+1069
-1067
lines changed

pnpm-lock.yaml

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/renderer/components/MainLayout.tsx

Lines changed: 17 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,35 @@
11
import { MainSidebar } from "@components/MainSidebar";
2+
import { TopBar } from "@components/ui/topnav/TopBar";
23
import { StatusBar } from "@components/StatusBar";
3-
import { TabBar } from "@components/TabBar";
44
import { UpdatePrompt } from "@components/UpdatePrompt";
55
import { CommandMenu } from "@features/command/components/CommandMenu";
66
import { SettingsView } from "@features/settings/components/SettingsView";
77
import { TaskDetail } from "@features/task-detail/components/TaskDetail";
88
import { TaskList } from "@features/task-list/components/TaskList";
99
import { useIntegrations } from "@hooks/useIntegrations";
1010
import { Box, Flex } from "@radix-ui/themes";
11-
import { track } from "@renderer/lib/analytics";
1211
import type { Task } from "@shared/types";
1312
import { useLayoutStore } from "@stores/layoutStore";
14-
import { useTabStore } from "@stores/tabStore";
13+
import { useNavigationStore } from "@stores/navigationStore";
1514
import { useCallback, useEffect, useState } from "react";
1615
import { useHotkeys } from "react-hotkeys-hook";
1716
import { Toaster } from "sonner";
18-
import { ANALYTICS_EVENTS } from "@/types/analytics";
1917

2018
export function MainLayout() {
21-
const { activeTabId, tabs, createTab, setActiveTab, closeTab } =
22-
useTabStore();
2319
const { setCliMode } = useLayoutStore();
20+
const { view, toggleSettings, navigateToTaskList, navigateToTask, goBack, goForward } =
21+
useNavigationStore();
2422
useIntegrations();
2523
const [commandMenuOpen, setCommandMenuOpen] = useState(false);
2624

2725
const handleOpenSettings = useCallback(() => {
28-
const existingTab = tabs.find((tab) => tab.type === "settings");
29-
30-
if (existingTab) {
31-
if (activeTabId === existingTab.id) {
32-
closeTab(existingTab.id);
33-
} else {
34-
setActiveTab(existingTab.id);
35-
}
36-
} else {
37-
createTab({
38-
type: "settings",
39-
title: "Settings",
40-
});
41-
}
42-
}, [tabs, activeTabId, setActiveTab, createTab, closeTab]);
26+
toggleSettings();
27+
}, [toggleSettings]);
4328

4429
const handleFocusTaskMode = useCallback(() => {
45-
// Find the Tasks tab or use the first task-list tab
46-
const tasksTab = tabs.find((tab) => tab.type === "task-list");
47-
48-
if (tasksTab) {
49-
setActiveTab(tasksTab.id);
50-
}
51-
52-
// Switch to task mode
30+
navigateToTaskList();
5331
setCliMode("task");
54-
55-
// Note: The auto-focus effect in CliTaskPanel will handle focusing the editor
56-
}, [tabs, setActiveTab, setCliMode]);
32+
}, [setCliMode, navigateToTaskList]);
5733

5834
useHotkeys("mod+k", () => setCommandMenuOpen((prev) => !prev), {
5935
enabled: !commandMenuOpen,
@@ -66,6 +42,8 @@ export function MainLayout() {
6642
});
6743
useHotkeys("mod+n", () => handleFocusTaskMode());
6844
useHotkeys("mod+,", () => handleOpenSettings());
45+
useHotkeys("mod+[", () => goBack());
46+
useHotkeys("mod+]", () => goForward());
6947

7048
useEffect(() => {
7149
const unsubscribe = window.electronAPI?.onOpenSettings(() => {
@@ -78,51 +56,25 @@ export function MainLayout() {
7856
}, [handleOpenSettings]);
7957

8058
const handleSelectTask = (task: Task) => {
81-
const existingTab = tabs.find(
82-
(tab) =>
83-
tab.type === "task-detail" &&
84-
tab.data &&
85-
typeof tab.data === "object" &&
86-
"id" in tab.data &&
87-
tab.data.id === task.id,
88-
);
89-
90-
if (existingTab) {
91-
setActiveTab(existingTab.id);
92-
} else {
93-
createTab({
94-
type: "task-detail",
95-
title: task.title,
96-
data: task,
97-
});
98-
99-
// Track task view
100-
track(ANALYTICS_EVENTS.TASK_VIEWED, {
101-
task_id: task.id,
102-
has_repository: !!task.repository_config,
103-
});
104-
}
59+
navigateToTask(task);
10560
};
10661

107-
const activeTab = tabs.find((tab) => tab.id === activeTabId);
108-
10962
return (
11063
<Flex direction="column" height="100vh">
111-
<TabBar onOpenCommandMenu={() => setCommandMenuOpen(true)} />
112-
64+
<TopBar onSearchClick={() => setCommandMenuOpen(true)} />
11365
<Flex flexGrow="1" overflow="hidden">
11466
<MainSidebar />
11567

11668
<Box flexGrow="1" overflow="hidden">
117-
{activeTab?.type === "task-list" && (
69+
{view.type === "task-list" && (
11870
<TaskList onSelectTask={handleSelectTask} />
11971
)}
12072

121-
{activeTab?.type === "task-detail" && activeTab.data ? (
122-
<TaskDetail task={activeTab.data as Task} />
123-
) : null}
73+
{view.type === "task-detail" && view.data && (
74+
<TaskDetail key={view.data.id} task={view.data} />
75+
)}
12476

125-
{activeTab?.type === "settings" && <SettingsView />}
77+
{view.type === "settings" && <SettingsView />}
12678
</Box>
12779
</Flex>
12880

0 commit comments

Comments
 (0)