import { Check } from '@phosphor-icons/react'; import { useVirtualizer } from '@tanstack/react-virtual'; import clsx from 'clsx'; import { useRef } from 'react'; import { CheckBox } from '@sd/ui'; import { useScrolled } from '~/hooks/useScrolled'; import { Menu } from './Menu'; interface Item { name: string; color?: string; icon?: React.ReactNode; id: number; selected: boolean; } interface SelectorProps { items?: Item[]; headerArea?: React.ReactNode; } export default ({ items, headerArea }: SelectorProps) => { const parentRef = useRef(null); const rowVirtualizer = useVirtualizer({ count: items?.length || 0, getScrollElement: () => parentRef.current, estimateSize: () => 30, paddingStart: 2 }); const { isScrolled } = useScrolled(parentRef, 10); return ( <> {headerArea && ( <> {headerArea} )} {items && items.length > 0 ? (
{rowVirtualizer.getVirtualItems().map((virtualRow) => { const item = items[virtualRow.index]; if (!item) return null; return ( { e.preventDefault(); }} > {item.color && (
)} {item.icon} {!item.color && !item.icon && ( )} {item.name} ); })}
) : (
{items ? 'No item' : 'Failed to load items'}
)} ); };