import { permissions } from "@mrp/shared"; import type { SalesDocumentDetailDto } from "@mrp/shared/dist/sales/types.js"; import { useEffect, useState } from "react"; import { Link, useParams } from "react-router-dom"; import { useAuth } from "../../auth/AuthProvider"; import { api, ApiError } from "../../lib/api"; import { salesConfigs, type SalesDocumentEntity } from "./config"; import { SalesStatusBadge } from "./SalesStatusBadge"; export function SalesDetailPage({ entity }: { entity: SalesDocumentEntity }) { const { token, user } = useAuth(); const { quoteId, orderId } = useParams(); const config = salesConfigs[entity]; const documentId = entity === "quote" ? quoteId : orderId; const [document, setDocument] = useState(null); const [status, setStatus] = useState(`Loading ${config.singularLabel.toLowerCase()}...`); const canManage = user?.permissions.includes(permissions.salesWrite) ?? false; useEffect(() => { if (!token || !documentId) { return; } const loader = entity === "quote" ? api.getQuote(token, documentId) : api.getSalesOrder(token, documentId); loader .then((nextDocument) => { setDocument(nextDocument); setStatus(`${config.singularLabel} loaded.`); }) .catch((error: unknown) => { const message = error instanceof ApiError ? error.message : `Unable to load ${config.singularLabel.toLowerCase()}.`; setStatus(message); }); }, [config.singularLabel, documentId, entity, token]); if (!document) { return
{status}
; } return (

{config.detailEyebrow}

{document.documentNumber}

{document.customerName}

Back to {config.collectionLabel.toLowerCase()} {canManage ? ( Edit {config.singularLabel.toLowerCase()} ) : null}

Issue Date

{new Date(document.issueDate).toLocaleDateString()}

Expires

{document.expiresAt ? new Date(document.expiresAt).toLocaleDateString() : "N/A"}

Lines

{document.lineCount}

Subtotal

${document.subtotal.toFixed(2)}

Customer

Account
{document.customerName}
Email
{document.customerEmail}

Notes

{document.notes || "No notes recorded for this document."}

Line Items

{document.lines.length === 0 ? (
No line items have been added yet.
) : (
{document.lines.map((line: SalesDocumentDetailDto["lines"][number]) => ( ))}
Item Description Qty UOM Unit Price Total
{line.itemSku}
{line.itemName}
{line.description} {line.quantity} {line.unitOfMeasure} ${line.unitPrice.toFixed(2)} ${line.lineTotal.toFixed(2)}
)}
); }