Skip to content

Commit 0855cc4

Browse files
committed
got to a working local version
1 parent cf1b88f commit 0855cc4

File tree

26 files changed

+793
-964
lines changed

26 files changed

+793
-964
lines changed

src/renderer/components/MainLayout.tsx

Lines changed: 22 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
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";
@@ -11,49 +11,27 @@ import { Box, Flex } from "@radix-ui/themes";
1111
import { track } from "@renderer/lib/analytics";
1212
import type { Task } from "@shared/types";
1313
import { useLayoutStore } from "@stores/layoutStore";
14-
import { useTabStore } from "@stores/tabStore";
14+
import { useNavigationStore } from "@stores/navigationStore";
1515
import { useCallback, useEffect, useState } from "react";
1616
import { useHotkeys } from "react-hotkeys-hook";
1717
import { Toaster } from "sonner";
1818
import { ANALYTICS_EVENTS } from "@/types/analytics";
1919

2020
export function MainLayout() {
21-
const { activeTabId, tabs, createTab, setActiveTab, closeTab } =
22-
useTabStore();
2321
const { setCliMode } = useLayoutStore();
22+
const { view, toggleSettings, navigateToTaskList, navigateToTask, goBack, goForward } =
23+
useNavigationStore();
2424
useIntegrations();
2525
const [commandMenuOpen, setCommandMenuOpen] = useState(false);
2626

2727
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]);
28+
toggleSettings();
29+
}, [toggleSettings]);
4330

4431
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
32+
navigateToTaskList();
5333
setCliMode("task");
54-
55-
// Note: The auto-focus effect in CliTaskPanel will handle focusing the editor
56-
}, [tabs, setActiveTab, setCliMode]);
34+
}, [setCliMode, navigateToTaskList]);
5735

5836
useHotkeys("mod+k", () => setCommandMenuOpen((prev) => !prev), {
5937
enabled: !commandMenuOpen,
@@ -66,6 +44,8 @@ export function MainLayout() {
6644
});
6745
useHotkeys("mod+n", () => handleFocusTaskMode());
6846
useHotkeys("mod+,", () => handleOpenSettings());
47+
useHotkeys("mod+[", () => goBack());
48+
useHotkeys("mod+]", () => goForward());
6949

7050
useEffect(() => {
7151
const unsubscribe = window.electronAPI?.onOpenSettings(() => {
@@ -78,51 +58,31 @@ export function MainLayout() {
7858
}, [handleOpenSettings]);
7959

8060
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-
});
61+
navigateToTask(task);
9862

99-
// Track task view
100-
track(ANALYTICS_EVENTS.TASK_VIEWED, {
101-
task_id: task.id,
102-
has_repository: !!task.repository_config,
103-
});
104-
}
63+
// Track task view
64+
track(ANALYTICS_EVENTS.TASK_VIEWED, {
65+
task_id: task.id,
66+
has_repository: !!task.repository_config,
67+
});
10568
};
10669

107-
const activeTab = tabs.find((tab) => tab.id === activeTabId);
108-
10970
return (
11071
<Flex direction="column" height="100vh">
111-
<TabBar onOpenCommandMenu={() => setCommandMenuOpen(true)} />
112-
72+
<TopBar onSearchClick={() => setCommandMenuOpen(true)} />
11373
<Flex flexGrow="1" overflow="hidden">
11474
<MainSidebar />
11575

11676
<Box flexGrow="1" overflow="hidden">
117-
{activeTab?.type === "task-list" && (
77+
{view.type === "task-list" && (
11878
<TaskList onSelectTask={handleSelectTask} />
11979
)}
12080

121-
{activeTab?.type === "task-detail" && activeTab.data ? (
122-
<TaskDetail task={activeTab.data as Task} />
123-
) : null}
81+
{view.type === "task-detail" && view.data && (
82+
<TaskDetail key={view.data.id} task={view.data} />
83+
)}
12484

125-
{activeTab?.type === "settings" && <SettingsView />}
85+
{view.type === "settings" && <SettingsView />}
12686
</Box>
12787
</Flex>
12888

0 commit comments

Comments
 (0)