[READ-ONLY] a fast, modern browser for the npm registry
at main 31 lines 727 B view raw
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}