# Utsjekkingsmoduser

> Hvordan klienten velger mellom det innebygde panelet og et popup-vindu, hvorfor klarerte opprinnelser avgjør det, og hva du kan forvente under lokal utvikling.

Utsjekkingen åpnes i én av to moduser.

**Pane** er et innebygd panel som rendres på siden din. På datamaskiner glir det inn fra høyre, med maksimal bredde på `pane.width`; på mobil glir det opp fra bunnen. Den besøkende blir på nettstedet ditt, og panelet lukkes når vedkommende trykker på Escape eller klikker på det nedtonede området.

**Popup** er et separat nettleservindu, sentrert på den besøkendes skjerm. Klienten overvåker om vinduet lukkes, slik at den kan fjerne bakgrunnsoverlegget.

## Innebygd utsjekking krever en klarert opprinnelse

Panelmodus rendrer Entase-utsjekkingen i en iframe på domenet ditt, og er derfor bare tillatt for domener du uttrykkelig har autorisert. Legg til hvert domene som åpner utsjekkingen, under **Klarerte opprinnelser** i Innstillinger → Integrasjoner – se [Integrasjoner og tilpasning av utsjekking](/organizers/settings/integrations-and-checkout-customization.md).

Det har betydning om prefikset `www.` er inkludert. Hvis du ikke er sikker på hvilken form nettstedet ditt bruker, legger du til begge.

Hvis domenet ditt ikke står på listen, fungerer utsjekkingen fortsatt – den åpnes bare som et popup-vindu.

## Slik løses `'auto'`

Med standardverdien `checkoutMode: 'auto'` bestemmer klienten dette i følgende rekkefølge:

1. **Ikke HTTPS** → popup. Innebygd utsjekking brukes aldri på en usikker side.
2. **`localhost` eller `127.0.0.1`** → panel, med en advarsel logget til konsollen. Dette er en praktisk løsning for utvikling, slik at du kan bygge mot det innebygde oppsettet; det sier ingenting om hvorvidt produksjonsdomenet ditt er tillatt.
3. **Ellers** → klienten spør Entase om denne opprinnelsen kan bruke innebygd utsjekking, og sender `pk` for å identifisere kontoen. Hvis svaret inkluderer panel, blir modusen panel.

Frem til svaret kommer, er modusen **popup**. Dette er oppførselen som mest sannsynlig vil overraske deg: Kontrollsjekken er asynkron, så et `book()`-kall som utløses umiddelbart når siden lastes – før den besøkende har rukket å klikke på noe – kan fortsatt åpne en popup på et helt korrekt konfigurert domene. I praksis kommer et ekte klikk alltid lenge etter at kontrollsjekken er fullført. Hvis du åpner utsjekkingen automatisk, bør du tvinge modusen i stedet for å basere deg på deteksjon.

## Tvinge en modus

Angi `checkoutMode` eksplisitt for å hoppe over deteksjon helt:

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

Eller overstyr den for én enkelt bestilling:

```js
entase.book('EVENT_ID', { checkoutMode: 'popup' });
```

Å tvinge `'pane'` på et domene som ikke er en klarert opprinnelse, gir ikke tillatelse – panelet åpnes, men utsjekkingen inni det kan ikke kommunisere med siden din. Bruk `'popup'` som et bevisst valg, og behold `'auto'` når du vil bruke innebygd utsjekking der det er tillatt.

En ukjent verdi ignoreres og behandles som `'auto'`.

## Lese og endre modusen under kjøring

```js
entase.getCheckoutMode();        // 'pane' eller 'popup' – aldri 'auto'
entase.setCheckoutMode('popup'); // gjelder for alle senere book()-kall
```

`getCheckoutMode()` returnerer den *løste* modusen, og rapporterer derfor hva som faktisk kommer til å skje. Hvis du setter modusen tilbake til `'auto'`, kjøres deteksjonen på nytt.

## Popup-blokkeringer

Nettlesere tillater bare `window.open()` under en brukerhandling. Kall `book()` direkte i en klikkbehandler – ikke etter en `await`, en `fetch` eller en `setTimeout`, for da har handlingen utløpt og popup-vinduet blokkeres.

```js
// Blokkert: handlingen er over når book() kjøres.
button.addEventListener('click', async () => {
  const event = await fetch('/api/current-event').then(r => r.json());
  entase.book(event.id);
});

// Fungerer: løs opp id-en først, åpne ved klikket.
button.addEventListener('click', () => entase.book(button.dataset.eventId));
```

Dette påvirker bare popup-modus. Panelmodus oppretter et element på siden og er ikke underlagt dette.
