Tutoriel frontend — « Memo »

Notifications & dialogues

Les notifications et les dialogues passent par le SDK — jamais par alert/confirm/prompt du navigateur, qui casseraient la cohérence du shell.

Pousser une notification #

import { useNotificationStore } from '@kubuno/sdk'

// pousser une notification dans le centre de notifications du host
useNotificationStore.getState().push({
  title:    'Note partagée',
  body:     `« ${note.title} » a été partagée avec vous`,
  moduleId: 'memo',
  icon:     'StickyNote',   // icône Lucide
  link:     '/memo',        // navigation au clic
})

La forme exacte : { title, body, moduleId, icon?, link? }. Les notifications sont persistées le temps de la session.

La matrice de notifications #

Déclarez vos types pour que l'utilisateur choisisse e-mail/push par activité :

// déclarer les types de notifications dans Réglages → Notifications
NotificationRegistry.register({
  moduleId: 'memo', title: 'Memo', order: 30,
  activities: [
    { id: 'note_shared',   label: 'Une note est partagée', emailDefault: true, pushDefault: true },
    { id: 'note_reminder', label: "Rappel d'une note",     pushDefault: true },
  ],
})

Dialogues : confirm & prompt #

import { useConfirm, prompt } from '@kubuno/sdk'

const { confirm } = useConfirm()

// au lieu de window.confirm(...)
if (await confirm({ title: 'Supprimer la note ?', danger: true })) {
  await deleteNote(id)
}

// au lieu de window.prompt(...)
const name = await prompt({ title: 'Nom de la note', defaultValue: note.title })
if (name !== null) rename(note.id, name)
Règle UX

confirm() renvoie une Promise<boolean>, prompt() une Promise<string|null>. Pour les menus contextuels, utilisez MenuDropdown de @ui.