import { useState } from "react"; import { Text } from "@/components/ui/text"; import { UpliftRequestForm } from "@/app/v/[token]/dispatch/_components/uplift-request-form"; import type { VendorMediaUsage } from "@/domain/vendor-portal/lib/document-validation"; import type { UpliftFormValues } from "@/domain/vendor-portal/lib/uplift-validation"; import type { VendorPortalUpliftRequest } from "@/domain/vendor-portal/types/vendor-portal"; import { formatDateTime } from "@/lib/time-utils"; type UpliftRequestCardProps = { request: VendorPortalUpliftRequest; locked: boolean; canAct: boolean; uploadingPercent: number | undefined; submitting: boolean; errorMessage: string; onWithdraw: (request: VendorPortalUpliftRequest) => void; onRevise: (request: VendorPortalUpliftRequest, values: UpliftFormValues) => void; onCancelRevise: () => void; mediaUsage?: VendorMediaUsage; }; const WITHDRAWABLE_STATUSES = new Set(["Pending", "ChangesRequested"]); function statusClassName(status: string): string { return `vp-uplift-status-${String(status).toLowerCase()}`; } function availableActions(request: VendorPortalUpliftRequest, locked: boolean, canAct: boolean) { // Requests raised from the work order are visible but read-only to the vendor. const actionable = !locked && canAct && request.raisedByVendor !== false; return { canWithdraw: actionable && WITHDRAWABLE_STATUSES.has(request.status), canRevise: actionable && request.status === "ChangesRequested", }; } // A vendor request stores the requested new NTE total; a work-order request stores the increase. function requestedTotal(request: VendorPortalUpliftRequest): number { const requested = Number(request.requestedNTE); return request.raisedByVendor === false ? Number(request.currentNTE ?? 0) + requested : requested; } export function UpliftRequestCard({ request, locked, canAct, uploadingPercent, submitting, errorMessage, onWithdraw, onRevise, onCancelRevise, mediaUsage, }: UpliftRequestCardProps) { const [revising, setRevising] = useState(false); const { canWithdraw, canRevise } = availableActions(request, locked, canAct); return (