'use client' import React from 'react' import { createRef, useEffect, useRef } from 'react' import type { DirectoryProps } from './types' import Section from './Section' import VirtualizedDirectory from './VirtualizedDirectory' import Block from '../Primitives/Block/Block' import { countDirectoryItems, DEFAULT_END_REACHED_THRESHOLD, handleSectionNavigation, normalizeDirectoryData, useDirectoryEndReached, } from './utils' import { ActiveItemProvider, ExpandedItemsProvider } from './NavItem' import { useResponsiveTokens } from '../../hooks/useResponsiveTokens' import { DirectoryTokenType } from './directory.tokens' const Directory = ({ directoryData: directoryDataProp, idPrefix, activeItem, onActiveItemChange, defaultActiveItem, iconOnlyMode = false, showHierarchyLines = false, hierarchyLineBorderRadius = 0, expandedItems, defaultExpandedItems, onExpandedItemsChange, onItemExpand, onEndReached, endReachedThreshold = DEFAULT_END_REACHED_THRESHOLD, enableParentSelection = false, highlightActivePath = false, enableVirtualization = false, virtualization, }: DirectoryProps) => { const directoryData = normalizeDirectoryData(directoryDataProp) const sectionRefs = useRef>>( [] ) const scrollRef = useRef(null) const tokens = useResponsiveTokens('DIRECTORY') useEffect(() => { sectionRefs.current = directoryData.map(() => createRef() ) }, [directoryData]) useDirectoryEndReached({ scrollRef, onEndReached: enableVirtualization && !iconOnlyMode ? undefined : onEndReached, threshold: endReachedThreshold, contentKey: countDirectoryItems(directoryData), }) if (enableVirtualization && !iconOnlyMode) { return ( ) } return ( {directoryData.map((section, sectionIndex) => (
handleSectionNavigation( direction, currentIndex, directoryData.length ) } /> ))} ) } Directory.displayName = 'Directory' export default Directory