From dba05177b5b531d60503b3902e5fdab4c9382967 Mon Sep 17 00:00:00 2001 From: Dustin Carlino Date: Fri, 31 May 2024 16:46:14 +0100 Subject: [PATCH] Preserve travel mode and start time through modes --- web/src/DebugMode.svelte | 8 +++----- web/src/IsochroneMode.svelte | 25 ++++++++++++----------- web/src/RouteMode.svelte | 39 +++++++++++++++++++++++------------- web/src/stores.ts | 5 +++++ 4 files changed, 46 insertions(+), 31 deletions(-) diff --git a/web/src/DebugMode.svelte b/web/src/DebugMode.svelte index a9d94fb..d459acf 100644 --- a/web/src/DebugMode.svelte +++ b/web/src/DebugMode.svelte @@ -10,12 +10,10 @@ import { SplitComponent } from "svelte-utils/top_bar_layout"; import { PropertiesTable, notNull } from "svelte-utils"; import { Popup } from "svelte-utils/map"; - import { backend, type TravelMode, filterForMode } from "./stores"; + import { backend, travelMode, filterForMode } from "./stores"; import { onMount } from "svelte"; import type { FeatureCollection } from "geojson"; - let travelMode: TravelMode = "foot"; - let gj: FeatureCollection | null = null; onMount(async () => { gj = await $backend!.renderDebug(); @@ -28,7 +26,7 @@

Debug mode

Hover to see a segment's properties, and click to open OSM

- + {#if gj} @@ -43,7 +41,7 @@ "line-width": hoverStateFilter(5, 7), "line-color": "black", }} - filter={filterForMode(travelMode)} + filter={filterForMode($travelMode)} manageHoverState on:click={(e) => window.open(notNull(e.detail.features[0].properties).way, "_blank")} diff --git a/web/src/IsochroneMode.svelte b/web/src/IsochroneMode.svelte index 0ff8a0b..edc1e84 100644 --- a/web/src/IsochroneMode.svelte +++ b/web/src/IsochroneMode.svelte @@ -5,14 +5,11 @@ import type { FeatureCollection } from "geojson"; import { GeoJSON, FillLayer, LineLayer, Marker } from "svelte-maplibre"; import { SplitComponent } from "svelte-utils/top_bar_layout"; - import { backend, type TravelMode } from "./stores"; + import { backend, travelMode, type TravelMode, startTime } from "./stores"; import { SequentialLegend } from "svelte-utils"; import { Popup, makeColorRamp, isLine, isPolygon } from "svelte-utils/map"; import { onMount } from "svelte"; - let travelMode: TravelMode = "foot"; - let startTime = "07:00"; - let start: { lng: number; lat: number } | null = null; onMount(async () => { // TODO Maybe need to do this when the file changes @@ -40,9 +37,9 @@ try { isochroneGj = await $backend!.isochrone({ start, - mode: travelMode, + mode: $travelMode, contours, - startTime, + startTime: $startTime, }); err = ""; } catch (err: any) { @@ -51,7 +48,7 @@ } } } - $: updateIsochrone(start, travelMode, contours, startTime); + $: updateIsochrone(start, $travelMode, contours, $startTime); async function updateRoute( x: { lng: number; lat: number } | null, @@ -63,10 +60,10 @@ routeGj = await $backend!.route({ start, end: hoveredAmenity.geometry.coordinates, - mode: travelMode, + mode: $travelMode, debugSearch: false, useHeuristic: false, - startTime, + startTime: $startTime, }); err = ""; } catch (err: any) { @@ -77,7 +74,7 @@ routeGj = null; } } - $: updateRoute(start, hoveredAmenity, startTime); + $: updateRoute(start, hoveredAmenity, $startTime); function lerp(pct: number, a: number, b: number): number { return a + pct * (b - a); @@ -97,11 +94,15 @@ in seconds.

- + diff --git a/web/src/RouteMode.svelte b/web/src/RouteMode.svelte index 0fb4e81..59608ef 100644 --- a/web/src/RouteMode.svelte +++ b/web/src/RouteMode.svelte @@ -9,16 +9,19 @@ hoverStateFilter, } from "svelte-maplibre"; import { SplitComponent } from "svelte-utils/top_bar_layout"; - import { mode, backend, type TravelMode } from "./stores"; + import { + mode, + backend, + travelMode, + type TravelMode, + startTime, + useHeuristic, + } from "./stores"; import { Popup, constructMatchExpression } from "svelte-utils/map"; import { notNull, PropertiesTable } from "svelte-utils"; import { onMount } from "svelte"; import type { FeatureCollection } from "geojson"; - let travelMode: TravelMode = "foot"; - let useHeuristic = true; - let startTime = "07:00"; - let start: { lng: number; lat: number } | null = null; let end: { lng: number; lat: number } | null = null; onMount(async () => { @@ -51,8 +54,8 @@ end: [end.lng, end.lat], mode, debugSearch: false, - useHeuristic, - startTime, + useHeuristic: $useHeuristic, + startTime: $startTime, }); err = ""; } catch (error: any) { @@ -61,7 +64,7 @@ } } } - $: updateRoute(start, end, travelMode, useHeuristic, startTime); + $: updateRoute(start, end, $travelMode, $useHeuristic, $startTime); function onRightClick(e: CustomEvent) { // Move the first marker, for convenience @@ -77,10 +80,10 @@ let debugGj = await $backend!.route({ start: start!, end: [end!.lng, end!.lat], - mode: travelMode, + mode: $travelMode, debugSearch: true, - useHeuristic, - startTime, + useHeuristic: $useHeuristic, + startTime: $startTime, }); $mode = { kind: "debug-route", @@ -100,16 +103,24 @@

Route mode

- +

diff --git a/web/src/stores.ts b/web/src/stores.ts index 8bcb7f9..59bd0e3 100644 --- a/web/src/stores.ts +++ b/web/src/stores.ts @@ -31,6 +31,11 @@ export function filterForMode(travelMode: TravelMode): ExpressionSpecification { return ["!=", ["get", `access_${travelMode}`], "None"]; } +export let travelMode: Writable = writable("foot"); +export let startTime: Writable = writable("07:00"); +// Only used in RouteMode +export let useHeuristic = writable(true); + // TODO Does this need to be a store? export let backend: Writable | null> = writable(null); // Indicates the backend is ready and a file is loaded