# Događaji

> Pratite otvaranje i zatvaranje naplate, kao i evidentiranje saglasnosti pomoću funkcija on() i off(), i upoznajte pravilo jednog osluškivača po događaju.

Naplata obaveštava vašu stranicu o tome šta radi. Pretplatite se pomoću `on()`:

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

## Jedan osluškivač po nazivu događaja

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

```js
entase.on('checkout.closed', a);
entase.on('checkout.closed', b);   // a je uklonjen; izvršava se samo b
```

`off()` uklanja sve što je registrovano za određeni naziv. Zanemaruje svaki povratni poziv koji mu prosledite, pa `off('checkout.closed', b)` i `off('checkout.closed')` rade isto.

Ako više delova vaše stranice treba da reaguje na isti događaj, registrujte jedan povratni poziv i iz njega prosledite reakcije dalje.

## Pretplata na više događaja odjednom

Obe metode prihvataju string sa nazivima razdvojenim razmacima ili niz naziva i registruju isti povratni poziv za svaki:

```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 objekat:

| Polje | Tip | Opis |
|---|---|---|
| `name` | string | Naziv događaja, koristan kada jedan povratni poziv obrađuje više njih. |
| `context` | object | Sadrži `eventID` – događaj kojem pripada ova naplata. |
| `data` | object | Detalji specifični 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 prosledili funkciji `book()`. |
| `checkout.closed` | Naplata je zatvorena. Klijent uklanja panel ili prozor i čisti pozadinski sloj. |
| `checkout.consent` | Posetilac je odgovorio na obaveštenje o uslovima. `data.consent` je `true` kada ih prihvati, a klijent to pamti kako bi se ovaj korak sledeći put preskočio. |

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

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

## Osluškivači ostaju aktivni tokom pojedinačnih rezervacija

Osluškivači pripadaju instanci, a ne rezervaciji. Registrujte ih jednom, nakon kreiranja klijenta, i primenjivaće se na svaki poziv funkcije `book()`. Koristite `payload.context.eventID` da biste razlikovali rezervacije:

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

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

Pozivanje `destroy()` zaustavlja sve osluškivače – instanca potpuno prestaje da osluškuje poruke sa naplate.

## Poruke iz drugih izvora se zanemaruju

Klijent prihvata samo poruke koje dolaze sa izvora Entase naplate, tako da nepovezani `postMessage` saobraćaj na vašoj stranici nikada neće stići do vaših povratnih poziva.
