import { orgQueries } from "@app/lib/queries"; import type { ListClientsResponse } from "@server/routers/client"; import { useQuery } from "@tanstack/react-query"; import { useMemo, useState } from "react"; import { useDebounce } from "use-debounce"; import { useTranslations } from "next-intl"; import { MultiSelectTags } from "./multi-select-tags"; export type SelectedMachine = Pick< ListClientsResponse["clients"][number], "name" | "clientId" >; export type MachineSelectorProps = { orgId: string; selectedMachines?: SelectedMachine[]; onSelectMachines: (machine: SelectedMachine[]) => void; }; export function MachinesSelector({ orgId, selectedMachines = [], onSelectMachines }: MachineSelectorProps) { const t = useTranslations(); const [machineSearchQuery, setMachineSearchQuery] = useState(""); const [debouncedValue] = useDebounce(machineSearchQuery, 150); const { data: machines = [] } = useQuery( orgQueries.machineClients({ orgId, perPage: 10, query: debouncedValue }) ); // always include the selected machines in the list of machines shown (if the user isn't searching) const machinesShown = useMemo(() => { const allMachines: Array = [...machines]; if (debouncedValue.trim().length === 0) { for (const machine of selectedMachines) { if ( !allMachines.find((mc) => mc.clientId === machine.clientId) ) { allMachines.unshift(machine); } } } return allMachines; }, [machines, selectedMachines, debouncedValue]); // const selectedMachinesIds = new Set( // selectedMachines.map((m) => m.clientId) // ); return ( ({ ...m, text: m.name, id: m.clientId.toString() }))} onChange={(values) => { onSelectMachines(values); }} options={machinesShown.map((m) => ({ ...m, id: m.clientId.toString(), text: m.name }))} onSearch={setMachineSearchQuery} searchQuery={machineSearchQuery} /> // // // // {t("machineNotFound")} // // {machinesShown.map((m) => ( // { // let newMachineClients = []; // if (selectedMachinesIds.has(m.clientId)) { // newMachineClients = selectedMachines.filter( // (mc) => mc.clientId !== m.clientId // ); // } else { // newMachineClients = [ // ...selectedMachines, // m // ]; // } // onSelectMachines(newMachineClients); // }} // > // // {`${m.name}`} // // ))} // // // ); }