import { Combobox } from "@headlessui/react"; import { DropDownItem } from "@shared/nej-react-components/Parts/DropDown"; import { useEffect, useState } from "react"; import tw, { styled } from "twin.macro"; import "styled-components/macro"; import { useField } from "@shared/nej-react-components/Parts/Input"; export function AutocompleteSelect({ title, titleProps = null, data, nullable = false, ...props }) { const [field, meta, helpers] = useField(props); const [query, setQuery] = useState(field.value ?? ""); const [internalData, setInternalData] = useState([]); useEffect(() => { (async () => { if (typeof data === "function") { //if data is async function await it setInternalData(await data(query)); } else if (Array.isArray(data)) { setInternalData( query === "" ? data : data.filter((item) => { if (typeof item === "string") return item.toLowerCase().includes(query.toLowerCase()); return item.label.toLowerCase().includes(query.toLowerCase()); }) ); } else { console.error("data is not an array or function :c"); setInternalData([]); } })(); }, [query, data]); return ( <> typeof item === "string" ? item == field.value : item.value === field.value )[0] : null } onChange={(value) => { console.log(value); field.onChange({ target: { value: value, name: field.name } }); }} nullable={nullable} >
{title && ( )}
setQuery(event.target.value)} displayValue={(val) => (typeof val === "string" ? val : val?.label)} />
{internalData?.map((val) => ( {typeof val === "string" ? val : val.label} ))}
{meta?.touched && meta.error ? (
{meta.error}
) : null} ); }