# Dogodki

> S funkcijama on() in off() spremljajte odpiranje, zapiranje in beleženje soglasja za zaključek nakupa ter razumite pravilo enega poslušalca na dogodek.

Zaključek nakupa vaši strani sporoča, kaj počne. Naročite se s `on()`:

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

## En poslušalec na ime dogodka

`on()` shrani **en** povratni klic za vsako ime dogodka. Če za isto ime registrirate drugi povratni klic, ta nadomesti prvega – ne doda se mu:

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

`off()` odstrani vse, kar je registrirano za določeno ime. Prezre vsak povratni klic, ki mu ga posredujete, zato `off('checkout.closed', b)` in `off('checkout.closed')` naredi isto.

Če se mora več delov vaše strani odzvati na isti dogodek, registrirajte en povratni klic in odzive razdelite znotraj njega.

## Naročanje na več dogodkov hkrati

Obe metodi sprejmeta niz imen, ločenih s presledki, ali polje imen ter za vsako ime registrirata isti povratni klic:

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

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

## Tovor podatkov

Vsak povratni klic prejme en objekt:

| Polje | Vrsta | Opis |
|---|---|---|
| `name` | string | Ime dogodka, uporabno, kadar en povratni klic obravnava več dogodkov. |
| `context` | object | Vsebuje `eventID` – dogodek, kateremu pripada ta zaključek nakupa. |
| `data` | object | Podrobnosti, specifične za dogodek. |

## Razpoložljivi dogodki

| Ime | Kdaj se sproži |
|---|---|
| `checkout.ready` | Zaključek nakupa se je naložil in je pripravljen za interakcijo. Takrat odjemalec prevzame tudi `clientContext`, ki ste ga posredovali metodi `book()`. |
| `checkout.closed` | Zaključek nakupa se je zaprl. Odjemalec odstrani ploščo ali okno in počisti ozadje. |
| `checkout.consent` | Obiskovalec je odgovoril na obvestilo o pogojih. `data.consent` je `true`, ko jih sprejme, odjemalec pa si to zapomni, zato se korak naslednjič preskoči. |

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

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

## Poslušalci ostanejo aktivni med posameznimi rezervacijami

Poslušalci pripadajo primerku, ne rezervaciji. Registrirajte jih enkrat po ustvarjanju odjemalca in veljali bodo za vsak klic `book()`. Za razlikovanje med rezervacijami uporabite `payload.context.eventID`:

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

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

Klic `destroy()` ustavi vse – primerek v celoti preneha poslušati sporočila iz zaključka nakupa.

## Sporočila iz drugih virov so prezrta

Odjemalec sprejema samo sporočila iz izvora zaključka nakupa Entase, zato nepovezan promet `postMessage` na vaši strani nikoli ne bo dosegel vaših povratnih klicev.
