# Notikumi

> Izmantojiet on() un off(), lai uztvertu norēķināšanās procesa atvēršanu, aizvēršanu un piekrišanas reģistrēšanu, kā arī izprastu noteikumu par vienu klausītāju katram notikumam.

Norēķināšanās logs ziņo jūsu lapai par savām darbībām. Piesakieties ar `on()`:

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

## Viens klausītājs katram notikuma nosaukumam

`on()` saglabā **vienu** atgriezeniskā izsaukuma funkciju katram notikuma nosaukumam. Reģistrējot otru atgriezeniskā izsaukuma funkciju tam pašam nosaukumam, pirmā tiek aizstāta – tā netiek papildināta:

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

`off()` noņem visu, kas reģistrēts konkrētam nosaukumam. Tā ignorē jebkuru atgriezeniskā izsaukuma funkciju, ko tai nododat, tāpēc `off('checkout.closed', b)` un `off('checkout.closed')` dara vienu un to pašu.

Ja vairākām jūsu lapas daļām jāreaģē uz vienu un to pašu notikumu, reģistrējiet vienu atgriezeniskā izsaukuma funkciju un tās iekšienē novirziet apstrādi tālāk.

## Pieteikšanās vairākiem notikumiem vienlaikus

Abas metodes pieņem ar atstarpēm atdalītu virkni vai nosaukumu masīvu, reģistrējot vienu un to pašu atgriezeniskā izsaukuma funkciju katram no tiem:

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

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

## Datu krava

Katra atgriezeniskā izsaukuma funkcija saņem vienu objektu:

| Lauks | Tips | Apraksts |
|---|---|---|
| `name` | string | Notikuma nosaukums, noderīgs, ja viena atgriezeniskā izsaukuma funkcija apstrādā vairākus notikumus. |
| `context` | object | Satur `eventID` – pasākumu, kuram pieder šis norēķināšanās process. |
| `data` | object | Notikumam specifiska informācija. |

## Pieejamie notikumi

| Nosaukums | Kad tas tiek izsaukts |
|---|---|
| `checkout.ready` | Norēķināšanās process ir ielādēts un gatavs mijiedarbībai. Šajā brīdī klients arī nodod `clientContext`, ko nodevāt metodei `book()`. |
| `checkout.closed` | Norēķināšanās process ir aizvērts. Klients noņem paneli vai aizver logu un noņem fona pārklājumu. |
| `checkout.consent` | Apmeklētājs ir atbildējis uz paziņojumu par noteikumiem. `data.consent` ir `true`, ja noteikumi tika pieņemti, un klients to atceras, lai nākamreiz šo soli izlaistu. |

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

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

## Klausītāji saglabājas starp atsevišķām rezervācijām

Klausītāji ir piesaistīti instancei, nevis rezervācijai. Reģistrējiet tos vienreiz pēc klienta izveides, un tie attieksies uz katru `book()` izsaukumu. Izmantojiet `payload.context.eventID`, lai atšķirtu rezervācijas:

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

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

Izsaucot `destroy()`, tie visi tiek apturēti – instance pilnībā pārtrauc klausīties ziņojumus no norēķināšanās procesa.

## Ziņojumi no citiem avotiem tiek ignorēti

Klients pieņem tikai ziņojumus no Entase norēķināšanās loga izcelsmes domēna, tāpēc nesaistīta `postMessage` datplūsma jūsu lapā nekad nenonāks līdz jūsu atgriezeniskā izsaukuma funkcijām.
