diff --git a/app/ui/src/app/edit/utils/vroomToRoutes.ts b/app/ui/src/app/edit/utils/vroomToRoutes.ts
index 8eee8170..d4c76880 100644
--- a/app/ui/src/app/edit/utils/vroomToRoutes.ts
+++ b/app/ui/src/app/edit/utils/vroomToRoutes.ts
@@ -57,6 +57,9 @@ export function vroomToRoutes(
// arrival is in seconds; % 86400 extracts the within-day portion for display
const arrivalTimeStr = secondsToTimeString(step.arrival % 86400);
+ const winStart = address?.deliveryTimeStart?.trim();
+ const winEnd = address?.deliveryTimeEnd?.trim();
+
return {
id: step.job_external_id!,
address:
@@ -66,15 +69,15 @@ export function vroomToRoutes(
sequence: idx + 1,
capacityUsed: step.load?.[0] ?? 0,
timeWindow: {
- kind: inferTimeWindowKind(
- address?.deliveryTimeStart,
- address?.deliveryTimeEnd,
- ),
+ kind: inferTimeWindowKind(winStart, winEnd),
time: arrivalTimeStr,
},
note: address?.notes ?? "",
- addresseeName: address?.recipientName || undefined,
- phoneNumber: address?.phoneNumber || undefined,
+ addresseeName: address?.recipientName?.trim() || undefined,
+ phoneNumber: address?.phoneNumber?.trim() || undefined,
+ ...(winStart && winEnd
+ ? { deliveryWindow: { start: winStart, end: winEnd } }
+ : {}),
};
});
diff --git a/app/ui/src/app/results/components/EditableStopItem.tsx b/app/ui/src/app/results/components/EditableStopItem.tsx
index 7deeb1e6..588194c1 100644
--- a/app/ui/src/app/results/components/EditableStopItem.tsx
+++ b/app/ui/src/app/results/components/EditableStopItem.tsx
@@ -36,11 +36,19 @@ export default function EditableStopItem({
-
- Name of addressed to:
- {" "}
+ Addressee:{" "}
{stop.addresseeName ?? "—"}
+
+ Phone:{" "}
+ {stop.phoneNumber ?? "—"}
+
+ {stop.deliveryWindow ? (
+
+ Delivery window:{" "}
+ {stop.deliveryWindow.start} – {stop.deliveryWindow.end}
+
+ ) : null}
Est time of arrival:
diff --git a/app/ui/src/app/results/types.ts b/app/ui/src/app/results/types.ts
index aee38956..15bf739e 100644
--- a/app/ui/src/app/results/types.ts
+++ b/app/ui/src/app/results/types.ts
@@ -23,6 +23,8 @@ export interface Stop {
note: string; // driver notes for the stop
addresseeName?: string; // name of person at address
phoneNumber?: string; // phone number of person at address
+ /** Delivery window from edit form; start and end are always set together */
+ deliveryWindow?: { start: string; end: string };
}
// Data that a single route contains (one driver, their stops in order, and the path to draw for the route)
diff --git a/app/ui/src/tests/vroomToRoutes.test.ts b/app/ui/src/tests/vroomToRoutes.test.ts
index 7c5b01e5..4960090e 100644
--- a/app/ui/src/tests/vroomToRoutes.test.ts
+++ b/app/ui/src/tests/vroomToRoutes.test.ts
@@ -181,6 +181,47 @@ describe("vroomToRoutes", () => {
expect(route.stops[1].sequence).toBe(2);
});
+ it("maps recipient, phone, and delivery window from address card", () => {
+ const [route] = vroomToRoutes(
+ SINGLE_STOP,
+ [makeVehicle(1)],
+ [
+ makeAddress(1, {
+ recipientName: " Jane Doe ",
+ phoneNumber: "555-123-4567",
+ deliveryTimeStart: "9:00 AM",
+ deliveryTimeEnd: "11:00 AM",
+ }),
+ ],
+ );
+ const stop = route.stops[0];
+ expect(stop.addresseeName).toBe("Jane Doe");
+ expect(stop.phoneNumber).toBe("555-123-4567");
+ expect(stop.deliveryWindow).toEqual({
+ start: "9:00 AM",
+ end: "11:00 AM",
+ });
+ });
+
+ it("trims delivery window fields for kind and deliveryWindow", () => {
+ const [route] = vroomToRoutes(
+ SINGLE_STOP,
+ [makeVehicle(1)],
+ [
+ makeAddress(1, {
+ deliveryTimeStart: " 9:00 AM",
+ deliveryTimeEnd: "11:00 AM ",
+ }),
+ ],
+ );
+ const stop = route.stops[0];
+ expect(stop.timeWindow.kind).toBe("at");
+ expect(stop.deliveryWindow).toEqual({
+ start: "9:00 AM",
+ end: "11:00 AM",
+ });
+ });
+
it("arrival wraps via % 86400 — 86400 + 32400 still shows 9:00 AM", () => {
const response: VroomResponse = {
routes: [