forked from
npmx.dev/npmx.dev
[READ-ONLY]
a fast, modern browser for the npm registry
1export function useFileTreeState(baseUrl: string) {
2 const expanded = useState<Set<string>>(`npmx-file-tree${baseUrl}`, () => new Set<string>())
3
4 function toggleDir(path: string) {
5 if (expanded.value.has(path)) {
6 expanded.value.delete(path)
7 } else {
8 expanded.value.add(path)
9 }
10 }
11
12 function isExpanded(path: string) {
13 return expanded.value.has(path)
14 }
15
16 function autoExpandAncestors(path: string) {
17 if (!path) return
18 const parts = path.split('/').filter(Boolean)
19 let prefix = ''
20 for (const part of parts) {
21 prefix = prefix ? `${prefix}/${part}` : part
22 expanded.value.add(prefix)
23 }
24 }
25
26 return {
27 toggleDir,
28 isExpanded,
29 autoExpandAncestors,
30 }
31}