From 938ecf86a061ec0b6c4c196012d3ab12e6616b99 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Mon, 3 Aug 2026 19:04:28 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=A4=9A=20Teamserver=20?= =?UTF-8?q?=E5=86=85=E5=AD=98=E5=B7=A5=E4=BD=9C=E5=8C=BA=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: multica-agent --- src/App.tsx | 35 ++++++----- src/workspace.test.ts | 57 ++++++++++++++++++ src/workspace.ts | 133 ++++++++++++++++++++++++++++++++++-------- 3 files changed, 184 insertions(+), 41 deletions(-) create mode 100644 src/workspace.test.ts diff --git a/src/App.tsx b/src/App.tsx index 7925cb3..5f9e615 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,10 @@ -import { useMemo, useState } from "react"; -import { initialWorkspaces, selectWorkspace } from "./workspace"; +import { useReducer } from "react"; +import { + createInitialWorkspaceState, + selectActiveTab, + selectActiveWorkspace, + workspaceReducer, +} from "./workspace"; const sessions = [ { id: "NW-042", status: "ONLINE", host: "ws-fin-042", user: "nora.chen", os: "Windows 11", address: "10.42.8.17", seen: "14s ago", tags: ["finance", "priority"] }, @@ -9,25 +14,19 @@ const sessions = [ ]; export function App() { - const [activeServerId, setActiveServerId] = useState(initialWorkspaces[0].id); - const [activeTabs, setActiveTabs] = useState>( - Object.fromEntries(initialWorkspaces.map((server) => [server.id, server.activeTabId])), - ); - const server = useMemo( - () => selectWorkspace(initialWorkspaces, activeServerId) ?? initialWorkspaces[0], - [activeServerId], - ); - const activeTab = server.tabs.find((tab) => tab.id === activeTabs[server.id]) ?? server.tabs[0]; + const [workspace, dispatch] = useReducer(workspaceReducer, undefined, createInitialWorkspaceState); + const server = selectActiveWorkspace(workspace); + const activeTab = selectActiveTab(server); return (