feat: sync tree selection with active tab

This commit is contained in:
yyh
2026-01-19 14:05:46 +08:00
parent 0e890e5692
commit 611ff05bde
6 changed files with 25 additions and 3 deletions

View File

@ -49,6 +49,7 @@ const FileTree: React.FC<FileTreeProps> = ({ className, searchTerm = '' }) => {
const expandedFolderIds = useStore(s => s.expandedFolderIds)
const activeTabId = useStore(s => s.activeTabId)
const selectedTreeNodeId = useStore(s => s.selectedTreeNodeId)
const storeApi = useWorkflowStore()
const treeChildren = treeData?.children ?? emptyTreeNodes
@ -79,6 +80,15 @@ const FileTree: React.FC<FileTreeProps> = ({ className, searchTerm = '' }) => {
node.toggle()
}, [storeApi])
const handleSelect = useCallback((nodes: NodeApi<TreeNodeData>[]) => {
if (activeTabId) {
storeApi.getState().setSelectedTreeNodeId(activeTabId)
return
}
const selectedId = nodes[0]?.id ?? null
storeApi.getState().setSelectedTreeNodeId(selectedId)
}, [activeTabId, storeApi])
const handleBlankAreaContextMenu = useCallback((e: React.MouseEvent) => {
e.preventDefault()
storeApi.getState().setContextMenu({
@ -149,9 +159,10 @@ const FileTree: React.FC<FileTreeProps> = ({ className, searchTerm = '' }) => {
indent={20}
overscanCount={5}
openByDefault={false}
selection={activeTabId ?? undefined}
selection={activeTabId ?? selectedTreeNodeId ?? undefined}
initialOpenState={initialOpensObject}
onToggle={handleToggle}
onSelect={handleSelect}
onActivate={handleActivate}
onRename={handleRename}
searchTerm={searchTerm}

View File

@ -27,6 +27,8 @@ export function useSyncTreeWithActiveTab({
if (!activeTabId)
return
storeApi.getState().setSelectedTreeNodeId(activeTabId)
const tree = treeRef.current
if (!tree)
return

View File

@ -66,13 +66,14 @@ const SidebarSearchAdd: FC<SidebarSearchAddProps> = ({ onSearchChange }) => {
const { data: treeData } = useSkillAssetTreeData()
const activeTabId = useStore(s => s.activeTabId)
const selectedTreeNodeId = useStore(s => s.selectedTreeNodeId)
const treeChildren = treeData?.children
const targetFolderId = useMemo(() => {
if (!treeChildren)
return 'root'
return getTargetFolderIdFromSelection(activeTabId, treeChildren)
}, [activeTabId, treeChildren])
return getTargetFolderIdFromSelection(activeTabId ?? selectedTreeNodeId, treeChildren)
}, [activeTabId, selectedTreeNodeId, treeChildren])
const menuOffset = useMemo(() => ({ mainAxis: 4 }), [])
const {