import React, { useRef } from 'react'; import { Select, SelectArrow, SelectItem, SelectItemCheck, SelectLabel, SelectPopover, SelectProvider, } from '@ariakit/react'; import { cn } from '~/utils'; interface MultiSelectProps { items: T[]; label?: string; placeholder?: string; defaultSelectedValues?: T[]; onSelectedValuesChange?: (values: T[]) => void; renderSelectedValues?: (values: T[], placeholder?: string) => React.ReactNode; className?: string; itemClassName?: string; labelClassName?: string; selectClassName?: string; selectIcon?: React.ReactNode; popoverClassName?: string; selectItemsClassName?: string; selectedValues: T[]; setSelectedValues: (values: T[]) => void; } function defaultRender(values: T[], placeholder?: string) { if (values.length === 0) { return placeholder || 'Select...'; } if (values.length === 1) { return values[0]; } return `${values.length} items selected`; } export default function MultiSelect({ items, label, placeholder = 'Select...', defaultSelectedValues = [], onSelectedValuesChange, renderSelectedValues = defaultRender, className, selectIcon, itemClassName, labelClassName, selectClassName, popoverClassName, selectItemsClassName, selectedValues = [], setSelectedValues, }: MultiSelectProps) { const selectRef = useRef(null); // const [selectedValues, setSelectedValues] = React.useState(defaultSelectedValues); const handleValueChange = (values: T[]) => { setSelectedValues(values); if (onSelectedValuesChange) { onSelectedValuesChange(values); } }; return (
{label && ( {label} )} {items.map((value) => ( {value} ))}
); }