# Aprire il checkout

> Il metodo book() apre il checkout per un singolo evento e accetta override per singola chiamata, oltre a un contesto client che puoi trasmettere ai tuoi sistemi.

`book()` è il metodo che apre il checkout. Tutto il resto nel client lo configura o lo monitora.

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

`eventID` è l'identificatore dell'evento programmato per cui vendere. È lo stesso ID utilizzato nei codici di condivisione e incorporamento dell'evento.

La chiamata restituisce immediatamente – apre il pannello o la finestra e non attende che il visitatore finisca. Usa gli [eventi](/developers/js-client/events.md) per reagire a ciò che accade in seguito.

## Opzioni

| Nome | Tipo | Predefinito | Descrizione |
|---|---|---|---|
| `checkoutMode` | stringa | valore dell'istanza | `'pane'` o `'popup'` solo per questa prenotazione. |
| `clientContext` | oggetto | `null` | Dati arbitrari passati al checkout quando è pronto. Vedi sotto. |
| `collectConsent` | booleano | valore dell'istanza | Se chiedere al visitatore di accettare l'informativa sui termini. |
| `backdrop` | booleano | valore dell'istanza | Se oscurare la pagina dietro il checkout. |
| `backdropColor` | stringa | valore dell'istanza | Colore dell'area oscurata. |
| `pane` | oggetto | valore dell'istanza | `{ width, height }` per il pannello inline. |
| `popup` | oggetto | valore dell'istanza | `{ width, height }` per la finestra pop-up. |

Tutto ciò che ometti usa come fallback il valore con cui è stata creata l'istanza, quindi le opzioni per singola chiamata sono aggiuntive anziché un insieme sostitutivo.

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

## Contesto client

`clientContext` è un oggetto progettato da te. Il client lo conserva finché il checkout non segnala di essere pronto, quindi lo trasferisce. Usalo per trasportare informazioni che conosce solo la tua pagina – quale pulsante è stato selezionato, da quale campagna è arrivato un visitatore, un riferimento cliente interno – fino alla sessione di checkout.

Il contesto viene memorizzato per ID evento, quindi prenotando due eventi diversi dalla stessa pagina i relativi contesti restano separati.

Non inserire dati sensibili. Viaggia fino al checkout attraverso il browser ed è visibile a chiunque ispezioni la pagina.

## Aprire più eventi da una pagina

Un'istanza gestisce un numero qualsiasi di eventi. Creala una volta e passa ogni volta un ID diverso:

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

## Dopo la distruzione del client

Chiamare `book()` su un'istanza che hai già distrutto registra un errore nella console e non apre nulla. È intenzionale – un'istanza distrutta non rimane più in ascolto dei messaggi dal checkout, quindi la finestra aperta non potrebbe essere chiusa né monitorata. Crea invece una nuova istanza.

## Chiudere il checkout

Il visitatore chiude il checkout autonomamente: con Esc o con un clic sull'area oscurata in modalità pannello, tramite i controlli della finestra in modalità pop-up. Il checkout si chiude automaticamente anche al completamento di una prenotazione.

Non esiste un metodo pubblico per chiuderlo dal tuo codice. Se hai bisogno di sapere quando viene chiuso, ascolta l'evento `checkout.closed`.
