import { AutoComplete, Divider, Input, Space } from "antd"; import axios from "axios"; import _ from "lodash"; import React, { useState } from "react"; import { useTranslation } from "react-i18next"; import { Link, useHistory } from "react-router-dom"; import PhoneNumberFormatter from "../../utils/PhoneFormatter"; import OwnerNameDisplay, { OwnerNameDisplayFunction, } from "../owner-name-display/owner-name-display.component"; import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.component"; export default function GlobalSearchOs() { const { t } = useTranslation(); const history = useHistory(); const [loading, setLoading] = useState(false); const [data, setData] = useState(false); const executeSearch = async (v) => { if (v && v && v !== "" && v.length >= 3) { try { setLoading(true); const searchData = await axios.post("/search", { search: v, }); const resultsByType = { payments: [], jobs: [], bills: [], owners: [], vehicles: [], }; searchData.data.hits.hits.forEach((hit) => { resultsByType[hit._index].push(hit._source); }); setData([ { label: renderTitle(t("menus.header.search.jobs")), options: resultsByType.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: resultsByType.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: resultsByType.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: resultsByType.payments.map((payment) => { return { key: payment.id, value: `${payment.job?.ro_number} ${payment.amount}`, label: ( }> {payment.paymentnum} {payment.job?.ro_number} {payment.memo || ""} {payment.amount || ""} {payment.transactionid || ""} ), }; }), }, { label: renderTitle(t("menus.header.search.bills")), options: resultsByType.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: resultsByType.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} // // // ), // }; // }), // }, ]); } catch (error) { console.log("Error while fetching search results", error); } finally { setLoading(false); } } }; const debouncedExecuteSearch = _.debounce(executeSearch, 750); const handleSearch = (value) => { debouncedExecuteSearch(value); }; const renderTitle = (title) => { return {title}; }; return ( { history.push(opt.label.props.to); }} onClear={() => setData([])} > ); }