import { Autocomplete, TextField } from "@mui/material"; import { useRef, useState, useEffect } from "react"; function AutoComplete({ data, noneBg, clearText, inputValue, placeholder, handleSearch, setInputValue, setSelectedOption, debounce = 500, }) { const typingTimeoutRef = useRef(null); const [localInput, setLocalInput] = useState(inputValue || ""); useEffect(() => { setLocalInput(inputValue || ""); }, [inputValue]); useEffect(() => { return () => { if (typingTimeoutRef.current) clearTimeout(typingTimeoutRef.current); }; }, []); const onInputChange = (_, newInputValue) => { setLocalInput(newInputValue); if (setInputValue) setInputValue(newInputValue); if (typingTimeoutRef.current) clearTimeout(typingTimeoutRef.current); typingTimeoutRef.current = setTimeout(() => { handleSearch(newInputValue); }, debounce); }; const onChange = (_, newValue) => { if (typingTimeoutRef.current) { clearTimeout(typingTimeoutRef.current); typingTimeoutRef.current = null; } const val = newValue ? typeof newValue === "string" ? newValue : newValue.name : ""; setLocalInput(val); setSelectedOption && setSelectedOption(newValue); handleSearch(val); if (setInputValue) setInputValue(val); }; return ( typeof option === "string" ? option : option.name } disableClearable inputValue={localInput} className="!w-full" onInputChange={onInputChange} onChange={onChange} sx={{ "& .MuiAutocomplete-input": { background: noneBg ? "" : "#ffffff !important", }, }} renderInput={(params) => ( )} /> ); } export default AutoComplete;