# Checkouttilstande

> Hvordan klienten vælger mellem det indlejrede panel og et pop op-vindue, hvorfor godkendte oprindelser afgør det, og hvad du kan forvente under lokal udvikling.

Checkout åbnes i en af to tilstande.

**Panel** er et indlejret panel, der gengives inde på din side. På computer glider det ind fra højre med en maksimal bredde på `pane.width`; på mobil glider det op fra bunden. Den besøgende bliver på dit website, og panelet lukkes, når vedkommende trykker på Escape eller klikker på det nedtonede område.

**Pop op** er et separat browservindue, der centreres på den besøgendes skærm. Klienten overvåger, om vinduet lukkes, så baggrunden kan fjernes.

## Indlejret checkout kræver en godkendt oprindelse

Paneltilstand gengiver Entase-checkout i en iframe på dit domæne, så den er kun tilladt for domæner, du udtrykkeligt har godkendt. Tilføj alle domæner, der åbner checkout, under **Godkendte oprindelser** i Indstillinger → Integrationer – se [Integrationer og tilpasning af checkout](/organizers/settings/integrations-and-checkout-customization.md).

Det har betydning, om præfikset `www.` er med. Hvis du ikke er sikker på, hvilken form dit website bruger, skal du tilføje begge.

Hvis dit domæne ikke er på listen, virker checkout stadig – den åbnes blot som et pop op-vindue.

## Sådan fastlægges `'auto'`

Med standardindstillingen `checkoutMode: 'auto'` træffer klienten beslutningen i denne rækkefølge:

1. **Ikke HTTPS** → pop op. Indlejret checkout bruges aldrig på en usikker side.
2. **`localhost` eller `127.0.0.1`** → panel med en advarsel logget i konsollen. Dette gør udviklingen lettere, så du kan bygge med det indlejrede layout; det siger intet om, hvorvidt dit produktionsdomæne er tilladt.
3. **Ellers** → klienten spørger Entase, om denne oprindelse må bruge indlejret checkout, og sender `pk` for at identificere kontoen. Hvis svaret omfatter panel, bliver tilstanden panel.

Indtil svaret modtages, er tilstanden **pop op**. Dette er den adfærd, der højst sandsynligt vil overraske dig: kontrollen er asynkron, så et `book()`-kald, der udløses umiddelbart ved sideindlæsning – før den besøgende har haft mulighed for at klikke på noget – kan stadig åbne et pop op-vindue på et fuldstændig korrekt konfigureret domæne. I praksis kommer et rigtigt klik altid længe efter, at kontrollen er fuldført. Hvis du åbner checkout automatisk, skal du gennemtvinge tilstanden i stedet for at forlade dig på registrering.

## Gennemtving en tilstand

Angiv `checkoutMode` eksplicit for helt at springe registreringen over:

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

Eller tilsidesæt den for en enkelt booking:

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

At gennemtvinge `'pane'` på et domæne, der ikke er en godkendt oprindelse, giver ikke tilladelse – panelet åbnes, men checkout inde i det kan ikke kommunikere med din side. Brug `'popup'` som et bevidst valg, og behold `'auto'`, når du ønsker indlejret checkout, hvor det er tilladt.

En ukendt værdi ignoreres og behandles som `'auto'`.

## Læs og skift tilstanden under kørsel

```js
entase.getCheckoutMode();        // 'pane' or 'popup' — never 'auto'
entase.setCheckoutMode('popup'); // applies to every later book() call
```

`getCheckoutMode()` returnerer den *fastlagte* tilstand, så den angiver, hvad der faktisk vil ske. Hvis tilstanden sættes tilbage til `'auto'`, køres registreringen igen.

## Blokering af pop op-vinduer

Browsere tillader kun `window.open()` under en brugerhandling. Kald `book()` direkte i en klikhandler – ikke efter `await`, `fetch` eller `setTimeout`, hvor handlingen er udløbet, og pop op-vinduet blokeres.

```js
// Blocked: the gesture is gone by the time book() runs.
button.addEventListener('click', async () => {
  const event = await fetch('/api/current-event').then(r => r.json());
  entase.book(event.id);
});

// Fine: resolve the id first, open on the click.
button.addEventListener('click', () => entase.book(button.dataset.eventId));
```

Dette påvirker kun pop op-tilstand. Paneltilstand opbygger et element på siden og er ikke underlagt dette.
