# Događaji

> Pratite otvaranje i zatvaranje naplate te pristanak na snimanje pomoću `on()` i `off()` te razumijte pravilo jednog slušatelja po događaju.

Naplata vašoj stranici javlja što radi. Pretplatite se pomoću `on()`:

```js
entase.on('checkout.ready', payload => {
  console.log('checkout open for', payload.context.eventID);
});
```

## Jedan slušatelj po nazivu događaja

`on()` pohranjuje **jedan** povratni poziv po nazivu događaja. Registriranje drugog povratnog poziva za isti naziv zamjenjuje prvi – ne dodaje se na njega:

```js
entase.on('checkout.closed', a);
entase.on('checkout.closed', b);   // a is gone; only b runs
```

`off()` uklanja sve što je registrirano za naziv. Zanemaruje svaki povratni poziv koji mu proslijedite, pa `off('checkout.closed', b)` i `off('checkout.closed')` rade istu stvar.

Ako više dijelova vaše stranice treba reagirati na isti događaj, registrirajte jedan povratni poziv i raspodijelite obradu unutar njega.

## Pretplata na više događaja odjednom

Obje metode prihvaćaju niz odvojen razmacima ili polje naziva te registriraju isti povratni poziv za svaki od njih:

```js
entase.on('checkout.ready checkout.closed', payload => {
  console.log(payload.name);
});

entase.off(['checkout.ready', 'checkout.closed']);
```

## Sadržaj

Svaki povratni poziv prima jedan objekt:

| Polje | Vrsta | Opis |
|---|---|---|
| `name` | string | Naziv događaja, koristan kada jedan povratni poziv obrađuje više događaja. |
| `context` | object | Sadrži `eventID` – događaj kojem pripada ova naplata. |
| `data` | object | Pojedinosti specifične za događaj. |

## Dostupni događaji

| Naziv | Kada se aktivira |
|---|---|
| `checkout.ready` | Naplata je učitana i spremna za interakciju. Tada klijent preuzima i `clientContext` koji ste proslijedili u `book()`. |
| `checkout.closed` | Naplata je zatvorena. Klijent uklanja ploču ili prozor i čisti pozadinsku zavjesu. |
| `checkout.consent` | Posjetitelj je odgovorio na obavijest o uvjetima. `data.consent` je `true` kada ih prihvati, a klijent to pamti kako bi sljedeći put preskočio taj korak. |

```js
entase.on('checkout.closed', () => {
  document.body.classList.remove('checkout-open');
});

entase.on('checkout.consent', payload => {
  if (payload.data.consent) console.log('terms accepted');
});
```

## Slušatelji preživljavaju pojedinačne rezervacije

Slušatelji pripadaju instanci, a ne rezervaciji. Registrirajte ih jednom, nakon stvaranja klijenta, i primjenjivat će se na svaki poziv `book()`. Upotrijebite `payload.context.eventID` za razlikovanje rezervacija:

```js
const entase = new Entase({ pk: 'YOUR_PUBLISHABLE_KEY' });

entase.on('checkout.closed', payload => {
  refreshAvailability(payload.context.eventID);
});
```

Pozivanje `destroy()` zaustavlja sve njih – instanca u potpunosti prestaje slušati poruke iz naplate.

## Poruke iz drugih izvora se zanemaruju

Klijent prihvaća poruke samo iz izvora Entase naplate, pa nepovezani promet `postMessage` na vašoj stranici nikada neće stići do vaših povratnih poziva.
