28 lines
987 B
TypeScript
28 lines
987 B
TypeScript
import { useEffect } from 'react'
|
|
import { useSidebarStore } from '../stores/sidebarStore'
|
|
|
|
/**
|
|
* AR-02: 自动展开到活动文件所在的目录
|
|
*/
|
|
export function useAutoExpandDir(activeFilePath: string | null) {
|
|
const rootPath = useSidebarStore(s => s.rootPath)
|
|
const expandDirs = useSidebarStore(s => s.expandDirs)
|
|
|
|
useEffect(() => {
|
|
if (!activeFilePath || !rootPath) return
|
|
const norm = (p: string) => p.replace(/[/\\]+$/, '').replace(/\\/g, '/')
|
|
const normalizedRoot = norm(rootPath) + '/'
|
|
if (!norm(activeFilePath).startsWith(normalizedRoot)) return
|
|
|
|
const dirsToExpand: string[] = []
|
|
let dir = activeFilePath.replace(/[/\\][^/\\]+$/, '')
|
|
let prev = ''
|
|
while (dir && dir.length >= rootPath.length && dir !== rootPath && dir !== prev) {
|
|
prev = dir
|
|
dirsToExpand.push(dir)
|
|
dir = dir.replace(/[/\\][^/\\]+$/, '')
|
|
}
|
|
if (dirsToExpand.length > 0) expandDirs(dirsToExpand)
|
|
}, [activeFilePath, rootPath, expandDirs])
|
|
}
|