Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions app/ui/src/app/edit/utils/vroomToRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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 } }
: {}),
};
});

Expand Down
14 changes: 11 additions & 3 deletions app/ui/src/app/results/components/EditableStopItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,19 @@ export default function EditableStopItem({
</div>
<div className="mt-1.5 space-y-0.5 text-xs text-zinc-600">
<div>
<span className="font-medium text-zinc-700">
Name of addressed to:
</span>{" "}
<span className="font-medium text-zinc-700">Addressee:</span>{" "}
{stop.addresseeName ?? "—"}
</div>
<div>
<span className="font-medium text-zinc-700">Phone:</span>{" "}
{stop.phoneNumber ?? "—"}
</div>
{stop.deliveryWindow ? (
<div>
<span className="font-medium text-zinc-700">Delivery window:</span>{" "}
{stop.deliveryWindow.start} – {stop.deliveryWindow.end}
</div>
) : null}
<div>
<span className="font-medium text-zinc-700">
Est time of arrival:
Expand Down
2 changes: 2 additions & 0 deletions app/ui/src/app/results/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
41 changes: 41 additions & 0 deletions app/ui/src/tests/vroomToRoutes.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: [
Expand Down
Loading