# Evenementer

> Lauschtert mat on() an off() op d'Ouverture, d'Schléissen an d'Zoustëmmungserfaassung vum Checkout, a verstitt d'Reegel vun engem Listener pro Evenement.

De Checkout mellt zeréck un är Säit, wat en mécht. Abonnéiert iech mat `on()`:

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

## Ee Listener pro Evenementsnumm

`on()` späichert **ee** Callback pro Evenementsnumm. D'Aschreiwe vun engem zweete Callback mam selwechten Numm ersetzt deen éischten – et gëtt net dozou bäigefüügt:

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

`off()` läscht dat, wat fir en Numm ageschriwwen ass. Et ignoréiert all Callback, deen der iwwergitt, dofir maachen `off('checkout.closed', b)` an `off('checkout.closed')` datselwecht.

Wa verschidden Deeler vun ärer Säit op datselwecht Evenement reagéiere mussen, schreift ee Callback an a verdeelt vu bannen eraus.

## Gläichzäiteg op verschidden Evenementer abonnéieren

Béid Methode akzeptéieren eng duerch Leerzeechen getrennte Kette oder en Array vun Nimm a schreiwen dee selwechte Callback fir all eenzelen an:

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

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

## De Payload

All Callback kritt een Objet:

| Feld | Typ | Beschreiwung |
|---|---|---|
| `name` | string | Den Evenementsnumm, nëtzlech wann ee Callback der méi behandelt. |
| `context` | object | Enthält `eventID` – d'Evenement, zu deem dëse Checkout gehéiert. |
| `data` | object | Detailer, déi spezifesch fir d'Evenement sinn. |

## Verfügbar Evenementer

| Numm | Wéini et ausgeléist gëtt |
|---|---|
| `checkout.ready` | De Checkout ass gelueden a prett fir Interaktiounen. Dann iwwergëtt de Client och de `clientContext`, deen der un `book()` iwwerginn hutt. |
| `checkout.closed` | De Checkout ass zougemaach ginn. De Client baut de Panel oder d'Fënster of a läscht den Hannergrondschleier. |
| `checkout.consent` | De Visiteur huet op den Hiweis zu de Bedéngunge geäntwert. `data.consent` ass `true`, wa si zougestëmmt hunn, an de Client späichert dat, fir datt dëse Schrëtt déi nächst Kéier iwwerspronge gëtt. |

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

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

## Listener bleiwen iwwer eenzel Buchungen erhale

Listener gehéieren zur Instanz, net zu enger Buchung. Schreift se eemol an, nodeems der de Client erstallt hutt, a si gëlle fir all `book()`-Opruff. Benotzt `payload.context.eventID`, fir Buchungen auserneenzehalen:

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

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

Den Opruff vu `destroy()` stoppt se all – d'Instanz lauschtert dann iwwerhaapt net méi op Messagë vum Checkout.

## Messagë vun anere Quelle ginn ignoréiert

De Client akzeptéiert nëmme Messagë vum Entase-Checkout-Origin, dofir erreecht net-zesummenhängenden `postMessage`-Trafic op ärer Säit ni är Callbacks.
