"use client" import { PickOrderResult } from "@/app/api/pickOrder"; import { SearchParams } from "@/app/utils/fetchUtil"; import { useCallback, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import SearchBox, { Criterion } from "../SearchBox"; import SearchResults, { Column } from "../SearchResults"; import { groupBy, map, sortBy, sortedUniq, uniqBy, upperCase, upperFirst } from "lodash"; interface Props { pickOrders: PickOrderResult[]; } type SearchQuery = Partial> type SearchParamNames = keyof SearchQuery; const PickOrderSearch: React.FC = ({ pickOrders, }) => { const { t } = useTranslation("pickOrders"); const [filteredPickOrders, setFilteredPickOrders] = useState(pickOrders) const searchCriteria: Criterion[] = useMemo(() => [ { label: t("Code"), paramName: "code", type: "text" }, { label: t("Target Date From"), label2: t("Target Date To"), paramName: "targetDate", type: "dateRange" }, { label: t("Type"), paramName: "type", type: "autocomplete", options: sortBy( uniqBy(pickOrders.map((po) => ({ value: po.type, label: t(upperCase(po.type)) })), "value"), "label").map((po) => (po)) }, { label: t("Status"), paramName: "status", type: "autocomplete", options: sortBy( uniqBy(pickOrders.map((po) => ({ value: po.status, label: t(upperFirst(po.status)) })), "value"), "label").map((po) => (po)) }, // { // label: t("Items"), paramName: "items", type: "autocomplete", multiple: true, // options: sortBy( // uniqBy(pickOrders.map((po) => po.items?.map((item) => ({ value: item.name, label: item.name, group: item.type }))), "value"), // "label") // }, ], [t]) const onReset = useCallback(() => { setFilteredPickOrders(pickOrders) }, [pickOrders]) const columns = useMemo[]>(() => [ { name: "code", label: t("Code"), }, { name: "consoCode", label: t("Consolidated Code"), }, { name: "type", label: t("type"), }, { name: "items", label: t("Items"), renderCell: (params) => { return params.items?.map((i) => i.name).join(", ") } }, { name: "releasedBy", label: t("Released By"), }, { name: "status", label: t("Status"), }, ], [t]) return ( <> { setFilteredPickOrders( pickOrders.filter( (po) => po.code.toLowerCase().includes(query.code.toLowerCase()) ) ) }} onReset={onReset} /> items={filteredPickOrders} columns={columns} pagingController={{ pageNum: 0, pageSize: 0, totalCount: 0, }} /> ) } export default PickOrderSearch;