# Sündmused

> Kuulake `on()` ja `off()` abil makseakna avanemise, sulgumise ja nõusoleku salvestamise sündmusi ning mõistke reeglit „üks kuulaja sündmuse nime kohta”.

Makseaken edastab teie lehele teavet oma tegevuse kohta. Tellige sündmused `on()` abil:

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

## Üks kuulaja sündmuse nime kohta

`on()` salvestab **ühe** tagasikutsefunktsiooni iga sündmuse nime kohta. Teise sama nimega tagasikutsefunktsiooni registreerimine asendab esimese – seda ei lisata esimesele juurde:

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

`off()` eemaldab kõik, mis on nime jaoks registreeritud. See eirab sellele edastatud tagasikutsefunktsiooni, seega `off('checkout.closed', b)` ja `off('checkout.closed')` teevad sama asja.

Kui teie lehe mitu osa peavad samale sündmusele reageerima, registreerige üks tagasikutsefunktsioon ja jagage teave selle sees edasi.

## Mitme sündmuse tellimine korraga

Mõlemad meetodid aktsepteerivad tühikutega eraldatud stringi või nimede massiivi ning registreerivad sama tagasikutsefunktsiooni iga nime jaoks:

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

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

## Andmekoormus

Iga tagasikutsefunktsioon saab ühe objekti:

| Väli | Tüüp | Kirjeldus |
|---|---|---|
| `name` | string | Sündmuse nimi, mis on kasulik, kui üks tagasikutsefunktsioon käsitleb mitut sündmust. |
| `context` | object | Sisaldab `eventID` – sündmust, mille juurde see makseaken kuulub. |
| `data` | object | Sündmusepõhised üksikasjad. |

## Saadaolevad sündmused

| Nimi | Millal see käivitatakse |
|---|---|
| `checkout.ready` | Makseaken on laaditud ja sellega saab suhelda. Sel ajal edastab klient ka `clientContext`-i, mille andsite üle meetodile `book()`. |
| `checkout.closed` | Makseaken on suletud. Klient eemaldab paneeli või akna ning puhastab tausta. |
| `checkout.consent` | Külastaja vastas tingimuste teatele. `data.consent` on `true`, kui ta nõustus, ning klient jätab selle meelde, nii et järgmisel korral jäetakse see samm vahele. |

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

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

## Kuulajad säilivad üksikute broneeringute vahel

Kuulajad kuuluvad eksemplarile, mitte broneeringule. Registreerige need üks kord pärast kliendi loomist ning need rakenduvad igale `book()`-i kutsele. Kasutage `payload.context.eventID`-d, et broneeringuid eristada:

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

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

`destroy()` kutsumine peatab need kõik – eksemplar lõpetab täielikult makseaknalt sõnumite kuulamise.

## Muudest allikatest pärit sõnumeid eiratakse

Klient aktsepteerib ainult Entase makseakna päritolust tulevaid sõnumeid, seega ei jõua teie lehel olev sõltumatu `postMessage`-i liiklus kunagi teie tagasikutsefunktsioonideni.
