diff --git a/assets/src/components/detours/changeDurationModal.tsx b/assets/src/components/detours/changeDurationModal.tsx index 519003de4..280e5dd49 100644 --- a/assets/src/components/detours/changeDurationModal.tsx +++ b/assets/src/components/detours/changeDurationModal.tsx @@ -15,7 +15,10 @@ const ChangingDuration = ({ Previous time length{" "} (estimate) -

+

{selectedDuration}

diff --git a/assets/src/components/detoursTable.tsx b/assets/src/components/detoursTable.tsx index b95cb47f9..2480a0353 100644 --- a/assets/src/components/detoursTable.tsx +++ b/assets/src/components/detoursTable.tsx @@ -8,7 +8,7 @@ import { EmptyDetourTableIcon } from "../helpers/skateIcons" import { joinClasses } from "../helpers/dom" interface DetoursTableProps { - data: SimpleDetour[] | undefined + data: SimpleDetour[] onOpenDetour: (detourId: number) => void status: DetourStatus classNames?: string[] @@ -40,7 +40,7 @@ export const DetoursTable = ({ classNames = [], }: DetoursTableProps) => ( @@ -57,7 +57,7 @@ export const DetoursTable = ({ - {data ? ( + {data.length ? ( ( -
+
diff --git a/assets/src/models/detoursList.ts b/assets/src/models/detoursList.ts index 67ff46107..a381853d1 100644 --- a/assets/src/models/detoursList.ts +++ b/assets/src/models/detoursList.ts @@ -1,13 +1,4 @@ -import { - array, - coerce, - date, - Infer, - nullable, - number, - string, - type, -} from "superstruct" +import { array, coerce, date, Infer, number, string, type } from "superstruct" export type DetourId = number export interface SimpleDetour { @@ -64,15 +55,15 @@ export const simpleDetourFromActivatedData = ( }) export interface GroupedSimpleDetours { - active?: SimpleDetour[] - draft?: SimpleDetour[] - past?: SimpleDetour[] + active: SimpleDetour[] + draft: SimpleDetour[] + past: SimpleDetour[] } export const GroupedDetoursData = type({ - active: nullable(array(ActivatedDetourData)), - draft: nullable(array(SimpleDetourData)), - past: nullable(array(SimpleDetourData)), + active: array(ActivatedDetourData), + draft: array(SimpleDetourData), + past: array(SimpleDetourData), }) export type GroupedDetoursData = Infer @@ -80,7 +71,7 @@ export type GroupedDetoursData = Infer export const groupedDetoursFromData = ( groupedDetours: GroupedDetoursData ): GroupedSimpleDetours => ({ - active: groupedDetours.active?.map(simpleDetourFromActivatedData), - draft: groupedDetours.draft?.map((detour) => simpleDetourFromData(detour)), - past: groupedDetours.past?.map((detour) => simpleDetourFromData(detour)), + active: groupedDetours.active.map(simpleDetourFromActivatedData), + draft: groupedDetours.draft.map((detour) => simpleDetourFromData(detour)), + past: groupedDetours.past.map((detour) => simpleDetourFromData(detour)), }) diff --git a/assets/tests/components/detours/__snapshots__/detourListPage.test.tsx.snap b/assets/tests/components/detours/__snapshots__/detourListPage.test.tsx.snap index 380ba141d..cdd30c94b 100644 --- a/assets/tests/components/detours/__snapshots__/detourListPage.test.tsx.snap +++ b/assets/tests/components/detours/__snapshots__/detourListPage.test.tsx.snap @@ -439,7 +439,7 @@ exports[`DetourListPage renders detour list page for dispatchers 1`] = ` >
{ estimatedDuration: "3 hours", }, ], - draft: undefined, + draft: [], past: [ { id: 10, @@ -123,7 +123,7 @@ describe("DetourListPage", () => { estimatedDuration: "Until end of service", }, ], - draft: undefined, + draft: [], past: [ { id: 10, @@ -162,6 +162,46 @@ describe("DetourListPage", () => { expect(baseElement).toMatchSnapshot() }) + test("renders empty tables when needed", async () => { + jest.mocked(fetchDetours).mockResolvedValue( + Ok({ + active: [ + { + id: 1, + route: "1", + viaVariant: "X", + direction: "Inbound", + name: "Headsign A", + intersection: "Street A & Avenue B", + updatedAt: 1724866392, + activatedAt: new Date(1724866392000), + estimatedDuration: "4 hours", + }, + ], + draft: [], + past: [ + { + id: 10, + route: "1", + viaVariant: "X", + direction: "Inbound", + name: "Headsign A", + intersection: "Street E & Avenue F", + updatedAt: 1724866392, + }, + ], + }) + ) + + render() + + await waitFor(() => + expect(screen.queryByText("No draft detours.")).toBeVisible() + ) + expect(screen.queryByText("No active detours.")).not.toBeInTheDocument() + expect(screen.queryByText("No closed detours.")).not.toBeInTheDocument() + }) + test("orders active detour list by activatedAt value", async () => { jest.mocked(getTestGroups).mockReturnValue([TestGroups.DetoursList]) diff --git a/assets/tests/factories/detourListFactory.ts b/assets/tests/factories/detourListFactory.ts index 75fd95dc0..b029f8815 100644 --- a/assets/tests/factories/detourListFactory.ts +++ b/assets/tests/factories/detourListFactory.ts @@ -18,7 +18,7 @@ export const detourListFactory = Factory.define(() => { }) ), ], - draft: undefined, + draft: [], past: [simpleDetourFactory.build({ name: "Headsign Z" })], } })