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 });