Gitako/src/components/FileExplorer/useVisibleNodes.tsx
2022-05-29 17:05:04 +08:00

15 lines
667 B
TypeScript

import { useEffect, useState } from 'react'
import { VisibleNodes, VisibleNodesGenerator } from 'utils/VisibleNodesGenerator'
export function useVisibleNodes(visibleNodesGenerator: VisibleNodesGenerator | null) {
const [visibleNodes, setVisibleNodes] = useState<VisibleNodes | null>(
visibleNodesGenerator?.visibleNodes || null,
)
useEffect(() => {
const $visibleNodes = visibleNodesGenerator?.visibleNodes || null
if (visibleNodes !== $visibleNodes) setVisibleNodes($visibleNodes)
return visibleNodesGenerator?.onUpdate(setVisibleNodes)
}, [visibleNodesGenerator]) // eslint-disable-line react-hooks/exhaustive-deps
return visibleNodes
}