import { permissions } from "@mrp/shared"; import type { PurchaseOrderStatus, PurchaseOrderSummaryDto } from "@mrp/shared"; import { useEffect, useState } from "react"; import { Link } from "react-router-dom"; import { useAuth } from "../../auth/AuthProvider"; import { api, ApiError } from "../../lib/api"; import { purchaseStatusFilters } from "./config"; import { PurchaseStatusBadge } from "./PurchaseStatusBadge"; export function PurchaseListPage() { const { token, user } = useAuth(); const [documents, setDocuments] = useState([]); const [searchTerm, setSearchTerm] = useState(""); const [statusFilter, setStatusFilter] = useState<"ALL" | PurchaseOrderStatus>("ALL"); const [status, setStatus] = useState("Loading purchase orders..."); const canManage = user?.permissions.includes("purchasing.write") ?? false; useEffect(() => { if (!token) { return; } api.getPurchaseOrders(token, { q: searchTerm.trim() || undefined, status: statusFilter === "ALL" ? undefined : statusFilter }) .then((nextDocuments) => { setDocuments(nextDocuments); setStatus(`${nextDocuments.length} purchase orders matched the current filters.`); }) .catch((error: unknown) => { const message = error instanceof ApiError ? error.message : "Unable to load purchase orders."; setStatus(message); }); }, [searchTerm, statusFilter, token]); return (

PURCHASING

PURCHASE ORDERS

{canManage ? ( New purchase order ) : null}
{status}
{documents.length === 0 ? (
No purchase orders have been added yet.
) : (
{documents.map((document) => ( ))}
Document Vendor Status Issue Date Value Lines
{document.documentNumber} {document.vendorName} {new Date(document.issueDate).toLocaleDateString()} ${document.total.toFixed(2)} {document.lineCount}
)}
); }