diff --git a/src/lib/components/lnv/FullscreenMap.svelte b/src/lib/components/lnv/FullscreenMap.svelte index 494013d..afc7a7e 100644 --- a/src/lib/components/lnv/FullscreenMap.svelte +++ b/src/lib/components/lnv/FullscreenMap.svelte @@ -8,7 +8,6 @@ routing, } from "$lib/services/navigation/routing.svelte"; import { location } from "./location.svelte"; - import { saved } from "$lib/saved.svelte"; import RoutingLayers from "$lib/services/navigation/RoutingLayers.svelte"; import { getPMTilesURL, @@ -20,6 +19,7 @@ import HazardMarker from "./HazardMarker.svelte"; import { hazards } from "./hazards.svelte"; import RequiresCapability from "./RequiresCapability.svelte"; + import MapLocationMarkers from "./MapLocationMarkers.svelte"; onMount(() => { window.addEventListener("resize", map.updateMapPadding); @@ -28,9 +28,6 @@ let locationDot: HTMLDivElement | undefined = $state(); let locationAccuracyCircle: HTMLDivElement | undefined = $state(); - let homeMarker: HTMLImageElement | undefined = $state(); - let workMarker: HTMLImageElement | undefined = $state(); - let schoolMarker: HTMLImageElement | undefined = $state(); const DEBUG_POINTS = false; // Set to true to show debug points on the map @@ -137,51 +134,7 @@ /> {/if} - {#if saved.home} - 9 ? "/img/saved/home.png" : "/img/saved/small.png"} - alt="Home Marker" - bind:this={homeMarker} - style="width: 32px;" - /> - - {/if} - {#if saved.school} - 9 ? "/img/saved/school.png" : "/img/saved/small.png"} - alt="School Marker" - bind:this={schoolMarker} - style="width: 32px;" - /> - - {/if} - {#if saved.work} - 9 ? "/img/saved/work.png" : "/img/saved/small.png"} - alt="Work Marker" - bind:this={workMarker} - style="width: 32px;" - /> - - {/if} + {#each hazards as hazard (hazard.latitude + "-" + hazard.longitude)} diff --git a/src/lib/components/lnv/MapLocationMarker.svelte b/src/lib/components/lnv/MapLocationMarker.svelte new file mode 100644 index 0000000..bef543e --- /dev/null +++ b/src/lib/components/lnv/MapLocationMarker.svelte @@ -0,0 +1,22 @@ + + 9 ? `/img/saved/${MAP_ICONS[store.icon ?? "small.png"]}` : "/img/saved/small.png"} + alt="Work Marker" + bind:this={marker} + style="width: 32px;" +/> + \ No newline at end of file diff --git a/src/lib/components/lnv/MapLocationMarkers.svelte b/src/lib/components/lnv/MapLocationMarkers.svelte new file mode 100644 index 0000000..a9c5879 --- /dev/null +++ b/src/lib/components/lnv/MapLocationMarkers.svelte @@ -0,0 +1,11 @@ + + +{#each locations.current as location (location.data.lat + "-" + location.data.lng)} + +{/each} \ No newline at end of file diff --git a/src/lib/components/lnv/main/SavedLocations.svelte b/src/lib/components/lnv/main/SavedLocations.svelte new file mode 100644 index 0000000..bec6d20 --- /dev/null +++ b/src/lib/components/lnv/main/SavedLocations.svelte @@ -0,0 +1,57 @@ + +
+ {#each locations.current as location (location.data.lat + "-" + location.data.lng)} + + {/each} +
+ + \ No newline at end of file diff --git a/src/lib/components/lnv/sidebar/InfoSidebar.svelte b/src/lib/components/lnv/sidebar/InfoSidebar.svelte index 460f630..c2a3c4f 100644 --- a/src/lib/components/lnv/sidebar/InfoSidebar.svelte +++ b/src/lib/components/lnv/sidebar/InfoSidebar.svelte @@ -22,12 +22,12 @@ import Reviews from "../info/Reviews.svelte"; import MapAi from "../info/MapAI.svelte"; import RequiresCapability from "../RequiresCapability.svelte"; - import { saved, saveLocations } from "$lib/saved.svelte"; import { getDeveloperToggle } from "./settings/developer.svelte"; import InternetAccess from "../info/InternetAccess.svelte"; import RestaurantInfo from "../info/RestaurantInfo.svelte"; import { m } from "$lang/messages"; import { onMount } from "svelte"; + import { updateStore } from "$lib/services/stores.svelte"; // let { feature }: { feature: Feature } = $props(); @@ -185,12 +185,12 @@ - - - + @@ -170,13 +83,3 @@
- - diff --git a/src/lib/saved.svelte.ts b/src/lib/saved.svelte.ts index 8fccce3..91397e7 100644 --- a/src/lib/saved.svelte.ts +++ b/src/lib/saved.svelte.ts @@ -1,13 +1,24 @@ +import type { Component } from "svelte"; import { reverseGeocode } from "./services/Search"; +import { BriefcaseIcon, HomeIcon, MapPinIcon, SchoolIcon, type IconProps } from "@lucide/svelte"; +/** + * @deprecated Use stores instead. + */ export const saved: Record = $state( JSON.parse(localStorage.getItem("saved") ?? "{}"), ); +/** + * @deprecated Use stores instead. + */ export function saveLocations() { localStorage.setItem("saved", JSON.stringify(saved)); } +/** + * @deprecated Use stores instead. + */ export async function geocode(name: string) { const loc = saved[name]; if (!loc) return; @@ -18,3 +29,23 @@ export async function geocode(name: string) { const feature = geocode[0]; return `${feature.properties.street}${feature.properties.housenumber ? " " + feature.properties.housenumber : ""}, ${feature.properties.city}`; } + +export const ICONS: Record> = { + home: HomeIcon, + work: BriefcaseIcon, + school: SchoolIcon, + pin: MapPinIcon +}; + +export const MAP_ICONS: Record = { + home: "home.png", + school: "school.png", + work: "work.png" +}; // TODO: add generic pin icon + +export interface Location { + lat: number; + lng: number; + name: string; + icon?: string; +}