# Udalosti

> Sledujte otvorenie, zatvorenie a zaznamenanie súhlasu pokladne pomocou `on()` a `off()` a pochopte pravidlo jedného poslucháča na udalosť.

Pokladňa informuje vašu stránku o tom, čo robí. Prihláste sa na odber pomocou `on()`:

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

## Jeden poslucháč na názov udalosti

`on()` uloží **jednu** funkciu spätného volania pre každý názov udalosti. Registrácia druhej funkcie spätného volania s rovnakým názvom nahradí prvú – nepridá sa k nej:

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

`off()` odstráni všetko, čo je zaregistrované pre daný názov. Ignoruje akúkoľvek funkciu spätného volania, ktorú jej odovzdáte, takže `off('checkout.closed', b)` a `off('checkout.closed')` robia to isté.

Ak potrebuje na rovnakú udalosť reagovať viac častí vašej stránky, zaregistrujte jednu funkciu spätného volania a spracovanie rozdeľte v jej rámci.

## Prihlásenie na odber viacerých udalostí naraz

Obe metódy prijímajú reťazec názvov oddelených medzerami alebo pole názvov a pre každý z nich zaregistrujú rovnakú funkciu spätného volania:

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

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

## Údaje

Každá funkcia spätného volania dostane jeden objekt:

| Pole | Typ | Popis |
|---|---|---|
| `name` | string | Názov udalosti, užitočný, keď jedna funkcia spätného volania spracúva viac udalostí. |
| `context` | object | Obsahuje `eventID` – udalosť, ku ktorej patrí táto pokladňa. |
| `data` | object | Podrobnosti špecifické pre danú udalosť. |

## Dostupné udalosti

| Názov | Kedy sa spustí |
|---|---|
| `checkout.ready` | Pokladňa sa načítala a je pripravená na interakciu. Vtedy klient prevezme aj `clientContext`, ktorý ste odovzdali funkcii `book()`. |
| `checkout.closed` | Pokladňa sa zatvorila. Klient odstráni panel alebo okno a vymaže prekrytie pozadia. |
| `checkout.consent` | Návštevník odpovedal na upozornenie o podmienkach. `data.consent` je `true`, keď ich prijal, a klient si to zapamätá, takže sa tento krok nabudúce preskočí. |

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

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

## Poslucháče pretrvajú medzi jednotlivými rezerváciami

Poslucháče patria inštancii, nie rezervácii. Zaregistrujte ich raz po vytvorení klienta a budú sa vzťahovať na každé volanie `book()`. Na rozlíšenie rezervácií použite `payload.context.eventID`:

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

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

Volanie `destroy()` ich všetky zastaví – inštancia úplne prestane počúvať správy z pokladne.

## Správy z iných zdrojov sa ignorujú

Klient prijíma iba správy z pôvodu pokladne Entase, takže nesúvisiaca komunikácia `postMessage` na vašej stránke sa nikdy nedostane k vašim funkciám spätného volania.
