import React, { useCallback, useEffect, useState } from "react"; import { useNavigate } from "react-router"; import { toast } from "react-toastify"; import { upliftApi } from "../../services/api"; import "./UpliftQueuePage.css"; function formatDateTime(value) { if (!value) return ""; const d = new Date(value); if (isNaN(d)) return ""; const pad = (n) => String(n).padStart(2, "0"); return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`; } const STATUS_OPTIONS = ["Pending", "Approved", "Denied", "Cancelled"]; export default function UpliftQueuePage() { const navigate = useNavigate(); const [status, setStatus] = useState("Pending"); const [tier, setTier] = useState(""); const [items, setItems] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const [pageSize] = useState(25); const [loading, setLoading] = useState(false); const load = useCallback(async () => { setLoading(true); try { const params = { status, page, pageSize }; if (tier) params.tier = tier; const res = await upliftApi.list(params); const data = res?.data ?? res; setItems(data?.items || []); setTotal(data?.total || 0); } catch (err) { toast.error(err.message || "Failed to load uplift queue"); } finally { setLoading(false); } }, [status, tier, page, pageSize]); useEffect(() => { load(); }, [load]); async function approve(req) { const note = window.prompt("Optional approval note:", "") || ""; if (!window.confirm(`Approve uplift to $${Number(req.requestedNTE).toFixed(2)}?`)) return; try { await upliftApi.approve(req.id, note); toast.success("Uplift approved — NTE updated"); load(); } catch (err) { toast.error(err.message || "Failed to approve"); } } async function deny(req) { const note = window.prompt("Denial reason (required):", ""); if (!note || !note.trim()) { toast.error("A reason is required when denying."); return; } try { await upliftApi.deny(req.id, note.trim()); toast.success("Uplift denied"); load(); } catch (err) { toast.error(err.message || "Failed to deny"); } } const totalPages = Math.max(1, Math.ceil(total / pageSize)); return (

Uplift Queue

{total} total
{loading ? (
Loading…
) : items.length === 0 ? (
No uplift requests match these filters.
) : ( {items.map((r) => ( ))}
Dispatch PO Vendor Current NTE Requested Delta Tier Status Requested At Actions
{r.dispatchNumber} {r.poNumber} {r.vendorCompanyName} ${Number(r.currentNTE ?? 0).toFixed(2)} ${Number(r.requestedNTE).toFixed(2)} ${Number(r.delta).toFixed(2)} Tier {r.requiredTier} {r.status} {r.requestedAt ? formatDateTime(r.requestedAt) : ""}
{r.workOrderId && ( )} {r.status === "Pending" && ( <> )}
)} {totalPages > 1 && (
Page {page} of {totalPages}
)}
); }