@@ -73,6 +73,17 @@ const { randId } = coreUtils.storage
73
73
74
74
const LIGHT_GRAY = '666666'
75
75
76
+ const VALID_COMBOS = [
77
+ [ 'WALK' ] ,
78
+ [ 'WALK' , 'PERSONAL' ] ,
79
+ [ 'WALK' , 'TRANSIT' , 'SHARED' ] ,
80
+ [ 'WALK' , 'SHARED' ] ,
81
+ [ 'WALK' , 'TRANSIT' ] ,
82
+ [ 'WALK' , 'TRANSIT' , 'PERSONAL' ] ,
83
+ [ 'WALK' , 'TRANSIT' , 'CAR' ] ,
84
+ [ 'CAR' ]
85
+ ]
86
+
76
87
function formatRecentPlace ( place ) {
77
88
return convertToPlace ( {
78
89
...place ,
@@ -982,6 +993,7 @@ export function routingQuery(searchId = null, updateSearchInReducer) {
982
993
{ }
983
994
984
995
const strictModes = ! ! config ?. itinerary ?. strictItineraryFiltering
996
+ const strictValidCombos = ! ! config ?. itinerary ?. strictValidCombos
985
997
986
998
// Filter mode definitions based on active mode keys
987
999
const activeModeButtons = config . modes ?. modeButtons . filter ( ( mb ) =>
@@ -1114,6 +1126,22 @@ export function routingQuery(searchId = null, updateSearchInReducer) {
1114
1126
activeModeStrings . includes ( SIMPLIFICATIONS [ leg . mode ] )
1115
1127
)
1116
1128
)
1129
+ // If "strictValidCombos" is enabled, filter out itineraries that do not match our list of valid mode combinations
1130
+ // (e.g. "WALK" + "DRIVE")
1131
+ // TODO: Remove this and VALID_COMBOS once we switch to planConnection API
1132
+ if ( strictValidCombos ) {
1133
+ filteredItineraries = filteredItineraries . filter ( ( itin ) => {
1134
+ const modeCombo = Array . from (
1135
+ new Set ( itin . legs . map ( ( leg ) => SIMPLIFICATIONS [ leg . mode ] ) )
1136
+ )
1137
+ return ! ! VALID_COMBOS . find (
1138
+ ( vc ) =>
1139
+ modeCombo . every ( ( m ) => vc . includes ( m ) ) &&
1140
+ vc . every ( ( m ) => modeCombo . includes ( m ) )
1141
+ )
1142
+ } )
1143
+ }
1144
+
1117
1145
// ... Otherwise return all itineraries.
1118
1146
}
1119
1147
0 commit comments