# Åpne kassen

> Metoden book() åpner kassen for ett arrangement og godtar overstyringer per kall samt en klientkontekst som du kan føre videre til dine egne systemer.

`book()` er metoden som åpner kassen. Alt annet på klienten konfigurerer eller observerer den.

```js
entase.book(eventID);
entase.book(eventID, options);
```

`eventID` er identifikatoren for det planlagte arrangementet som skal selges. Det er den samme ID-en som brukes i arrangementets dele- og innebyggingskoder.

Kallet returnerer umiddelbart – det åpner panelet eller vinduet og venter ikke på at den besøkende skal bli ferdig. Bruk [hendelser](/developers/js-client/events.md) for å reagere på det som skjer videre.

## Alternativer

| Navn | Type | Standard | Beskrivelse |
|---|---|---|---|
| `checkoutMode` | string | instansverdi | `'pane'` eller `'popup'` kun for denne bestillingen. |
| `clientContext` | object | `null` | Vilkårlige data som sendes til kassen når den er klar. Se nedenfor. |
| `collectConsent` | boolean | instansverdi | Om den besøkende skal bes om å godta varselet om vilkår. |
| `backdrop` | boolean | instansverdi | Om siden bak kassen skal tones ned. |
| `backdropColor` | string | instansverdi | Fargen på det nedtonede området. |
| `pane` | object | instansverdi | `{ width, height }` for det innebygde panelet. |
| `popup` | object | instansverdi | `{ width, height }` for popup-vinduet. |

Alt du utelater, faller tilbake på verdien instansen ble opprettet med, så alternativer per kall er tillegg i stedet for et erstatningssett.

```js
entase.book('EVENT_ID', {
  pane: { width: '60vw' },
  backdrop: false,
  clientContext: { source: 'homepage-hero' }
});
```

## Klientkontekst

`clientContext` er et objekt du selv utformer. Klienten beholder det til kassen signaliserer at den er klar, og overleverer det deretter. Bruk det til å føre informasjon som bare siden din kjenner til – hvilken knapp som ble klikket på, hvilken kampanje en besøkende kom via, en intern kundereferanse – videre til kassesesjonen.

Konteksten lagres per arrangements-ID, så bestilling av to forskjellige arrangementer fra samme side holder kontekstene deres atskilt.

Ikke legg noe sensitivt i den. Den sendes til kassen via nettleseren og er synlig for alle som inspiserer siden.

## Åpne flere arrangementer fra én side

Én instans håndterer et hvilket som helst antall arrangementer. Opprett den én gang og send inn en annen ID hver gang:

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

document.querySelectorAll('[data-event-id]').forEach(button => {
  button.addEventListener('click', () => {
    entase.book(button.dataset.eventId, {
      clientContext: { source: button.dataset.source }
    });
  });
});
```

## Etter at klienten er ødelagt

Å kalle `book()` på en instans du allerede har ødelagt, logger en feil i konsollen og åpner ingenting. Dette er bevisst – en ødelagt instans lytter ikke lenger etter meldinger fra kassen, så vinduet den åpnet, kunne ikke lukkes eller observeres. Opprett en ny instans i stedet.

## Lukke kassen

Den besøkende lukker kassen selv: Escape eller et klikk på det nedtonede området i panemodus, vinduskontrollene i popup-modus. Kassen lukker også seg selv når en bestilling er fullført.

Det finnes ingen offentlig metode for å lukke den fra koden din. Hvis du trenger å vite når den ble lukket, lytt etter hendelsen `checkout.closed`.
