import { useLazyQuery } from "@apollo/client/react"; import { AutoComplete, Divider, Input, Space } from "antd"; import _ from "lodash"; import { useTranslation } from "react-i18next"; import { Link, useNavigate } from "react-router-dom"; import { GLOBAL_SEARCH_QUERY } from "../../graphql/search.queries"; import PhoneNumberFormatter from "../../utils/PhoneFormatter"; import AlertComponent from "../alert/alert.component"; import OwnerNameDisplay, { OwnerNameDisplayFunction } from "../owner-name-display/owner-name-display.component"; import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.component"; export default function GlobalSearch() { const { t } = useTranslation(); const [callSearch, { loading, error, data }] = useLazyQuery(GLOBAL_SEARCH_QUERY); const navigate = useNavigate(); const executeSearch = (variables) => { if (variables?.search !== "" && variables?.search?.length >= 3) callSearch({ variables }); }; const debouncedExecuteSearch = _.debounce(executeSearch, 750); const handleSearch = (value) => { debouncedExecuteSearch({ search: value }); }; const renderTitle = (title) => { return {title}; }; const options = data ? [ { label: renderTitle(t("menus.header.search.jobs")), options: data.search_jobs.map((job) => { return { key: job.id, value: job.ro_number || "N/A", label: ( }> {job.ro_number || t("general.labels.na")} {`${job.status || ""}`} {`${job.v_model_yr || ""} ${job.v_make_desc || ""} ${job.v_model_desc || ""}`} {`${job.clm_no || ""}`} ) }; }) }, { label: renderTitle(t("menus.header.search.owners")), options: data.search_owners.map((owner) => { return { key: owner.id, value: OwnerNameDisplayFunction(owner), label: ( } wrap> {owner.ownr_ph1} {owner.ownr_ph2} ) }; }) }, { label: renderTitle(t("menus.header.search.vehicles")), options: data.search_vehicles.map((vehicle) => { return { key: vehicle.id, value: `${vehicle.v_model_yr || ""} ${vehicle.v_make_desc || ""} ${vehicle.v_model_desc || ""}`, label: ( }> {`${vehicle.v_model_yr || ""} ${vehicle.v_make_desc || ""} ${vehicle.v_model_desc || ""}`} {vehicle.plate_no || ""} {vehicle.v_vin || ""} ) }; }) }, { label: renderTitle(t("menus.header.search.payments")), options: data.search_payments.map((payment) => { return { key: payment.id, value: `${payment.job.ro_number} ${payment.payer} ${payment.amount}`, label: ( }> {payment.paymentnum} {payment.job.ro_number} {payment.memo || ""} {payment.amount || ""} {payment.transactionid || ""} ) }; }) }, { label: renderTitle(t("menus.header.search.bills")), options: data.search_bills.map((bill) => { return { key: bill.id, value: `${bill.invoice_number} - ${bill.vendor.name}`, label: ( }> {bill.invoice_number} {bill.vendor.name} {bill.date} ) }; }) }, { label: renderTitle(t("menus.header.search.phonebook")), options: data.search_phonebook.map((pb) => { return { key: pb.id, value: `${pb.firstname || ""} ${pb.lastname || ""} ${pb.company || ""}`, label: ( }> {`${pb.firstname || ""} ${pb.lastname || ""} ${pb.company || ""}`} {pb.phone1} {pb.email} ) }; }) } ] : []; if (error) return ; return ( { if (e.key !== "Enter") return; const firstUrlForSearch = options?.[0]?.options?.[0]?.label?.props?.to; if (!firstUrlForSearch) return; navigate(firstUrlForSearch); }} > ); }