69 lines
2.4 KiB
Markdown
69 lines
2.4 KiB
Markdown
# 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`:
|
|
|
|
```ts
|
|
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).
|
|
|
|
```ts
|
|
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). |