Files
ipal-kit/docs/notifications.md
T

2.4 KiB

notifications

Teksty powiadomień (wyniki akcji) konfigurowane w panelu, per język, z fallbackiem. Na dziś obsługuje komunikaty wyników formularza (submitForm), z miejscem na przyszłe konteksty. Global Notifications, budowany zawsze.

Zasada

Plugin daje KOD wyniku (submitForm zwraca reason), nie tekst. Ten moduł mapuje kod → tekst z panelu (localized), z fallbackiem angielskim per pole. Front dostaje gotowy string i styluje go jak chce (toast, inline, banner). Dzięki temu żaden komunikat nie jest zaszyty w kodzie — wszystko przez panel.

Config

Brak opcji — global Notifications jest zawsze budowany. Edytor zarządza tekstami w panelu (karta Notifications), grupowane per kontekst. Grupa form: success, error, rateLimited, turnstile, validation, consent, notFound. Każde pole puste → fallback (NOTIFICATION_FALLBACK).

Helper — getNotificationTexts

Pobiera teksty z globala per język, fallback per pole. Analog getConsentTexts:

import { getNotificationTexts } from '@intecion/ipal-kit'

const notifications = await getNotificationTexts({ payload, locale })
// notifications.form.error, notifications.form.success, ...

Mapowanie wyniku — resolveFormMessage

Most między submitForm a UI: bierze wynik i teksty, zwraca jeden komunikat. Interpoluje {field} w walidacji. NIGDY nie pokazuje surowego wyjątku (error → generyczny tekst, nie treść błędu backendu).

import { resolveFormMessage } from '@intecion/ipal-kit'

const result = await submitFormAction(...)
if (!result.success) {
  setError(resolveFormMessage(result, notifications.form))
}

To zastępuje sztywne Błąd: ${result.reason} — teraz przyjazny tekst z panelu, per język.

Interpolacja {field}

Tekst validation może zawierać {field} — podstawia się nazwa pola z błędem:

Panel:  "Sprawdź pole {field} i spróbuj ponownie."
Wynik:  "Sprawdź pole email i spróbuj ponownie."

Rozszerzanie o nowe konteksty

Grupa form to pierwszy kontekst. Kolejne (newsletter, system) dodaje się tak samo — nowa grupa w globals/Notifications/fields.ts + pole w typach + fallback. getNotificationTexts resolwuje, co istnieje.

Dostęp

Global ma read: () => true — teksty są publiczne (pokazywane użytkownikom końcowym), więc front czyta je bez sesji. Inaczej niż SiteIntegrations (read: isAdmin — tam sekrety).