diff --git a/src/lib/components/lnv/main/SavedRoutes.svelte b/src/lib/components/lnv/main/SavedRoutes.svelte
new file mode 100644
index 0000000..aebec74
--- /dev/null
+++ b/src/lib/components/lnv/main/SavedRoutes.svelte
@@ -0,0 +1,25 @@
+
+
+{#if saved.current.length != 0}
+
+
+ Saved Routes
+
+
+
+ {#each saved.current as save, _index (save.name)}
+ {
+ view.switch("trip", { route: save.data });
+ }}>{save.data.name}
+ {/each}
+
+
+{/if}
\ No newline at end of file
diff --git a/src/lib/components/lnv/sidebar/MainSidebar.svelte b/src/lib/components/lnv/sidebar/MainSidebar.svelte
index 99ce5ee..675cc28 100644
--- a/src/lib/components/lnv/sidebar/MainSidebar.svelte
+++ b/src/lib/components/lnv/sidebar/MainSidebar.svelte
@@ -16,9 +16,9 @@
import RequiresCapability from "../RequiresCapability.svelte";
import { saved } from "$lib/saved.svelte";
import { m } from "$lang/messages";
- import { getSaved } from "$lib/services/lnv";
import { view } from "../view.svelte";
import * as Card from "$lib/components/ui/card";
+ import SavedRoutes from "../main/SavedRoutes.svelte";
{/if}
-
- {#await getSaved() then saved}
- {#if saved.length != 0}
-
-
- Saved Routes
-
-
-
- {#each saved as save, _index (save.name)}
- {
- view.switch("trip", { route: JSON.parse(save.data) });
- }}>{save.name}
- {/each}
-
-
- {/if}
- {/await}
+
+
diff --git a/src/lib/components/lnv/sidebar/TripSidebar.svelte b/src/lib/components/lnv/sidebar/TripSidebar.svelte
index 880e580..1188ad2 100644
--- a/src/lib/components/lnv/sidebar/TripSidebar.svelte
+++ b/src/lib/components/lnv/sidebar/TripSidebar.svelte
@@ -10,20 +10,28 @@
import { RouteIcon, SaveIcon, SendIcon } from "@lucide/svelte";
import { map } from "../map.svelte";
import { m } from "$lang/messages";
- import { deleteSaved, isSaved, putSaved } from "$lib/services/lnv";
- import { view } from "../view.svelte";
import RequiresCapability from "../RequiresCapability.svelte";
+ import { hasStore, updateStore } from "$lib/services/stores.svelte";
- let {
+ const {
route,
}: {
route: Trip;
} = $props();
- onMount(() => {
+ onMount(async () => {
removeAllRoutes();
drawRoute(route);
+
+ if(route) {
+ isSaved = await hasStore({
+ name: route.locations.map((l) => l.lat + "-" + l.lon).join(";"),
+ type: "route",
+ });
+ }
});
+
+ let isSaved = $state(false);
{m["sidebar.trip.start"]()}
-
- {#await isSaved($state.snapshot(route)) then saved}
- {
- if (saved) {
- await deleteSaved(saved);
- view.back();
- } else {
- const name = prompt("Trip name?");
- if (!name) return;
- await putSaved(name, route);
- }
- }}
- >
-
- {saved ? m.unsave() : m["sidebar.trip.save"]()}
-
- {/await}
+
+ {
+ if (isSaved) {
+ await updateStore({
+ name: route.locations.map(l => l.lat + "-" + l.lon).join(";"),
+ type: "route"
+ }, null);
+ isSaved = false;
+ // view.back();
+ } else {
+ const name = prompt("Trip name?");
+ if (!name) return;
+ await updateStore({
+ name: route.locations.map(l => l.lat + "-" + l.lon).join(";"),
+ type: "route"
+ }, {
+ ...route,
+ name
+ })
+ isSaved = true;
+ }
+ }}
+ >
+
+ {isSaved ? m.unsave() : m["sidebar.trip.save"]()}
+
diff --git a/src/lib/services/stores.svelte.ts b/src/lib/services/stores.svelte.ts
index 031d0c9..db7852e 100644
--- a/src/lib/services/stores.svelte.ts
+++ b/src/lib/services/stores.svelte.ts
@@ -159,7 +159,13 @@ export async function updateStore(info: StoreInfo, data: object | null) {
info.type,
]);
if (!store) {
- if (data === null) return;
+ if (data === null) {
+ console.warn(
+ "[STORES] [updateStore] Tried to delete non-existing store",
+ info,
+ );
+ return;
+ }
return await createStore(info, data);
}
// Update the store data
@@ -176,6 +182,14 @@ export async function updateStore(info: StoreInfo, data: object | null) {
return store;
}
+export async function hasStore(info: StoreInfo) {
+ const store = await db.getFromIndex("stores", "by-name-and-type", [
+ info.name,
+ info.type,
+ ]);
+ return store !== undefined;
+}
+
// export async function store(info: StoreInfo) {
// const store = await db.getFromIndex("stores", "by-name-and-type", [info.name, info.type]);
// if (!store) {