Sistema de Alertas & Toasts Reactivos
El sistema de notificaciones de Mañuti centraliza los mensajes de sesión, errores de validación y eventos en tiempo real mediante un despachador unificado en resources/views/partials/toast.blade.php, desacoplado de librerías estáticas mediante SweetAlert2 y KTToast.
1. API Fluida de Controladores
Los controladores invocan notificaciones mediante métodos estándar de sesión flash:
// Notificación de Éxito
return back()->with('status', 'Registro actualizado con éxito.');
// Notificación de Advertencia
return back()->with('warning', 'La contraseña caducará en 3 días.');
// Notificación de Error Crítico
return back()->with('error', 'No fue posible conectar con el nodo de base de datos.');
// Notificación Personalizada con Variante Dinámica
return back()->with(['mensaje' => 'Sincronización completada', 'variant' => 'primary']);
2. El Despachador Universal (partials/toast.blade.php)
Se incluye globalmente al pie del layout maestro y procesa todas las señales del framework:
document.addEventListener('DOMContentLoaded', function () {
const Toast = Swal.mixin({
toast: true,
position: 'top-end',
showConfirmButton: false,
timer: 4000,
timerProgressBar: true,
width: '350px',
showClass: { popup: 'animate__animated animate__fadeInRight' },
hideClass: { popup: 'animate__animated animate__fadeOutRight' }
});
@if (session('status') || session('success'))
Toast.fire({ icon: 'success', title: "{{ session('status') ?? session('success') }}" });
@endif
@if (session('warning'))
Toast.fire({ icon: 'warning', title: "{{ session('warning') }}" });
@endif
@if (session('error'))
Toast.fire({ icon: 'error', title: "{{ session('error') }}" });
@endif
@if ($errors->any())
Toast.fire({
icon: 'error',
title: 'Errores en el formulario',
html: '<div style="text-align: left; font-size: 0.85em;">' +
'@foreach ($errors->all() as $error) <span>• {{ $error }}</span><br> @endforeach' +
'</div>'
});
@endif
});