import { useMemo, useState } from "react"; import { useNavigate } from "react-router"; import { useQuery } from "@tanstack/react-query"; import { useVendorPortal } from "@/app/v/_components/vendor-portal-context"; import { Text } from "@/components/ui/text"; import { vendorPortalApi } from "@/domain/vendor-portal/api/vendor-portal-api"; import { formatVendorPortalDateTime, vendorPortalStatusClass, } from "@/domain/vendor-portal/lib/status-helpers"; import { VENDOR_PORTAL_DISPATCH_FILTERS, applyVendorPortalDispatchFilter, getVendorPortalDispatchFilter, type VendorPortalDispatchFilterKey, } from "@/domain/vendor-portal/lib/dispatch-filters"; import { queryKeys } from "@/infra/query-key/query-key"; export default function VendorPortalDashboardPage() { const { token } = useVendorPortal(); const navigate = useNavigate(); const [filter, setFilter] = useState("open"); const { data: dispatches = [], isLoading, error, } = useQuery({ queryKey: queryKeys.vendorPortal.dispatches(token), queryFn: () => vendorPortalApi.listDispatches(token), enabled: Boolean(token), }); const activeFilter = getVendorPortalDispatchFilter(filter); const filtered = useMemo( () => applyVendorPortalDispatchFilter(dispatches, activeFilter), [dispatches, activeFilter], ); return ( <>
Your Work
Active dispatches and work orders assigned to your company.
{VENDOR_PORTAL_DISPATCH_FILTERS.map((item) => ( ))}
{isLoading &&
Loading dispatches…
} {error?.message} {!isLoading && !error && filtered.length === 0 && (
No dispatches in this view.
)}
{filtered.map((dispatch) => (
navigate(`../dispatch/${dispatch.id}`)} >
{dispatch.dispatchNumber} — {dispatch.workOrderTitle || "(untitled)"}
WO#{dispatch.internalWONumber} {dispatch.locationName ? ` · ${dispatch.locationName}` : ""} {dispatch.locationCity ? `, ${dispatch.locationCity}` : ""} {dispatch.locationState ? `, ${dispatch.locationState}` : ""} {dispatch.scheduledDate ? ` · Scheduled ${formatVendorPortalDateTime(dispatch.scheduledDate)}` : ""}
{dispatch.status}
))}
); }