# Įvykiai

> Naudodami on() ir off(), stebėkite atsiskaitymo lango atidarymą, uždarymą ir sutikimo užregistravimą bei supraskite vieno klausytojo vienam įvykiui taisyklę.

Atsiskaitymo langas informuoja jūsų puslapį apie savo veiksmus. Užsiprenumeruokite naudodami `on()`:

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

## Vienas klausytojas vienam įvykio pavadinimui

`on()` išsaugo **vieną** atgalinio iškvietimo funkciją kiekvienam įvykio pavadinimui. Užregistravus antrą atgalinio iškvietimo funkciją tam pačiam pavadinimui, pirmoji pakeičiama – ji nepridedama prie esamos:

```js
entase.on('checkout.closed', a);
entase.on('checkout.closed', b);   // a pašalinama; vykdoma tik b
```

`off()` pašalina viską, kas užregistruota konkrečiam pavadinimui. Ji nepaiso jokios jai perduotos atgalinio iškvietimo funkcijos, todėl `off('checkout.closed', b)` ir `off('checkout.closed')` atlieka tą patį veiksmą.

Jei kelios jūsų puslapio dalys turi reaguoti į tą patį įvykį, užregistruokite vieną atgalinio iškvietimo funkciją ir joje paskirstykite veiksmus.

## Kelių įvykių prenumeravimas vienu metu

Abu metodai priima tarpais atskirtų pavadinimų eilutę arba pavadinimų masyvą ir kiekvienam jų užregistruoja tą pačią atgalinio iškvietimo funkciją:

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

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

## Duomenų objektas

Kiekviena atgalinio iškvietimo funkcija gauna vieną objektą:

| Laukas | Tipas | Aprašymas |
|---|---|---|
| `name` | string | Įvykio pavadinimas, naudingas, kai viena atgalinio iškvietimo funkcija apdoroja kelis įvykius. |
| `context` | object | Yra `eventID` – įvykis, kuriam priklauso šis atsiskaitymo langas. |
| `data` | object | Su įvykiu susijusi išsami informacija. |

## Galimi įvykiai

| Pavadinimas | Kada suveikia |
|---|---|
| `checkout.ready` | Atsiskaitymo langas įkeltas ir paruoštas sąveikai. Tuo metu klientas taip pat perduoda `clientContext`, kurį perdavėte į `book()`. |
| `checkout.closed` | Atsiskaitymo langas uždarytas. Klientas pašalina skydelį arba langą ir foninį uždangalą. |
| `checkout.consent` | Lankytojas atsakė į pranešimą apie sąlygas. `data.consent` yra `true`, kai jis sutiko, o klientas tai įsimena, todėl kitą kartą šis žingsnis praleidžiamas. |

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

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

## Klaustytojai išlieka per atskirus užsakymus

Klaustytojai priklauso egzemplioriui, o ne užsakymui. Užregistruokite juos vieną kartą, sukūrę klientą, ir jie bus taikomi kiekvienam `book()` iškvietimui. Norėdami atskirti užsakymus, naudokite `payload.context.eventID`:

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

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

Iškvietus `destroy()`, visų jų veikimas sustabdomas – egzempliorius visiškai nustoja klausytis pranešimų iš atsiskaitymo lango.

## Kitų šaltinių pranešimai ignoruojami

Klientas priima tik pranešimus iš Entase atsiskaitymo lango šaltinio, todėl nesusijęs `postMessage` srautas jūsų puslapyje niekada nepasieks jūsų atgalinio iškvietimo funkcijų.
