import React, { Fragment, useCallback, useMemo } from 'react' import { SideMenuItem, Item } from './SideMenuItem' import { SideMenuProps } from './SideMenu.types' import './SideMenu.css' export const SideMenu = ({ items, value, onClick }: SideMenuProps) => { const branch = useMemo(() => { const branch = new Set() const buildBranchOfSelectedItem = (items: Item[]) => { for (const item of items) { if ( item.id === value || (item.children && buildBranchOfSelectedItem(item.children)) ) { branch.add(item.id) return true } } return false } buildBranchOfSelectedItem(items) return branch }, [items, value]) const shouldRenderChildren = useCallback( (item: Item) => item.children && branch.has(item.id), [branch] ) return ( ) }