From 35a7898312e0d5b3c5ab740ff7e356b049e95ddd Mon Sep 17 00:00:00 2001 From: josedario87 Date: Sat, 18 Oct 2025 03:41:23 -0600 Subject: [PATCH] =?UTF-8?q?Fix:=20Clonar=20sesi=C3=B3n=20al=20guardar=20en?= =?UTF-8?q?=20IndexedDB=20para=20eliminar=20proxies=20de=20Vue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Agregar clonación en saveSession() y updateSession() - Mantener mutaciones directas en el estado reactivo - Resolver error DataCloneError al guardar objetos reactivos en IndexedDB --- nuxt4/app/composables/useIndexedDB.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/nuxt4/app/composables/useIndexedDB.ts b/nuxt4/app/composables/useIndexedDB.ts index b26c034..4d75bfa 100644 --- a/nuxt4/app/composables/useIndexedDB.ts +++ b/nuxt4/app/composables/useIndexedDB.ts @@ -49,6 +49,10 @@ function openDatabase(): Promise { */ async function saveSession(sesion: SesionCatacion): Promise { try { + // Clonar la sesión para eliminar los proxies reactivos de Vue + // antes de guardar en IndexedDB + const sesionClonada = JSON.parse(JSON.stringify(sesion)) as SesionCatacion + const db = await openDatabase() const transaction = db.transaction([STORE_NAME], 'readwrite') const objectStore = transaction.objectStore(STORE_NAME) @@ -62,7 +66,7 @@ async function saveSession(sesion: SesionCatacion): Promise { // Guardar la nueva sesión await new Promise((resolve, reject) => { - const addRequest = objectStore.add(sesion) + const addRequest = objectStore.add(sesionClonada) addRequest.onsuccess = () => resolve() addRequest.onerror = () => reject(new Error('Error al guardar la sesión')) }) @@ -215,12 +219,16 @@ async function updateSession(sesion: SesionCatacion): Promise { // Actualizar timestamp de modificación sesion.modificadoEn = Date.now() + // Clonar la sesión para eliminar los proxies reactivos de Vue + // antes de guardar en IndexedDB + const sesionClonada = JSON.parse(JSON.stringify(sesion)) as SesionCatacion + const db = await openDatabase() const transaction = db.transaction([STORE_NAME], 'readwrite') const objectStore = transaction.objectStore(STORE_NAME) await new Promise((resolve, reject) => { - const putRequest = objectStore.put(sesion) + const putRequest = objectStore.put(sesionClonada) putRequest.onsuccess = () => resolve() putRequest.onerror = () => reject(new Error('Error al actualizar la sesión')) })