From 532f0d6c9107f7a7077400a94ec21e304407a725 Mon Sep 17 00:00:00 2001 From: "tao.chen" <93983997+taochen-ct@users.noreply.github.com> Date: Thu, 13 Aug 2026 12:12:58 +0800 Subject: [PATCH] fix: dir tree --- frontend/app/features/platform/WorkspaceTree.tsx | 14 ++++++++++---- .../platform/state/scriptWorkspaceStore.ts | 9 +++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/frontend/app/features/platform/WorkspaceTree.tsx b/frontend/app/features/platform/WorkspaceTree.tsx index 34e0a42..ea55323 100644 --- a/frontend/app/features/platform/WorkspaceTree.tsx +++ b/frontend/app/features/platform/WorkspaceTree.tsx @@ -26,11 +26,11 @@ type WorkspaceTreeProps = { // 唯一标识此 group(通常 `__group__`),让多个 owner 的 group 各自独立展开。 groupKey: string; expandedPaths: Set; - onToggle: (path: string) => void; + onToggle: (path: string, loadPath?: string) => void; loadingChildrenPaths: Set; }; -type WorkspaceTreeItemsProps = Omit & { +type WorkspaceTreeItemsProps = Omit & { path: string; depth: number; }; @@ -100,6 +100,7 @@ export function WorkspaceTreeGroup({ {open && (
( & { directory: WorkspaceDirectory; }) { - const open = expandedPaths.has(directory.path); + const expandKey = `${groupKey}/${directory.path}`; + const open = expandedPaths.has(expandKey); const childrenLoading = loadingChildrenPaths.has(directory.path); return (
@@ -217,7 +222,7 @@ function DirectoryBranch({ className="directory-row" style={{ paddingLeft: 10 + depth * 16 }} type="button" - onClick={() => onToggle(directory.path)} + onClick={() => onToggle(expandKey, directory.path)} onContextMenu={onContextMenu ? (event) => onContextMenu(event, { kind: "directory", @@ -234,6 +239,7 @@ function DirectoryBranch({ {open && ( Promise; deleteScript: (script: ScriptItem) => Promise; deleteDirectory: (path: string) => Promise; - toggleExpanded: (path: string) => Promise; + toggleExpanded: (path: string, loadPath?: string) => Promise; loadChildren: (parentPath: string) => Promise; toggleScriptLock: (script: ScriptItem) => Promise; openPublishDialog: (script: ScriptItem) => void; @@ -292,7 +292,7 @@ export const useScriptWorkspaceStore = create((set, get) => { } }, - toggleExpanded: async (path) => { + toggleExpanded: async (path, loadPath) => { const state = get(); const isOpen = state.expandedPaths.has(path); const next = new Set(state.expandedPaths); @@ -301,8 +301,9 @@ export const useScriptWorkspaceStore = create((set, get) => { } else { next.add(path); // group key (`__group__`) 不是 workspace 路径,不调 loadChildren - if (!path.startsWith("__group__") && !state.loadedChildPaths.has(path)) { - void get().loadChildren(path); + const actualLoadPath = loadPath ?? path; + if (!actualLoadPath.startsWith("__group__") && !state.loadedChildPaths.has(actualLoadPath)) { + void get().loadChildren(actualLoadPath); } } set({ expandedPaths: next });