From 2ca062b9e0e17cc740627b6c1606095f99937ac9 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Fri, 21 Nov 2025 23:36:01 -0600 Subject: [PATCH] Fix: Deshabilitar useToast en SSR para evitar crash El problema era que useToast() no funciona en Server-Side Rendering. Cuando los componentes se renderizaban en el servidor, crasheaba con error 500. Cambios: - Hacer que toast sea opcional: process.client ? useToast() : null - Cambiar todos toast.add() a toast?.add() - Ahora el composable funciona tanto en servidor como en cliente --- nuxt4/app/composables/useLotes.ts | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/nuxt4/app/composables/useLotes.ts b/nuxt4/app/composables/useLotes.ts index fd2753e..2de2aa1 100644 --- a/nuxt4/app/composables/useLotes.ts +++ b/nuxt4/app/composables/useLotes.ts @@ -31,7 +31,8 @@ export interface TrazabilidadRow { } export const useLotes = () => { - const toast = useToast() + // useToast solo funciona en el cliente, no en SSR + const toast = process.client ? useToast() : null // ===================================================== // FUNCIONES PARA LOTES @@ -67,7 +68,7 @@ export const useLotes = () => { return data.value?.data || [] } catch (err: any) { console.error('Error fetching lotes:', err) - toast.add({ + toast?.add({ title: 'Error', description: err.message || 'Error obteniendo lotes', color: 'red', @@ -93,7 +94,7 @@ export const useLotes = () => { return data.value?.data || null } catch (err: any) { console.error('Error fetching lote:', err) - toast.add({ + toast?.add({ title: 'Error', description: err.message || 'Error obteniendo lote', color: 'red', @@ -125,7 +126,7 @@ export const useLotes = () => { throw new Error(error.value.message || 'Error creando lote') } - toast.add({ + toast?.add({ title: 'Éxito', description: 'Lote creado correctamente', color: 'green', @@ -134,7 +135,7 @@ export const useLotes = () => { return data.value?.data || null } catch (err: any) { console.error('Error creating lote:', err) - toast.add({ + toast?.add({ title: 'Error', description: err.message || 'Error creando lote', color: 'red', @@ -169,7 +170,7 @@ export const useLotes = () => { throw new Error(error.value.message || 'Error actualizando lote') } - toast.add({ + toast?.add({ title: 'Éxito', description: 'Lote actualizado correctamente', color: 'green', @@ -178,7 +179,7 @@ export const useLotes = () => { return data.value?.data || null } catch (err: any) { console.error('Error updating lote:', err) - toast.add({ + toast?.add({ title: 'Error', description: err.message || 'Error actualizando lote', color: 'red', @@ -200,7 +201,7 @@ export const useLotes = () => { throw new Error(error.value.message || 'Error eliminando lote') } - toast.add({ + toast?.add({ title: 'Éxito', description: 'Lote eliminado correctamente', color: 'green', @@ -209,7 +210,7 @@ export const useLotes = () => { return true } catch (err: any) { console.error('Error deleting lote:', err) - toast.add({ + toast?.add({ title: 'Error', description: err.message || 'Error eliminando lote', color: 'red', @@ -242,7 +243,7 @@ export const useLotes = () => { return data.value?.data || null } catch (err: any) { console.error('Error fetching trazabilidad:', err) - toast.add({ + toast?.add({ title: 'Error', description: err.message || 'Error obteniendo trazabilidad', color: 'red', @@ -285,7 +286,7 @@ export const useLotes = () => { return data.value?.data || [] } catch (err: any) { console.error('Error fetching operaciones:', err) - toast.add({ + toast?.add({ title: 'Error', description: err.message || 'Error obteniendo operaciones', color: 'red', @@ -326,7 +327,7 @@ export const useLotes = () => { throw new Error(error.value.message || 'Error creando operación') } - toast.add({ + toast?.add({ title: 'Éxito', description: 'Operación creada correctamente', color: 'green', @@ -335,7 +336,7 @@ export const useLotes = () => { return data.value?.data || null } catch (err: any) { console.error('Error creating operacion:', err) - toast.add({ + toast?.add({ title: 'Error', description: err.message || 'Error creando operación', color: 'red',