diff --git a/src/lib/stores.svelte.ts b/src/lib/stores.svelte.ts index 1e3cb5c..72c2cc9 100644 --- a/src/lib/stores.svelte.ts +++ b/src/lib/stores.svelte.ts @@ -3,29 +3,27 @@ const browser_exists = (typeof window !== "undefined") && (typeof (document) !== const storage = browser_exists ? localStorage : null; // Generalized Local Storage -function persisted(key: string, default_value: T) { +export function persisted(key: string, default_value: T) { let value : T = $state(default_value); const initial_local = storage?.getItem(key); if (initial_local) { - try { value = JSON.parse(initial_local).value as T; - if (!value) { update(default_value); } - } - catch (e) { - update(default_value); - } + if (!value) { update(); } + } + else { + storage?.setItem(key, JSON.stringify(default_value)); } - function update(new_value : T) { + function update() { if (browser_exists) { - value = new_value; storage?.setItem(key, JSON.stringify({ value })); } } return { get value() { return value; }, + set value(new_value) { value = new_value; update(); }, update } } @@ -38,12 +36,13 @@ export type Task = { id: string; description: string; is_completed: boolean; + list_id: string; } export type List = { id: string; title: string; - tasks: Task[] + tasks: Task[]; } -export const todo_list = persisted("local_todo_list", []); +export const local_lists = persisted("local_lists", [{ id: crypto.randomUUID(), title: "", tasks: [] }]); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 9443663..eb717de 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -42,9 +42,6 @@ "nord", "sunset", ]; - - let theme_input = $state(color_theme.value); - $effect(() => color_theme.update(theme_input)); @@ -74,7 +71,7 @@ diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index af7c3a1..43fad26 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,44 +1,44 @@
    - {#each todo_list.value as task : Task} + {#each current_list.tasks as task : Task}
  • Add +
    + + + + +