# Režimy pokladny

> Jak si klient volí mezi vloženým panelem a vyskakovacím oknem, proč o tom rozhodují důvěryhodné zdroje a co očekávat při lokálním vývoji.

Pokladna se otevře v jednom ze dvou režimů.

**Panel** je vložený panel vykreslený uvnitř vaší stránky. Na desktopu se vysune zprava a jeho šířka je omezena hodnotou `pane.width`; na mobilu se vysune zdola. Návštěvník zůstává na vašem webu a panel se zavře po stisknutí klávesy Escape nebo kliknutí do ztmavené oblasti.

**Vyskakovací okno** je samostatné okno prohlížeče vycentrované na obrazovce návštěvníka. Klient sleduje, zda bylo okno zavřeno, aby mohl odstranit pozadí.

## Vložená pokladna vyžaduje důvěryhodný zdroj

Režim panelu vykresluje pokladnu Entase v prvku iframe na vaší doméně, a je proto povolen pouze pro domény, které jste výslovně autorizovali. Každou doménu, která otevírá pokladnu, přidejte do položky **Důvěryhodné zdroje** v nabídce Nastavení → Integrace – viz [Integrace a přizpůsobení pokladny](/organizers/settings/integrations-and-checkout-customization.md).

Záleží na tom, zda je zahrnuta předpona `www.`. Pokud si nejste jistí, kterou variantu váš web používá, přidejte obě.

Pokud vaše doména není na seznamu, pokladna stále funguje – pouze se otevře jako vyskakovací okno.

## Jak se určuje hodnota `'auto'`

Při výchozím nastavení `checkoutMode: 'auto'` klient rozhoduje v tomto pořadí:

1. **Bez HTTPS** → vyskakovací okno. Vložená pokladna se na nezabezpečené stránce nikdy nepoužívá.
2. **`localhost` nebo `127.0.0.1`** → panel s varováním zaznamenaným do konzole. Jde o usnadnění vývoje, abyste mohli pracovat s vloženým rozvržením; neznamená to nic o tom, zda je vaše produkční doména povolena.
3. **V ostatních případech** → klient se Entase zeptá, zda tento zdroj smí používat vloženou pokladnu, a k identifikaci účtu odešle `pk`. Pokud odpověď zahrnuje panel, režim se nastaví na panel.

Dokud tato odpověď nedorazí, je režim **vyskakovací okno**. Toto chování vás s největší pravděpodobností překvapí: kontrola je asynchronní, takže volání `book()` spuštěné ihned při načtení stránky – dříve, než návštěvník stihne na cokoli kliknout – může i na správně nastavené doméně otevřít vyskakovací okno. V praxi skutečné kliknutí vždy nastane dlouho po dokončení kontroly. Pokud pokladnu otevíráte automaticky, režim vynuťte, místo abyste se spoléhali na detekci.

## Vynucení režimu

Chcete-li detekci zcela přeskočit, nastavte `checkoutMode` výslovně:

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

Nebo jej přepište pro jednu rezervaci:

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

Vynucení `'pane'` na doméně, která není důvěryhodným zdrojem, neuděluje oprávnění – panel se otevře, ale pokladna v něm nemůže komunikovat s vaší stránkou. Použijte `'popup'` jako záměrnou volbu a ponechte `'auto'`, pokud chcete vloženou pokladnu všude, kde je povolena.

Nerozpoznaná hodnota se ignoruje a je považována za `'auto'`.

## Zjištění a změna režimu za běhu

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

`getCheckoutMode()` vrací *určený* režim, takže uvádí, co se skutečně stane. Nastavením režimu zpět na `'auto'` se detekce spustí znovu.

## Blokování vyskakovacích oken

Prohlížeče povolují `window.open()` pouze během akce uživatele. Zavolejte `book()` přímo uvnitř obslužné rutiny kliknutí – nikoli po `await`, `fetch` nebo `setTimeout`, kdy už akce vypršela a vyskakovací okno je zablokováno.

```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));
```

Týká se to pouze režimu vyskakovacího okna. Režim panelu vytváří prvek na stránce a toto omezení se na něj nevztahuje.
