diff --git a/config.js b/config.js index 44b42927..c231ef42 100644 --- a/config.js +++ b/config.js @@ -45,6 +45,27 @@ const config = { // // E.g. the 'bike' entry will add a "bike" profile for which we send a request with the specified 'details' parameter. You can even change the profile itself when you specify // bike: { profile: 'raw_bike', ... } + + // You can 'collapse' or group certain profiles to reduce the number of profiles in the panel. Instead they're listed in the settings but still a profile icon is shown. + // Note: the name of the group must be the default option for this group. + // profile_group_mapping: { + // car: { + // options: [ + // { profile: 'car' }, + // { profile: 'car_avoid_motorway' }, + // { profile: 'car_avoid_ferry' }, + // { profile: 'car_avoid_toll' } + // ] + // }, + // bike: { + // options: [ + // { profile: 'bike' }, + // { profile: 'mtb' }, + // { profile: 'racingbike' }, + // { profile: 'ecargobike' } + // ] + // } + // } } // this is needed for jest (with our current setup at least) diff --git a/src/App.tsx b/src/App.tsx index 1fdf6098..db30ba8d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -192,7 +192,7 @@ function LargeScreenLayout({ query, route, map, error, mapOptions, encodedValues drawAreas={drawAreas} /> )} - +
{!error.isDismissed && }
const profiles: object } diff --git a/src/map/findNextWayPoint.ts b/src/map/findNextWayPoint.ts index 3855e99f..8edfae35 100644 --- a/src/map/findNextWayPoint.ts +++ b/src/map/findNextWayPoint.ts @@ -1,5 +1,5 @@ import { Coordinate } from '@/stores/QueryStore' -import { calcDist } from '@/distUtils' +import { calcDist } from '@/utils' /** * Finds the way-point that follows the part of a route that is closest to a given location diff --git a/src/pathDetails/PathDetails.tsx b/src/pathDetails/PathDetails.tsx index b0e7c359..5529ca94 100644 --- a/src/pathDetails/PathDetails.tsx +++ b/src/pathDetails/PathDetails.tsx @@ -7,7 +7,7 @@ import Dispatcher from '@/stores/Dispatcher' import { PathDetailsElevationSelected, PathDetailsHover, PathDetailsRangeSelected } from '@/actions/Actions' import QueryStore, { Coordinate, QueryPointType } from '@/stores/QueryStore' import { Position } from 'geojson' -import { calcDist } from '@/distUtils' +import { calcDist } from '@/utils' import { tr } from '@/translation/Translation' import { SettingsContext } from '@/contexts/SettingsContext' diff --git a/src/sidebar/MobileSidebar.tsx b/src/sidebar/MobileSidebar.tsx index 390ac194..e212fa1a 100644 --- a/src/sidebar/MobileSidebar.tsx +++ b/src/sidebar/MobileSidebar.tsx @@ -74,7 +74,7 @@ export default function ({ query, route, error, encodedValues, drawAreas, map }: drawAreas={drawAreas} /> )} - + )} {!error.isDismissed && } diff --git a/src/sidebar/RoutingResults.tsx b/src/sidebar/RoutingResults.tsx index e370a9c5..8f47f51d 100644 --- a/src/sidebar/RoutingResults.tsx +++ b/src/sidebar/RoutingResults.tsx @@ -10,7 +10,7 @@ import Details from '@/sidebar/list.svg' import GPXDownload from '@/sidebar/file_download.svg' import Instructions from '@/sidebar/instructions/Instructions' import { LineString, Position } from 'geojson' -import { calcDist } from '@/distUtils' +import { calcDist } from '@/utils' import { useMediaQuery } from 'react-responsive' import { tr } from '@/translation/Translation' import { ApiImpl } from '@/api/Api' diff --git a/src/sidebar/SettingsBox.module.css b/src/sidebar/SettingsBox.module.css index 3f8faf26..ddedbe7a 100644 --- a/src/sidebar/SettingsBox.module.css +++ b/src/sidebar/SettingsBox.module.css @@ -26,6 +26,23 @@ align-items: center; } +.groupProfileOptionsHeader { + font-weight: bold; +} + +.groupProfileOptions div { + padding: 4px 20px; +} + +.groupProfileOptions label, +input { + cursor: pointer; +} + +.groupProfileOptions label { + margin-left: 10px; +} + .toggleButton { display: flex; align-items: center; @@ -73,7 +90,8 @@ .title, .infoLine, -.settingsTable { +.settingsTable, +.groupProfileOptionsHeader { font-size: 14px; color: gray; } diff --git a/src/sidebar/SettingsBox.tsx b/src/sidebar/SettingsBox.tsx index a4fa72a5..eb36ae57 100644 --- a/src/sidebar/SettingsBox.tsx +++ b/src/sidebar/SettingsBox.tsx @@ -1,18 +1,47 @@ -import { UpdateSettings } from '@/actions/Actions' +import { SetVehicleProfile, UpdateSettings } from '@/actions/Actions' import Dispatcher from '@/stores/Dispatcher' import styles from '@/sidebar/SettingsBox.module.css' import { tr } from '@/translation/Translation' import PlainButton from '@/PlainButton' import OnIcon from '@/sidebar/toggle_on.svg' import OffIcon from '@/sidebar/toggle_off.svg' -import { useContext, useState } from 'react' +import { useContext } from 'react' import { SettingsContext } from '@/contexts/SettingsContext' +import { RoutingProfile } from '@/api/graphhopper' +import * as config from 'config' +import { ProfileGroupMap } from '@/utils' -export default function SettingsBox() { +export default function SettingsBox({ profile }: { profile: RoutingProfile }) { const settings = useContext(SettingsContext) + function setProfile(n: string) { + Dispatcher.dispatch(new SetVehicleProfile({ name: profile.name === n ? 'car' : n })) + } + + const groupName = ProfileGroupMap.create(config.profile_group_mapping)[profile.name] + const group = config.profile_group_mapping[groupName] return (
+ {groupName && {tr(groupName + '_settings')}} + {groupName && ( +
+
+ {group.options.map(option => ( +
+ setProfile(option.profile)} + /> + +
+ ))} +
+
+ )}
{tr('settings')}
void }) { return ( -
- {}}> +
+
) diff --git a/src/sidebar/search/Search.module.css b/src/sidebar/search/Search.module.css index c1a9ba1c..06052702 100644 --- a/src/sidebar/search/Search.module.css +++ b/src/sidebar/search/Search.module.css @@ -49,12 +49,22 @@ grid-column: 1 / span 3; } -.addSearchBox, -.settingsButton { +.addSearchBox { font-size: 14px; color: gray; } +.settingsButton, +.settingsButton:hover { + font-size: 14px; + font-weight: bold; + color: rgba(39, 100, 200, 0.85); +} + +.settingsButton:hover { + color: rgb(35, 92, 185); +} + .lastSearchLine { display: flex; flex-direction: row; diff --git a/src/sidebar/search/Search.tsx b/src/sidebar/search/Search.tsx index 9b3b7037..ea877a9d 100644 --- a/src/sidebar/search/Search.tsx +++ b/src/sidebar/search/Search.tsx @@ -13,8 +13,9 @@ import AddressInput from '@/sidebar/search/AddressInput' import { MarkerComponent } from '@/map/Marker' import { tr } from '@/translation/Translation' import SettingsBox from '@/sidebar/SettingsBox' +import { RoutingProfile } from '@/api/graphhopper' -export default function Search({ points, map }: { points: QueryPoint[]; map: Map }) { +export default function Search({ points, profile, map }: { points: QueryPoint[]; profile: RoutingProfile; map: Map }) { const [showSettings, setShowSettings] = useState(false) const [showTargetIcons, setShowTargetIcons] = useState(true) const [moveStartIndex, onMoveStartSelect] = useState(-1) @@ -62,7 +63,7 @@ export default function Search({ points, map }: { points: QueryPoint[]; map: Map {showSettings ? tr('settings_close') : tr('settings')}
- {showSettings && } + {showSettings && }
) } diff --git a/src/sidebar/search/routingProfiles/RoutingProfiles.tsx b/src/sidebar/search/routingProfiles/RoutingProfiles.tsx index 5710b057..b2a170d2 100644 --- a/src/sidebar/search/routingProfiles/RoutingProfiles.tsx +++ b/src/sidebar/search/routingProfiles/RoutingProfiles.tsx @@ -1,13 +1,15 @@ import React, { useEffect, useState } from 'react' import styles from './RoutingProfiles.module.css' import Dispatcher from '@/stores/Dispatcher' -import { SetVehicleProfile } from '@/actions/Actions' +import { SetVehicleProfile, SetVehicleProfileGroup } from '@/actions/Actions' import { RoutingProfile } from '@/api/graphhopper' import PlainButton from '@/PlainButton' import Chevron from './chevron.svg' import { tr } from '@/translation/Translation' import CustomModelBoxSVG from '@/sidebar/open_custom_model.svg' import { icons } from '@/sidebar/search/routingProfiles/profileIcons' +import * as config from 'config' +import { ProfileGroupMap } from '@/utils' export default function ({ routingProfiles, @@ -80,6 +82,7 @@ export default function ({ if (!icons[p.name]) customProfiles[key] = [...(customProfiles[key] || []), p.name] }) + let profileToGroup = ProfileGroupMap.create(config.profile_group_mapping) return (
readonly queryPoints: QueryPoint[] readonly nextQueryPointId: number readonly currentRequest: CurrentRequest @@ -99,6 +101,7 @@ export default class QueryStore extends Store { return { profiles: [], + memorizedProfilePerGroup: {}, queryPoints: [ QueryStore.getEmptyPoint(0, QueryPointType.From), QueryStore.getEmptyPoint(1, QueryPointType.To), @@ -262,12 +265,28 @@ export default class QueryStore extends Store { }, true ) + } else if (action instanceof SetVehicleProfileGroup) { + let prevProfile = this.state.memorizedProfilePerGroup[action.group] + + // here we assume the name of the group can be used as default profile + if (!prevProfile) prevProfile = action.group + + const newState: QueryStoreState = { + ...state, + routingProfile: { ...this.state.routingProfile, name: prevProfile }, + } + return this.routeIfReady(newState, true) } else if (action instanceof SetVehicleProfile) { + const name = action.profile.name + const profileToGroup = ProfileGroupMap.create(config.profile_group_mapping) + const groupName = profileToGroup[name] const newState: QueryStoreState = { ...state, - routingProfile: action.profile, + routingProfile: { ...action.profile, name: name }, + // keep track of "selected option" like car_avoid_motorway for group 'car' and if we switch back to + // this group ('car') then we still want the profile car_avoid_motorway + memorizedProfilePerGroup: { ...state.memorizedProfilePerGroup, [groupName]: name }, } - return this.routeIfReady(newState, true) } else if (action instanceof SetCustomModel) { const newState = { diff --git a/src/translation/tr.json b/src/translation/tr.json index fea69c28..8e27c048 100644 --- a/src/translation/tr.json +++ b/src/translation/tr.json @@ -83,17 +83,31 @@ "privacy":"Privacy", "terms":"Terms", "bike":"Bike", -"racingbike":"Racing Bike", +"racingbike":"Road Bike", "mtb":"MTB", "car":"Car", -"foot":"Foot", -"hike":"Hike", +"foot":"Walking", +"hike":"Hiking", "small_truck":"Small Truck", "bus":"Bus", "truck":"Truck", "staticlink":"static link", "motorcycle":"Motorcycle", "scooter":"Scooter", +"car_settings":"Route options (Car)", +"car_settings_car":"Standard", +"car_settings_car_avoid_ferry":"Avoid Ferries", +"car_settings_car_avoid_motorway":"Avoid Motorways", +"car_settings_car_avoid_toll":"Avoid Tolls", +"truck_settings":"Route options (Truck)", +"truck_settings_truck":"Big Truck", +"truck_settings_small_truck":"Delivery Van", +"foot_settings":"Route options (Walking)", +"foot_settings_foot":"Standard", +"foot_settings_hike":"Hiking", +"racingbike_settings":"Route options (Road Bike)", +"racingbike_settings_racingbike":"Standard", +"racingbike_settings_ecargobike":"E-Cargo Bike", "back_to_map":"Back", "distance_unit":"Distances are in %1$s", "waiting_for_gps":"Waiting for the GPS signal...", @@ -278,6 +292,20 @@ "staticlink":"رابط ثابت", "motorcycle":"دراجة نارية", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -462,6 +490,20 @@ "staticlink":"enllaz estáticu", "motorcycle":"Motocicleta", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -646,6 +688,20 @@ "staticlink":"Daimi keçid", "motorcycle":"Motosiklet", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -830,6 +886,20 @@ "staticlink":"Постоянна препратка", "motorcycle":"Мотоциклет", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -1014,6 +1084,20 @@ "staticlink":"", "motorcycle":"", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -1198,6 +1282,20 @@ "staticlink":"Enllaç", "motorcycle":"Motocicleta", "scooter":"Scooter", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Enrera", "distance_unit":"Distancies són en %1$s", "waiting_for_gps":"Esperant senyal GPS ...", @@ -1382,6 +1480,20 @@ "staticlink":"statický odkaz", "motorcycle":"Motocykl", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Zpět", "distance_unit":"Vzdálenosti jsou uváděny v %1$s", "waiting_for_gps":"Čekání na signál GPS…", @@ -1566,6 +1678,20 @@ "staticlink":"statisk link", "motorcycle":"Motorcykel", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Tilbage", "distance_unit":"Distance er i %1$s", "waiting_for_gps":"Venter på GPS signal", @@ -1750,6 +1876,20 @@ "staticlink":"Link", "motorcycle":"Motorrad", "scooter":"Roller", +"car_settings":"Routenoptionen (Auto)", +"car_settings_car":"Standard", +"car_settings_car_avoid_ferry":"Fähren vermeiden", +"car_settings_car_avoid_motorway":"Autobahn vermeiden", +"car_settings_car_avoid_toll":"Maut vermeiden", +"truck_settings":"Routenoptionen (LKW)", +"truck_settings_truck":"Großer LKW", +"truck_settings_small_truck":"Lieferwagen", +"foot_settings":"Routenoptionen (zu Fuß)", +"foot_settings_foot":"Standard", +"foot_settings_hike":"Wandern", +"racingbike_settings":"Routenoptionen (Rennrad)", +"racingbike_settings_racingbike":"Rennrad", +"racingbike_settings_ecargobike":"E-Lastenrad", "back_to_map":"Zurück", "distance_unit":"Distanzen sind in %1$s", "waiting_for_gps":"Warten auf das GPS Signal...", @@ -1934,6 +2074,20 @@ "staticlink":"στατική διεύθυνση", "motorcycle":"Μοτοσυκλέτα", "scooter":"Σκούτερ", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Πίσω", "distance_unit":"Οι αποστάσεις είναι σε %1$s", "waiting_for_gps":"Αναμονή για σήμα GPS...", @@ -2118,6 +2272,20 @@ "staticlink":"konstanta ligilo", "motorcycle":"Motorciklo", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -2302,6 +2470,20 @@ "staticlink":"enlace estático", "motorcycle":"Motocicleta", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -2486,6 +2668,20 @@ "staticlink":"پیوند ثابت", "motorcycle":"موتورسیکلت", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -2670,6 +2866,20 @@ "staticlink":"static link", "motorcycle":"motorsiklo", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -2854,6 +3064,20 @@ "staticlink":"yhteys", "motorcycle":"Moottoripyörällä", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -3038,6 +3262,20 @@ "staticlink":"Lien", "motorcycle":"Moto", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Retour", "distance_unit":"Les distances sont en %1$s", "waiting_for_gps":"En attente du signal GPS...", @@ -3222,6 +3460,20 @@ "staticlink":"Lien", "motorcycle":"Moto", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -3406,6 +3658,20 @@ "staticlink":"Enlace", "motorcycle":"Motocicleta", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -3590,6 +3856,20 @@ "staticlink":"קישור קבוע", "motorcycle":"אופנוע", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"חזרה", "distance_unit":"מרחקים ב%1$s", "waiting_for_gps":"המתנה לאות GPS...", @@ -3774,6 +4054,20 @@ "staticlink":"statička poveznica", "motorcycle":"Motocikl", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -3958,6 +4252,20 @@ "staticlink":"link", "motorcycle":"motorske", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -4142,6 +4450,20 @@ "staticlink":"statikus hivatkozás", "motorcycle":"Motorkerékpár", "scooter":"Robogó", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Vissza", "distance_unit":"Távolság mértékegysége: %1$s", "waiting_for_gps":"Várakozás a GPS jelre...", @@ -4326,6 +4648,20 @@ "staticlink":"Jalur tetap", "motorcycle":"Motor", "scooter":"Vespa", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Kembali", "distance_unit":"Jarak dalam %1$s", "waiting_for_gps":"Menunggu sinyal GPS", @@ -4510,6 +4846,20 @@ "staticlink":"permalink", "motorcycle":"Moto", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Indietro", "distance_unit":"Le distanze sono in %1$s", "waiting_for_gps":"Aspettando il segnale GPS...", @@ -4694,6 +5044,20 @@ "staticlink":"パーマリンク", "motorcycle":"オートバイ", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -4878,6 +5242,20 @@ "staticlink":"정적 링크", "motorcycle":"모터사이클", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -5062,6 +5440,20 @@ "staticlink":"", "motorcycle":"мотоцикл", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Қайту", "distance_unit":"", "waiting_for_gps":"GPS сигналын күтіңіз...", @@ -5246,6 +5638,20 @@ "staticlink":"statinė nuoroda", "motorcycle":"Motociklas", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -5430,6 +5836,20 @@ "staticlink":"статик холбоос", "motorcycle":"Мотоцикл", "scooter":"Скутер", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Буцах", "distance_unit":"Зай %1$s байна", "waiting_for_gps":"GPS дохиог хүлээж байна...", @@ -5614,6 +6034,20 @@ "staticlink":"lenke", "motorcycle":"Motorsykkel", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Tilbake", "distance_unit":"Avstand måles i %1$s", "waiting_for_gps":"Venter på GPS-signal", @@ -5798,6 +6232,20 @@ "staticlink":"ईस्ट्यातिक लिंक", "motorcycle":"मोटरसाइकल", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -5982,6 +6430,20 @@ "staticlink":"statische link", "motorcycle":"motorfiets", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Terug", "distance_unit":"Afstanden zijn in %1$s", "waiting_for_gps":"Wacht op GPS signaal", @@ -6166,6 +6628,20 @@ "staticlink":"link", "motorcycle":"Motocykl", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Wróć", "distance_unit":"Odległości w %1$s", "waiting_for_gps":"Oczekiwanie na sygnał GPS...", @@ -6350,6 +6826,20 @@ "staticlink":"Link estático", "motorcycle":"Motocicleta", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -6534,6 +7024,20 @@ "staticlink":"Ligação permanente", "motorcycle":"Motocicleta", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -6718,6 +7222,20 @@ "staticlink":"link", "motorcycle":"Motocicletă", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -6902,6 +7420,20 @@ "staticlink":"Постоянная ссылка", "motorcycle":"Мотоцикл", "scooter":"Самокат", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Назад", "distance_unit":"Расстояния показаны в %1$s", "waiting_for_gps":"Ожидание сигнала GPS...", @@ -7086,6 +7618,20 @@ "staticlink":"nemenný odkaz", "motorcycle":"Motocykel", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Späť", "distance_unit":"Vzdialenosti sú v %1$s", "waiting_for_gps":"Čakám na GPS signál...", @@ -7270,6 +7816,20 @@ "staticlink":"Povezava", "motorcycle":"Motorno kolo", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -7454,6 +8014,20 @@ "staticlink":"statička veza", "motorcycle":"Motocikl", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -7638,6 +8212,20 @@ "staticlink":"direktlänk", "motorcycle":"Motorcykel", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Backa", "distance_unit":"Avstånden är i %1$s", "waiting_for_gps":"Väntar på GPS signal...", @@ -7822,6 +8410,20 @@ "staticlink":"kalıcı bağlantı", "motorcycle":"motosiklet", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"geri", "distance_unit":"Mesafe birimi %1$s", "waiting_for_gps":"GPS sinyali bekleniyor", @@ -8006,6 +8608,20 @@ "staticlink":"статичне посилання", "motorcycle":"Мотоцикл", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -8190,6 +8806,20 @@ "staticlink":"Doimiy havola", "motorcycle":"Mototsikl", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"Xaritaga qaytish", "distance_unit":"", "waiting_for_gps":"", @@ -8374,6 +9004,20 @@ "staticlink":"liên kết tĩnh", "motorcycle":"Mô tô", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", @@ -8558,6 +9202,20 @@ "staticlink":"永久链接", "motorcycle":"摩托车", "scooter":"滑板车", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"返回", "distance_unit":"距离单位:%1$s", "waiting_for_gps":"正在搜索 GPS 信号……", @@ -8742,6 +9400,20 @@ "staticlink":"鏈接", "motorcycle":"電單車", "scooter":"滑板車", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"返回", "distance_unit":"距離單位:%1$s", "waiting_for_gps":"正在搜索 GPS 信號……", @@ -8926,6 +9598,20 @@ "staticlink":"永久鏈結", "motorcycle":"摩托車", "scooter":"", +"car_settings":"", +"car_settings_car":"", +"car_settings_car_avoid_ferry":"", +"car_settings_car_avoid_motorway":"", +"car_settings_car_avoid_toll":"", +"truck_settings":"", +"truck_settings_truck":"", +"truck_settings_small_truck":"", +"foot_settings":"", +"foot_settings_foot":"", +"foot_settings_hike":"", +"racingbike_settings":"", +"racingbike_settings_racingbike":"", +"racingbike_settings_ecargobike":"", "back_to_map":"", "distance_unit":"", "waiting_for_gps":"", diff --git a/src/distUtils.ts b/src/utils.ts similarity index 66% rename from src/distUtils.ts rename to src/utils.ts index 3e8a8d3b..06619793 100644 --- a/src/distUtils.ts +++ b/src/utils.ts @@ -1,5 +1,19 @@ +import { ProfileGroup } from 'config' import { Coordinate } from '@/stores/QueryStore' +export class ProfileGroupMap { + public static create(map: Record): Record { + let res: Record = {} + if (map) + for (const [key, value] of Object.entries(map)) { + for (const option of value.options) { + res[option.profile] = key + } + } + return res + } +} + /** * Calculates the great-circle distance between two points on Earth given the latitudes and longitudes * assuming that Earth is a sphere with radius 6371km. The result is returned in meters. diff --git a/test/stores/QueryStore.test.ts b/test/stores/QueryStore.test.ts index 5410c08f..86334810 100644 --- a/test/stores/QueryStore.test.ts +++ b/test/stores/QueryStore.test.ts @@ -20,7 +20,7 @@ import { SetPoint, SetVehicleProfile, } from '@/actions/Actions' -import { POIAndQuery, POIQuery } from '@/pois/AddressParseResult' +import { POIQuery } from '@/pois/AddressParseResult' class ApiMock implements Api { private readonly callback: { (args: RoutingArgs): void } @@ -268,7 +268,10 @@ describe('QueryStore', () => { }) ) - expect(newState).toEqual({ ...state, profiles: [{ name: 'some-other-profile' }] }) + expect(newState).toEqual({ + ...state, + profiles: [{ name: 'some-other-profile' }], + }) }) it('should use the first profile received from info endpoint', () => { const expectedProfile = {