"use client"; import { Button } from "./button"; import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger, } from "./dropdown-menu"; import { ChevronDown } from "lucide-react"; import { type Dispatch, type SetStateAction } from "react"; type Option = { label: string; value: string }; interface ISelectProps { placeholder: string; options: Option[]; selectedOptions: string[]; setSelectedOptions: Dispatch>; } const MultiSelect = ({ placeholder, options: values, selectedOptions: selectedItems, setSelectedOptions: setSelectedItems, }: ISelectProps) => { const handleSelectChange = (value: string) => { if (!selectedItems.includes(value)) { setSelectedItems((prev) => [...prev, value]); } else { const referencedArray = [...selectedItems]; const indexOfItemToBeRemoved = referencedArray.indexOf(value); referencedArray.splice(indexOfItemToBeRemoved, 1); setSelectedItems(referencedArray); } }; const isOptionSelected = (value: string): boolean => { return selectedItems.includes(value) ? true : false; }; return ( <> e.preventDefault()} > {values.map((value: ISelectProps["options"][0], index: number) => { return ( e.preventDefault()} key={index} checked={isOptionSelected(value.value)} onCheckedChange={() => handleSelectChange(value.value)} > {value.label} ); })} ); }; export default MultiSelect;