diff --git a/apps/frontend/app/[locale]/dashboard/booking/[id]/edit/page.tsx b/apps/frontend/app/[locale]/dashboard/booking/[id]/edit/page.tsx index 8a7ec76..af6baea 100644 --- a/apps/frontend/app/[locale]/dashboard/booking/[id]/edit/page.tsx +++ b/apps/frontend/app/[locale]/dashboard/booking/[id]/edit/page.tsx @@ -145,17 +145,25 @@ export default function EditBookingPage() { hasDangerousGoods: false, }); const results = response.results || []; + + // The rate search returns the carrier as a slug (e.g. "ssc-consolidation") + // while the booking stores the display name ("SSC Consolidation"), so carriers + // are compared on a normalized form. Container + transit uniquely identify the + // originally chosen offer for the route, and are the primary match keys. + const norm = (s: string) => (s || '').toLowerCase().replace(/[^a-z0-9]/g, ''); + const carrier = norm(booking.carrierName); + const sameContainer = (r: any) => r.containerType === booking.containerType; + const sameTransit = (r: any) => + (r.adjustedTransitDays ?? r.transitDays) === booking.transitDays; + const sameCarrier = (r: any) => norm(r.companyName) === carrier; + const match = - results.find( - (r: any) => - r.companyName === booking.carrierName && - r.containerType === booking.containerType && - (r.adjustedTransitDays ?? r.transitDays) === booking.transitDays - ) || - results.find( - (r: any) => - r.companyName === booking.carrierName && r.containerType === booking.containerType - ); + results.find((r: any) => sameCarrier(r) && sameContainer(r) && sameTransit(r)) || + results.find((r: any) => sameContainer(r) && sameTransit(r)) || + results.find((r: any) => sameCarrier(r) && sameContainer(r)) || + results.find((r: any) => sameCarrier(r)) || + results.find((r: any) => sameContainer(r)) || + null; if (!match) return null;