Skip to content

useShowAlert — Sistema de Alertas

El sistema de alertas permite mostrar notificaciones tipo toast (éxito/error) desde cualquier parte de la aplicación. Es global — no importa dónde lo llames, la alerta aparece siempre en la misma posición.


  • Usa useState de Nuxt (estado compartido entre componentes, sin Pinia)
  • El componente <AETheAlert> se renderiza en app.vue fuera de layouts (siempre visible)
  • Puede mostrar hasta 2 alertas simultáneas (una success + una error)
  • Se auto-cierra tras la duración configurada

type AlertType = 'error' | 'success'

Solo existen estos dos. No hay warning, info, ni variantes adicionales.


const { showAlert } = useShowAlert()
// Éxito (se cierra sola en 5 segundos)
showAlert('success', 'Perfil actualizado correctamente')
// Error (se cierra sola en 5 segundos)
showAlert('error', 'No se pudo guardar los cambios')
// Con duración custom (en milisegundos)
showAlert('error', 'Sesión expirada', 8000)

const { resetAlert } = useShowAlert()
resetAlert('error') // Cierra solo la alerta de error
resetAlert('success') // Cierra solo la de éxito
resetAlert() // Cierra todas

Muchas páginas llaman resetAlert() en onMounted para limpiar alertas stale de la navegación anterior.


En app.vue, fuera de <NuxtLayout> (siempre visible independientemente del layout):

<AETheAlert
v-for="alert in ALERT"
:key="alert.typeAlert"
:type-alert="alert.typeAlert"
:show-alert="alert.showAlert"
:duration="alert.duration"
:message="alert.message"
@close="resetAlert(alert.typeAlert)"
/>

AspectoValor
Duración por defecto5000ms (5 segundos)
Máximo simultáneas2 (una de cada tipo)
Auto-cierreSí, tras la duración
Cierre manual por usuarioSí, botón X en el componente
Si se llama dos veces con el mismo tipoReemplaza el mensaje anterior y reinicia el timer
PosiciónFija en pantalla (definida por AETheAlert CSS)

async function updateProfile() {
try {
await useServices('updateUserProfile', { ...formData }, { promise: true })
showAlert('success', t('account.profile_updated'))
} catch {
showAlert('error', t('account.profile_update_error'))
}
}
// En middleware de auth — alerta de sesión expirada
showAlert('error', t('auth.session_expired'))
navigateTo('/iniciar-sesion')