Notificaciones

Depende de: auth

Habilita las notificaciones dentro de la aplicación para los usuarios de tu aplicación.

Sintaxis

$ vela enable notifications

El módulo de notificaciones crea una colección notifications, un desplegable de campana en la cabecera de la aplicación y una página /notifications. Antes hay que habilitar la autenticación.

Qué obtienes

  • Una campana en la cabecera del layout (app) con el número de no leídas. Al abrirla se muestran las cinco notificaciones no leídas más recientes.
  • Consulta cada 30 segundos mientras la pestaña esté visible, además de una actualización cada vez que la pestaña recupera el foco. Las notificaciones nuevas también aparecen como toasts.
  • Una página /notifications con todas las notificaciones del usuario autenticado, con “Marcar como leída” por elemento y “Marcar todas como leídas”.
  • Una función notify en $lib/server/notifications para crear notificaciones desde el código del servidor.

El +layout.server.ts del layout (app) se amplía para cargar las notificaciones no leídas y registrar la dependencia app:notifications, de modo que llamar a invalidate('app:notifications') desde cualquier sitio actualiza la campana.

Enviar una notificación

Las notificaciones se crean en el servidor. Importa notify en una acción de formulario, un hook o una ruta de API y pásale el id del usuario:

import { notify } from '$lib/server/notifications';

export const actions = {
  invite: async ({ locals }) => {
    await notify(locals.admin, invitedUserId, {
      title: 'Te han añadido a Acme',
      body: 'Abre la página del equipo para empezar.'
    });
  }
};

Los usuarios solo pueden leer y eliminar sus propias notificaciones, y solo pueden cambiar el indicador read. Crear una notificación o editar su título y cuerpo requiere el cliente superusuario, así que pasa locals.admin en lugar de locals.pb.

Tablas de la base de datos

Habilitar notifications crea las siguientes tablas de base de datos:

notifications

Cada registro contiene una relación user, title, body y un indicador read, indexados por usuario, estado de lectura y fecha de creación.