import { permissions } from "@mrp/shared"; import type { SalesDocumentStatus, SalesDocumentSummaryDto } from "@mrp/shared/dist/sales/types.js"; import { useEffect, useState } from "react"; import { Link } from "react-router-dom"; import { useAuth } from "../../auth/AuthProvider"; import { api, ApiError } from "../../lib/api"; import { salesConfigs, salesStatusFilters, type SalesDocumentEntity } from "./config"; import { SalesStatusBadge } from "./SalesStatusBadge"; export function SalesListPage({ entity }: { entity: SalesDocumentEntity }) { const { token, user } = useAuth(); const config = salesConfigs[entity]; const [documents, setDocuments] = useState([]); const [searchTerm, setSearchTerm] = useState(""); const [statusFilter, setStatusFilter] = useState<"ALL" | SalesDocumentStatus>("ALL"); const [status, setStatus] = useState(`Loading ${config.collectionLabel.toLowerCase()}...`); const canManage = user?.permissions.includes(permissions.salesWrite) ?? false; useEffect(() => { if (!token) { return; } const loader = entity === "quote" ? api.getQuotes(token, { q: searchTerm.trim() || undefined, status: statusFilter === "ALL" ? undefined : statusFilter }) : api.getSalesOrders(token, { q: searchTerm.trim() || undefined, status: statusFilter === "ALL" ? undefined : statusFilter }); loader .then((nextDocuments) => { setDocuments(nextDocuments); setStatus(`${nextDocuments.length} ${config.collectionLabel.toLowerCase()} matched the current filters.`); }) .catch((error: unknown) => { const message = error instanceof ApiError ? error.message : `Unable to load ${config.collectionLabel.toLowerCase()}.`; setStatus(message); }); }, [config.collectionLabel, entity, searchTerm, statusFilter, token]); return (

{config.listEyebrow}

{config.collectionLabel}

Customer-facing commercial documents for pricing, commitment, and downstream fulfillment planning.

{canManage ? ( New {config.singularLabel.toLowerCase()} ) : null}
{status}
{documents.length === 0 ? (
No {config.collectionLabel.toLowerCase()} have been added yet.
) : (
{documents.map((document) => ( ))}
Document Customer Status Revision Issue Date Value Lines
{document.documentNumber} {document.customerName} Rev {document.currentRevisionNumber} {document.approvedAt ?
Approved
: null}
{new Date(document.issueDate).toLocaleDateString()} ${document.total.toFixed(2)} {document.lineCount}
)}
); }