# Hendelser

> Lytt etter at utsjekkingen åpnes, lukkes og registrerer samtykke med on() og off(), og forstå regelen om én lytter per hendelse.

Utsjekkingen rapporterer tilbake til siden din hva den gjør. Abonner med `on()`:

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

## Én lytter per hendelsesnavn

`on()` lagrer **ett** tilbakekall per hendelsesnavn. Hvis du registrerer et nytt tilbakekall med samme navn, erstatter det det første – det legges ikke til:

```js
entase.on('checkout.closed', a);
entase.on('checkout.closed', b);   // a er borte; bare b kjøres
```

`off()` fjerner det som er registrert for et navn. Den ignorerer eventuelle tilbakekall du sender inn, så `off('checkout.closed', b)` og `off('checkout.closed')` gjør det samme.

Hvis flere deler av siden din må reagere på samme hendelse, registrerer du ett tilbakekall og distribuerer videre fra innsiden av det.

## Abonnere på flere hendelser samtidig

Begge metodene godtar en streng med navn atskilt av mellomrom eller en matrise med navn, og registrerer det samme tilbakekallet for hvert av dem:

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

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

## Nyttelasten

Hvert tilbakekall mottar ett objekt:

| Felt | Type | Beskrivelse |
|---|---|---|
| `name` | string | Hendelsesnavnet, nyttig når ett tilbakekall håndterer flere. |
| `context` | object | Inneholder `eventID` – arrangementet denne utsjekkingen tilhører. |
| `data` | object | Hendelsesspesifikke detaljer. |

## Tilgjengelige hendelser

| Navn | Når den utløses |
|---|---|
| `checkout.ready` | Utsjekkingen er lastet inn og klar til å samhandle med. Dette er også når klienten overleverer `clientContext` som du sendte til `book()`. |
| `checkout.closed` | Utsjekkingen er lukket. Klienten rydder bort panelet eller vinduet og fjerner bakteppet. |
| `checkout.consent` | Den besøkende svarte på varselet om vilkår. `data.consent` er `true` når de godtok, og klienten husker dette slik at trinnet hoppes over neste gang. |

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

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

## Lyttere overlever enkeltbestillinger

Lyttere tilhører instansen, ikke en bestilling. Registrer dem én gang, etter at du har opprettet klienten, så gjelder de for hvert `book()`-kall. Bruk `payload.context.eventID` for å skille bestillinger fra hverandre:

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

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

Hvis du kaller `destroy()`, stopper alle – instansen slutter helt å lytte etter meldinger fra utsjekkingen.

## Meldinger fra andre kilder ignoreres

Klienten godtar bare meldinger fra Entase-utsjekkingens opphav, så ikke-relatert `postMessage`-trafikk på siden din vil aldri nå tilbakekallene dine.
