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
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:
@@ -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'))
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user