From 2a0031027322b05850436695547281443b02fa37 Mon Sep 17 00:00:00 2001 From: Till JS Date: Tue, 31 Mar 2026 17:31:35 +0200 Subject: [PATCH] fix(todo): use \$state.snapshot() for subtask toggle to avoid DataCloneError Svelte 5 \$state creates deep reactive Proxy objects. IndexedDB can't serialize Proxies via structured clone algorithm. Using \$state.snapshot() produces plain objects that IndexedDB can store. Co-Authored-By: Claude Sonnet 4.6 --- apps/todo/apps/web/src/lib/components/TaskItem.svelte | 3 ++- .../apps/web/src/lib/components/kanban/KanbanTaskCard.svelte | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/todo/apps/web/src/lib/components/TaskItem.svelte b/apps/todo/apps/web/src/lib/components/TaskItem.svelte index 03edac64f..208128768 100644 --- a/apps/todo/apps/web/src/lib/components/TaskItem.svelte +++ b/apps/todo/apps/web/src/lib/components/TaskItem.svelte @@ -209,7 +209,8 @@ function toggleSubtask(subtaskId: string) { if (!onSave) return; - const updated = (task.subtasks ?? []).map((s) => + const subtasks = $state.snapshot(task.subtasks) ?? []; + const updated = subtasks.map((s) => s.id === subtaskId ? { ...s, diff --git a/apps/todo/apps/web/src/lib/components/kanban/KanbanTaskCard.svelte b/apps/todo/apps/web/src/lib/components/kanban/KanbanTaskCard.svelte index 50fabe94b..0131de47f 100644 --- a/apps/todo/apps/web/src/lib/components/kanban/KanbanTaskCard.svelte +++ b/apps/todo/apps/web/src/lib/components/kanban/KanbanTaskCard.svelte @@ -153,7 +153,8 @@ function toggleSubtask(subtaskId: string) { if (!onSave) return; - const updated = (task.subtasks ?? []).map((s) => + const subtasks = $state.snapshot(task.subtasks) ?? []; + const updated = subtasks.map((s) => s.id === subtaskId ? { ...s,