# Åbning af checkout

> Metoden book() åbner checkout for ét event og accepterer tilsidesættelser pr. kald samt en klientkontekst, som du kan føre videre til dine egne systemer.

`book()` er metoden, der åbner checkout. Alt andet på klienten konfigurerer eller observerer den.

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

`eventID` er identifikatoren for det planlagte event, der skal sælges billetter til. Det er det samme id, som bruges i dit events dele- og indlejringskoder.

Kaldet returnerer med det samme – det åbner panelet eller vinduet og venter ikke på, at den besøgende er færdig. Brug [hændelser](/developers/js-client/events.md) til at reagere på, hvad der sker derefter.

## Indstillinger

| Navn | Type | Standard | Beskrivelse |
|---|---|---|---|
| `checkoutMode` | string | instansværdi | `'pane'` eller `'popup'` kun for denne booking. |
| `clientContext` | object | `null` | Vilkårlige data, der overleveres til checkout, når den er klar. Se nedenfor. |
| `collectConsent` | boolean | instansværdi | Om den besøgende skal blive bedt om at acceptere meddelelsen om vilkår. |
| `backdrop` | boolean | instansværdi | Om siden bag checkout skal nedtones. |
| `backdropColor` | string | instansværdi | Farven på det nedtonede område. |
| `pane` | object | instansværdi | `{ width, height }` for det indlejrede panel. |
| `popup` | object | instansværdi | `{ width, height }` for pop op-vinduet. |

Alt, hvad du udelader, falder tilbage til den værdi, instansen blev oprettet med, så indstillinger pr. kald er tilføjelser frem for et erstatningssæt.

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

## Klientkontekst

`clientContext` er et objekt, du selv definerer. Klienten opbevarer det, indtil checkout signalerer, at den er klar, og overleverer det derefter. Brug det til at føre oplysninger, som kun din side kender – hvilken knap der blev klikket på, hvilken kampagne en besøgende kom via, en intern kundereference – videre til checkoutsessionen.

Konteksten gemmes pr. event-id, så booking af to forskellige events fra samme side holder deres kontekster adskilt.

Læg ikke følsomme oplysninger i den. Den sendes til checkout gennem browseren og er synlig for alle, der inspicerer siden.

## Åbning af flere events fra én side

Én instans håndterer et vilkårligt antal events. Opret den én gang, og send et andet 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 }
    });
  });
});
```

## Efter at klienten er ødelagt

Et kald til `book()` på en instans, som du allerede har ødelagt, skriver en fejl i konsollen og åbner intet. Det er med vilje – en ødelagt instans lytter ikke længere efter beskeder fra checkout, så vinduet, den åbnede, kunne hverken lukkes eller observeres. Opret i stedet en ny instans.

## Lukning af checkout

Den besøgende lukker selv checkout: Escape eller et klik på det nedtonede område i paneltilstand, vindueskontrollerne i pop op-tilstand. Checkout lukker også sig selv, når en booking er gennemført.

Der findes ingen offentlig metode til at lukke den fra din kode. Hvis du har brug for at vide, hvornår den blev lukket, skal du lytte efter hændelsen `checkout.closed`.
