Fix: Clonar sesión al guardar en IndexedDB para eliminar proxies de Vue
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s

- Agregar clonación en saveSession() y updateSession()
- Mantener mutaciones directas en el estado reactivo
- Resolver error DataCloneError al guardar objetos reactivos en IndexedDB
This commit is contained in:
2025-10-18 03:41:23 -06:00
parent f17ff66613
commit 35a7898312

View File

@@ -49,6 +49,10 @@ function openDatabase(): Promise<IDBDatabase> {
*/ */
async function saveSession(sesion: SesionCatacion): Promise<void> { async function saveSession(sesion: SesionCatacion): Promise<void> {
try { 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 db = await openDatabase()
const transaction = db.transaction([STORE_NAME], 'readwrite') const transaction = db.transaction([STORE_NAME], 'readwrite')
const objectStore = transaction.objectStore(STORE_NAME) const objectStore = transaction.objectStore(STORE_NAME)
@@ -62,7 +66,7 @@ async function saveSession(sesion: SesionCatacion): Promise<void> {
// Guardar la nueva sesión // Guardar la nueva sesión
await new Promise<void>((resolve, reject) => { await new Promise<void>((resolve, reject) => {
const addRequest = objectStore.add(sesion) const addRequest = objectStore.add(sesionClonada)
addRequest.onsuccess = () => resolve() addRequest.onsuccess = () => resolve()
addRequest.onerror = () => reject(new Error('Error al guardar la sesión')) addRequest.onerror = () => reject(new Error('Error al guardar la sesión'))
}) })
@@ -215,12 +219,16 @@ async function updateSession(sesion: SesionCatacion): Promise<void> {
// Actualizar timestamp de modificación // Actualizar timestamp de modificación
sesion.modificadoEn = Date.now() 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 db = await openDatabase()
const transaction = db.transaction([STORE_NAME], 'readwrite') const transaction = db.transaction([STORE_NAME], 'readwrite')
const objectStore = transaction.objectStore(STORE_NAME) const objectStore = transaction.objectStore(STORE_NAME)
await new Promise<void>((resolve, reject) => { await new Promise<void>((resolve, reject) => {
const putRequest = objectStore.put(sesion) const putRequest = objectStore.put(sesionClonada)
putRequest.onsuccess = () => resolve() putRequest.onsuccess = () => resolve()
putRequest.onerror = () => reject(new Error('Error al actualizar la sesión')) putRequest.onerror = () => reject(new Error('Error al actualizar la sesión'))
}) })