1+ import without from 'lodash/without' ;
12import { FC } from 'react' ;
23import { useTranslation } from 'react-i18next' ;
3- import { RouteTypeOfLineEnum } from '../../../generated/graphql' ;
4+ import {
5+ ReusableComponentsVehicleModeEnum ,
6+ RouteTypeOfLineEnum ,
7+ } from '../../../generated/graphql' ;
48import { mapLineTypeToUiName } from '../../../i18n/uiNameMappings' ;
59import { FormInputProps } from '../../../uiComponents' ;
610import { AllOptionEnum } from '../../../utils' ;
711import { EnumDropdown } from '../common' ;
812
13+ type LineTypesByVehicleMode = Record <
14+ ReusableComponentsVehicleModeEnum ,
15+ ReadonlyArray < RouteTypeOfLineEnum >
16+ > ;
17+
18+ export const lineTypesByVehicleMode : Readonly < LineTypesByVehicleMode > = {
19+ [ ReusableComponentsVehicleModeEnum . Bus ] : [
20+ RouteTypeOfLineEnum . ExpressBusService ,
21+ RouteTypeOfLineEnum . DemandAndResponseBusService ,
22+ RouteTypeOfLineEnum . RegionalBusService ,
23+ RouteTypeOfLineEnum . StoppingBusService ,
24+ ] ,
25+
26+ [ ReusableComponentsVehicleModeEnum . Ferry ] : [ RouteTypeOfLineEnum . FerryService ] ,
27+
28+ [ ReusableComponentsVehicleModeEnum . Train ] : [
29+ RouteTypeOfLineEnum . RegionalRailService ,
30+ RouteTypeOfLineEnum . SuburbanRailway ,
31+ ] ,
32+
33+ [ ReusableComponentsVehicleModeEnum . Tram ] : [
34+ RouteTypeOfLineEnum . CityTramService ,
35+ RouteTypeOfLineEnum . RegionalTramService ,
36+ ] ,
37+
38+ [ ReusableComponentsVehicleModeEnum . Metro ] : [ RouteTypeOfLineEnum . MetroService ] ,
39+ } ;
40+
41+ const allRouteTypes : ReadonlyArray < RouteTypeOfLineEnum > =
42+ Object . values ( RouteTypeOfLineEnum ) ;
43+ const disabledRouteTypesByVehicleMode : Readonly < LineTypesByVehicleMode > =
44+ Object . values ( ReusableComponentsVehicleModeEnum ) . reduce (
45+ ( disabled , vehicleMode ) => ( {
46+ ...disabled ,
47+ [ vehicleMode ] : without (
48+ allRouteTypes ,
49+ ...lineTypesByVehicleMode [ vehicleMode ] ,
50+ ) ,
51+ } ) ,
52+ { } as Record <
53+ ReusableComponentsVehicleModeEnum ,
54+ ReadonlyArray < RouteTypeOfLineEnum >
55+ > ,
56+ ) ;
57+
958type LineTypeDropdownProps = FormInputProps & {
1059 readonly id ?: string ;
1160 readonly testId ?: string ;
1261 readonly includeAllOption ?: boolean ;
62+ readonly vehicleMode ?: ReusableComponentsVehicleModeEnum ;
1363} ;
1464
1565export const LineTypeDropdown : FC < LineTypeDropdownProps > = ( {
1666 id,
1767 testId,
1868 includeAllOption,
69+ vehicleMode,
1970 ...formInputProps
2071} ) => {
2172 const { t } = useTranslation ( ) ;
@@ -28,6 +79,9 @@ export const LineTypeDropdown: FC<LineTypeDropdownProps> = ({
2879 placeholder = { t ( ( $ ) => $ . lines . chooseTypeOfLine ) }
2980 uiNameMapper = { ( value ) => mapLineTypeToUiName ( t , value ) }
3081 includeAllOption = { ! ! includeAllOption }
82+ disabledOptions = {
83+ vehicleMode && disabledRouteTypesByVehicleMode [ vehicleMode ]
84+ }
3185 // eslint-disable-next-line react/jsx-props-no-spreading
3286 { ...formInputProps }
3387 />
0 commit comments