diff --git a/apps/edr-freight-web/backoffice/src/pages/bookings/BookingDetailPage.tsx b/apps/edr-freight-web/backoffice/src/pages/bookings/BookingDetailPage.tsx index 39040db19..e225bea0b 100644 --- a/apps/edr-freight-web/backoffice/src/pages/bookings/BookingDetailPage.tsx +++ b/apps/edr-freight-web/backoffice/src/pages/bookings/BookingDetailPage.tsx @@ -1,21 +1,20 @@ -import { useParams, useNavigate } from "react-router-dom"; -import { Container, Stack, Grid } from "@mantine/core"; +import { Container, Grid, Stack } from "@mantine/core"; +import { useNavigate, useParams } from "react-router-dom"; -import Breadcrumbs from "@/components/ui/Breadcrumbs"; import { - detailStyles, - type BookingDetailView, - BookingDetailToolbar, - BookingDetailHeader, - BookingLifecycleStepper, - BookingRouteCard, - BookingContainersCard, BookingApprovalCard, - BookingReviewNotesCard, - BookingPaymentCard, - BookingFactsCard, + BookingContainersCard, + BookingDetailToolbar, BookingDocumentsCard, + BookingFactsCard, + BookingLifecycleStepper, + BookingPaymentCard, + BookingReviewNotesCard, + BookingRouteCard, + detailStyles, + type BookingDetailView } from "@/components/bookings/detail"; +import Breadcrumbs from "@/components/ui/Breadcrumbs"; const BookingDetailPage = () => { const { id } = useParams<{ id: string }>(); diff --git a/apps/edr-freight-web/portal/src/App.tsx b/apps/edr-freight-web/portal/src/App.tsx index c0eb0ac34..789589900 100644 --- a/apps/edr-freight-web/portal/src/App.tsx +++ b/apps/edr-freight-web/portal/src/App.tsx @@ -79,8 +79,6 @@ function RequireCompany({path}: {path: string}) { const { customerQuery } = useAuth(); if (customerQuery.isPending) return ; - if (customerQuery.isSuccess && !customerQuery.data && path !== "/portal") - return ; return ; } diff --git a/apps/edr-freight-web/portal/src/pages/MyPortalPage.tsx b/apps/edr-freight-web/portal/src/pages/MyPortalPage.tsx index 710e607f0..7b488bc7d 100644 --- a/apps/edr-freight-web/portal/src/pages/MyPortalPage.tsx +++ b/apps/edr-freight-web/portal/src/pages/MyPortalPage.tsx @@ -1,5 +1,4 @@ import { - Alert, Box, Grid, Group, @@ -91,19 +90,162 @@ const STATUS_CONFIG: Record = { badgeDot: "edr-blue-dot", action: { label: "View", kind: "outline" }, }, + CHANGES_REQUESTED: { + stage: 1, + icon: FilePen, + iconColor: "edr-amber-text", + tile: "edr-amber-soft", + hint: "Changes requested · please update", + step: "edr-accent", + badgeLabel: "Revise", + badgeBg: "edr-amber-soft", + badgeText: "edr-amber-text", + badgeDot: "edr-accent", + action: { label: "Update", kind: "dark" }, + }, PENDING_APPROVAL: { + stage: 2, + icon: FileCheck2, + iconColor: "edr-blue", + tile: "edr-blue-soft", + hint: "Pending internal approval", + step: "edr-blue-dot", + badgeLabel: "Pending", + badgeBg: "edr-blue-soft", + badgeText: "edr-blue", + badgeDot: "edr-blue-dot", + action: { label: "View", kind: "outline" }, + }, + APPROVED_PENDING_SIGNATURE: { + stage: 2, + icon: FileCheck2, + iconColor: "edr-blue", + tile: "edr-blue-soft", + hint: "Approved · awaiting signature", + step: "edr-blue-dot", + badgeLabel: "For Signature", + badgeBg: "edr-blue-soft", + badgeText: "edr-blue", + badgeDot: "edr-blue-dot", + action: { label: "Review", kind: "outline" }, + }, + APPROVED: { + stage: 2, + icon: CheckCircle2, + iconColor: "edr-green.7", + tile: "edr-soft", + hint: "Quote approved · ready to sign", + step: "edr-green.5", + badgeLabel: "Approved", + badgeBg: "edr-soft", + badgeText: "edr-green.7", + badgeDot: "edr-green.5", + action: { label: "View", kind: "outline" }, + }, + CONTRACT_READY: { + stage: 2, + icon: CheckCircle2, + iconColor: "edr-green.7", + tile: "edr-soft", + hint: "Contract ready · awaiting signature", + step: "edr-green.5", + badgeLabel: "Contract Ready", + badgeBg: "edr-soft", + badgeText: "edr-green.7", + badgeDot: "edr-green.5", + action: { label: "Review", kind: "outline" }, + }, + SIGNED_CUSTOMER: { + stage: 3, + icon: CheckCircle2, + iconColor: "edr-green.7", + tile: "edr-soft", + hint: "Signed by customer · internal processing", + step: "edr-green.5", + badgeLabel: "Signed", + badgeBg: "edr-soft", + badgeText: "edr-green.7", + badgeDot: "edr-green.5", + action: { label: "View", kind: "outline" }, + }, + FULLY_EXECUTED: { + stage: 3, + icon: CheckCircle2, + iconColor: "edr-green.7", + tile: "edr-soft", + hint: "Fully executed · generating PNR", + step: "edr-green.5", + badgeLabel: "Executed", + badgeBg: "edr-soft", + badgeText: "edr-green.7", + badgeDot: "edr-green.5", + action: { label: "View", kind: "outline" }, + }, + PNR_GENERATED: { + stage: 3, + icon: FileCheck2, + iconColor: "edr-blue", + tile: "edr-blue-soft", + hint: "PNR generated · awaiting payment verification", + step: "edr-blue-dot", + badgeLabel: "PNR Ready", + badgeBg: "edr-blue-soft", + badgeText: "edr-blue", + badgeDot: "edr-blue-dot", + action: { label: "View", kind: "outline" }, + }, + PAYMENT_VERIFICATION_IN_PROGRESS: { + stage: 2, + icon: Clock3, + iconColor: "edr-amber-text", + tile: "edr-amber-soft", + hint: "Verifying payment · please wait", + step: "edr-accent", + badgeLabel: "Verifying", + badgeBg: "edr-amber-soft", + badgeText: "edr-amber-text", + badgeDot: "edr-accent", + action: { label: "View", kind: "outline" }, + }, + SELECTED_FOR_BATCH: { stage: 2, icon: Wallet, iconColor: "edr-amber-text", tile: "edr-amber-soft", - hint: "Quote ready · awaiting payment", + hint: "Selected for batch · payment due within 1 hour", step: "edr-accent", - badgeLabel: "Awaiting Payment", + badgeLabel: "Pay Now", badgeBg: "edr-amber-soft", badgeText: "edr-amber-text", badgeDot: "edr-accent", action: { label: "Pay now", kind: "amber", icon: ArrowRight }, }, + EXPIRED: { + stage: 1, + icon: Clock3, + iconColor: "edr-red", + tile: "edr-red-soft", + hint: "Payment window expired · contact support", + step: "edr-red", + badgeLabel: "Expired", + badgeBg: "edr-red-soft", + badgeText: "edr-red", + badgeDot: "edr-red", + action: { label: "Contact", kind: "outline" }, + }, + PAID: { + stage: 3, + icon: CheckCircle2, + iconColor: "edr-green.7", + tile: "edr-soft", + hint: "Payment received · awaiting dispatch", + step: "edr-green.5", + badgeLabel: "Paid", + badgeBg: "edr-soft", + badgeText: "edr-green.7", + badgeDot: "edr-green.5", + action: { label: "View", kind: "outline" }, + }, IN_TRANSIT: { stage: 3, icon: Truck, @@ -118,6 +260,19 @@ const STATUS_CONFIG: Record = { action: { label: "Track", kind: "outline", icon: MapPin }, }, COMPLETED: { + stage: 4, + icon: CheckCircle2, + iconColor: "edr-slate", + tile: "edr-slate-soft2", + hint: "Completed · awaiting delivery", + step: "edr-green.5", + badgeLabel: "Completed", + badgeBg: "edr-slate-soft2", + badgeText: "edr-slate", + badgeDot: "edr-step", + action: { label: "View", kind: "outline" }, + }, + DELIVERED: { stage: 4, icon: CheckCircle2, iconColor: "edr-slate", @@ -148,12 +303,38 @@ const STATUS_CONFIG: Record = { icon: FilePen, iconColor: "edr-red", tile: "edr-red-soft", - hint: "Rejected", + hint: "Rejected · contact support", step: "edr-red", badgeLabel: "Rejected", badgeBg: "edr-red-soft", badgeText: "edr-red", badgeDot: "edr-red", + action: { label: "Contact", kind: "outline" }, + }, + PENDING_CONSOLIDATION: { + stage: 3, + icon: Clock3, + iconColor: "edr-blue", + tile: "edr-blue-soft", + hint: "Awaiting consolidation", + step: "edr-blue-dot", + badgeLabel: "Consolidating", + badgeBg: "edr-blue-soft", + badgeText: "edr-blue", + badgeDot: "edr-blue-dot", + action: { label: "View", kind: "outline" }, + }, + CONSOLIDATED: { + stage: 3, + icon: CheckCircle2, + iconColor: "edr-green.7", + tile: "edr-soft", + hint: "Consolidated · ready for dispatch", + step: "edr-green.5", + badgeLabel: "Consolidated", + badgeBg: "edr-soft", + badgeText: "edr-green.7", + badgeDot: "edr-green.5", action: { label: "View", kind: "outline" }, }, }; @@ -256,16 +437,32 @@ export default function MyPortalPage() { - - - - Setup your Company Profile to start booking shipments and managing invoices. - - Get started - - . - - + + {!customer&& ( + + + + + Setup your Company Profile + + + Complete your company information to unlock all features and start booking shipments. + + + + + Complete Setup + + + + + + + + + + + )} {/* ── Stats Strip ───────────────────────────────────────────────────── */}