import React, { forwardRef, MouseEventHandler, ReactNode, useContext, } from 'react'; import {TreeContext} from './tree-context'; import clsx from 'clsx'; import {ArrowRightIcon} from '../../icons/material/ArrowRight'; interface TreeLabelProps { level?: number; node: any; icon?: ReactNode; label?: ReactNode; className?: string; } export const TreeLabel = forwardRef( ({icon, label, level = 0, node, className, ...domProps}, ref) => { const {expandedKeys, setExpandedKeys, selectedKeys, setSelectedKeys} = useContext(TreeContext); const isExpanded = expandedKeys.includes(node.id); const isSelected = selectedKeys.includes(node.id); const handleExpandIconClick: MouseEventHandler = e => { e.stopPropagation(); const index = expandedKeys.indexOf(node.id); const newExpandedKeys = [...expandedKeys]; if (index > -1) { newExpandedKeys.splice(index, 1); } else { newExpandedKeys.push(node.id); } setExpandedKeys(newExpandedKeys); }; return (
{ e.stopPropagation(); setSelectedKeys([node.id]); }} className={clsx( 'flex flex-nowrap whitespace-nowrap items-center gap-4 py-6 rounded header cursor-pointer overflow-hidden text-ellipsis tree-label', className, isSelected && 'bg-primary/selected text-primary font-bold', !isSelected && 'hover:bg-hover' )} > {level > 0 && (
{Array.from({length: level}).map((_, i) => { return
; })}
)}
{icon}
{label}
); } ); TreeLabel.displayName = 'TreeLabel';