import { Fragment, useContext, useEffect, useState } from "react"; import { Combobox, Transition } from "@headlessui/react"; import { callCustomAPI } from "@/utils/callCustomAPI"; import { GlobalContext } from "@/globalContext"; const SearchAutoComplete = ({ selected, setSelected, className, optionsClassName }) => { const [categories, setCategories] = useState([]); const [query, setQuery] = useState(""); const { dispatch: globalDispatch } = useContext(GlobalContext); const filteredCategories = query === "" ? categories : categories .filter((cat) => cat.category.toLowerCase().replace(/\s+/g, "").includes(query.toLowerCase().replace(/\s+/g, ""))) .sort((a, b) => { if (a.category.toLowerCase().indexOf(query.toLowerCase()) > b.category.toLowerCase().indexOf(query.toLowerCase())) { return 1; } else if (a.category.toLowerCase().indexOf(query.toLowerCase()) < b.category.toLowerCase().indexOf(query.toLowerCase())) { return -1; } else { if (a.category > b.category) return 1; else return -1; } }); async function fetchCategories() { const where = [1]; try { const result = await callCustomAPI("spaces", "get", { page: 1, limit: 1000 }, ""); if (Array.isArray(result.list)) { setCategories(result.list); } } catch (err) { globalDispatch({ type: "SHOW_ERROR", payload: { heading: "Operation failed", message: err.message, }, }); } } useEffect(() => { fetchCategories(); }, []); return (