import { Button } from '@/components/ui/button'; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { cn } from '@/lib/utils'; import { Check, ChevronsUpDown } from 'lucide-react'; import { useEffect, useRef, useState } from 'react'; interface Data { id?: number | string; child_id?: number | string; label: string; value: string; } interface Props { data: Data[]; placeholder: string; onSelect: (selected: Data) => void; defaultValue?: string; translate?: any; } const Combobox = ({ data, placeholder, onSelect, defaultValue, translate }: Props) => { const [open, setOpen] = useState(false); const [value, setValue] = useState(defaultValue || ''); const initialRenderRef = useRef(true); useEffect(() => { // Only set initial value, don't trigger onSelect on subsequent renders with the same defaultValue if (defaultValue && (initialRenderRef.current || defaultValue !== value)) { const defaultItem = data.find((item) => item.value === defaultValue); if (defaultItem) { setValue(defaultValue); // Only call onSelect on non-initial renders to prevent triggering re-renders immediately if (!initialRenderRef.current) { onSelect(defaultItem); } } } initialRenderRef.current = false; }, [defaultValue, data, value, onSelect]); const handleSelect = (selected: Data) => { const newValue = selected.value === value ? '' : selected.value; setValue(newValue); onSelect(selected); setOpen(false); }; return ( {translate?.frontend?.no_element_found || "No element found."} {data.map((item) => ( handleSelect(item)}> {item.label} ))} ); }; export default Combobox;