|
1 | | -import { NewTransportModeGroup } from '@atb/modules/transport-mode'; |
2 | 1 | import { |
3 | 2 | TransportMode, |
4 | 3 | TransportModes, |
5 | 4 | TransportSubmode, |
6 | 5 | } from '@atb/modules/graphql-types/journeyplanner-types_v3.generated.ts'; |
7 | 6 | import { enumFromString } from '@atb/utils/enum-from-string.ts'; |
8 | 7 | import { isDefined } from '@atb/utils/presence.ts'; |
| 8 | +import { getTransportModeFilter } from '@atb/modules/firebase/transport-mode-filter.ts'; |
| 9 | +import { uniq } from 'lodash'; |
9 | 10 |
|
10 | 11 | /** |
11 | 12 | * Maps from TransportModeType in config-specs (used in the UI) |
12 | 13 | * to JourneyPlanner v3 TransportModes (used in the GraphQL call) |
13 | 14 | * |
14 | 15 | * These are almost the same, except for the "unknown" value |
15 | 16 | */ |
16 | | -export function mapToJourneyPlannerTransportModes( |
17 | | - groups?: NewTransportModeGroup[], |
18 | | -): TransportModes[] { |
19 | | - return ( |
20 | | - groups?.map((transportModeGroup) => ({ |
21 | | - transportMode: enumFromString( |
22 | | - TransportMode, |
23 | | - transportModeGroup.transportMode, |
24 | | - ), |
25 | | - transportSubModes: |
26 | | - transportModeGroup.transportSubModes |
27 | | - ?.map((subMode) => enumFromString(TransportSubmode, subMode)) |
28 | | - .filter(isDefined) ?? [], |
29 | | - })) ?? [] |
| 17 | +export async function mapToJourneyPlannerTransportModes( |
| 18 | + filterOptions?: string[] | null, |
| 19 | +): Promise<TransportModes[]> { |
| 20 | + const transportModeFilters = await getTransportModeFilter(); |
| 21 | + if (!transportModeFilters) return []; |
| 22 | + |
| 23 | + const filters = transportModeFilters.filter( |
| 24 | + (option) => !filterOptions || filterOptions.includes(option.id), |
30 | 25 | ); |
| 26 | + |
| 27 | + const transportModes = |
| 28 | + filters |
| 29 | + .flatMap((option) => option.modes) |
| 30 | + .map((transportModeGroup) => ({ |
| 31 | + transportMode: enumFromString( |
| 32 | + TransportMode, |
| 33 | + transportModeGroup.transportMode, |
| 34 | + ), |
| 35 | + transportSubModes: transportModeGroup.transportSubModes |
| 36 | + ?.map((subMode) => enumFromString(TransportSubmode, subMode)) |
| 37 | + .filter(isDefined), |
| 38 | + })) ?? []; |
| 39 | + |
| 40 | + return uniq(transportModes); |
31 | 41 | } |
0 commit comments