"use client"; import Box from "@mui/material/Box"; import { useEffect, useMemo, useState } from "react"; import { MOCK_WORKBENCH_SEARCH_RESULTS, WORKBENCH_GRID_TEMPLATE_COLUMNS, WORKBENCH_GRID_TEMPLATE_ROWS, } from "@/components/PoWorkbench/mock/workbenchMockData"; import PoWorkbenchDetailsPlaceholder from "@/components/PoWorkbench/PoWorkbenchDetailsPlaceholder"; import PoWorkbenchRegion from "@/components/PoWorkbench/PoWorkbenchRegion"; import PoWorkbenchSearchCriteriaBar from "@/components/PoWorkbench/PoWorkbenchSearchCriteriaBar"; import PoWorkbenchLeftPane from "@/components/PoWorkbench/PoWorkbenchSearchResultsPane"; import { DEFAULT_ADVANCED_FILTERS, type PoWorkbenchAdvancedFilters, } from "@/components/PoWorkbench/types"; /** * Root layout for PO Workbench: a 2×2 CSS Grid with configurable column and row templates * defined in {@link WORKBENCH_GRID_TEMPLATE_COLUMNS} and {@link WORKBENCH_GRID_TEMPLATE_ROWS}. * Search UI uses mock data until `/po/list` is integrated. */ export default function PoWorkbenchShell() { const [poNumberQuery, setPoNumberQuery] = useState(""); const [isAdvancedSearchOpen, setIsAdvancedSearchOpen] = useState(false); const [advancedFilters, setAdvancedFilters] = useState( { ...DEFAULT_ADVANCED_FILTERS }, ); const [selectedId, setSelectedId] = useState( () => MOCK_WORKBENCH_SEARCH_RESULTS[0]?.id ?? null, ); const filteredResults = useMemo(() => { let rows = MOCK_WORKBENCH_SEARCH_RESULTS; const q = poNumberQuery.trim().toLowerCase(); if (q) { rows = rows.filter((row) => row.poNumber.toLowerCase().includes(q)); } const supplierQ = advancedFilters.supplierQuery.trim().toLowerCase(); if (supplierQ) { rows = rows.filter((row) => row.supplierName.toLowerCase().includes(supplierQ), ); } if (advancedFilters.orderDateFrom) { rows = rows.filter((row) => row.orderDate >= advancedFilters.orderDateFrom); } if (advancedFilters.orderDateTo) { rows = rows.filter((row) => row.orderDate <= advancedFilters.orderDateTo); } if (advancedFilters.etaDateFrom) { rows = rows.filter( (row) => row.estimatedArrivalDate >= advancedFilters.etaDateFrom, ); } if (advancedFilters.etaDateTo) { rows = rows.filter( (row) => row.estimatedArrivalDate <= advancedFilters.etaDateTo, ); } if (advancedFilters.reportStatus !== "ALL") { const want = advancedFilters.reportStatus === "REPORTED"; rows = rows.filter((row) => row.reported === want); } if (advancedFilters.receiveStatus !== "ALL") { const want = advancedFilters.receiveStatus === "RECEIVED"; rows = rows.filter((row) => row.received === want); } return rows; }, [poNumberQuery, advancedFilters]); useEffect(() => { setSelectedId((prev) => { if (filteredResults.length === 0) { return null; } if (prev && filteredResults.some((r) => r.id === prev)) { return prev; } return filteredResults[0].id; }); }, [filteredResults]); return ( setIsAdvancedSearchOpen((open) => !open)} /> setAdvancedFilters({ ...DEFAULT_ADVANCED_FILTERS })} /> ); }