# Olaylar

> `on()` ve `off()` ile ödeme sayfasının açılmasını, kapanmasını ve onayın kaydedilmesini dinleyin; ayrıca etkinlik başına tek dinleyici kuralını anlayın.

Ödeme sayfası, ne yaptığını sayfanıza bildirir. `on()` ile abone olun:

```js
entase.on('checkout.ready', payload => {
  console.log('checkout open for', payload.context.eventID);
});
```

## Etkinlik adı başına tek dinleyici

`on()`, etkinlik adı başına **bir** geri çağırma işlevi depolar. Aynı ad için ikinci bir geri çağırma işlevi kaydetmek ilkini değiştirir – ona eklenmez:

```js
entase.on('checkout.closed', a);
entase.on('checkout.closed', b);   // a is gone; only b runs
```

`off()`, bir ad için kaydedilmiş olan her şeyi kaldırır. Kendisine ilettiğiniz geri çağırma işlevini yok sayar; dolayısıyla `off('checkout.closed', b)` ve `off('checkout.closed')` aynı işlemi yapar.

Sayfanızın birden fazla bölümü aynı etkinliğe tepki vermek zorundaysa, tek bir geri çağırma işlevi kaydedin ve bunun içinden dağıtın.

## Aynı anda birden fazla etkinliğe abone olma

Her iki yöntem de boşlukla ayrılmış bir dizeyi veya ad dizisini kabul eder ve aynı geri çağırma işlevini her biri için kaydeder:

```js
entase.on('checkout.ready checkout.closed', payload => {
  console.log(payload.name);
});

entase.off(['checkout.ready', 'checkout.closed']);
```

## Yük

Her geri çağırma işlevi bir nesne alır:

| Alan | Tür | Açıklama |
|---|---|---|
| `name` | string | Etkinlik adı; tek bir geri çağırma işlevi birden fazlasını işlediğinde kullanışlıdır. |
| `context` | object | `eventID` içerir – bu ödeme sayfasının ait olduğu etkinlik. |
| `data` | object | Etkinliğe özgü ayrıntı. |

## Kullanılabilir etkinlikler

| Ad | Ne zaman tetiklenir |
|---|---|
| `checkout.ready` | Ödeme sayfası yüklendi ve etkileşime hazır. Bu aynı zamanda istemcinin `book()` işlevine ilettiğiniz `clientContext` değerini devraldığı andır. |
| `checkout.closed` | Ödeme sayfası kapandı. İstemci paneli veya pencereyi kaldırır ve arka plan katmanını temizler. |
| `checkout.consent` | Ziyaretçi koşullar bildirimini yanıtladı. Kabul ettiklerinde `data.consent` değeri `true` olur ve istemci bunu hatırlar; böylece bu adım bir sonraki sefer atlanır. |

```js
entase.on('checkout.closed', () => {
  document.body.classList.remove('checkout-open');
});

entase.on('checkout.consent', payload => {
  if (payload.data.consent) console.log('terms accepted');
});
```

## Dinleyiciler tek tek rezervasyonlardan sonra da kalır

Dinleyiciler bir rezervasyona değil, örneğe aittir. Bunları istemciyi oluşturduktan sonra bir kez kaydedin; her `book()` çağrısına uygulanırlar. Rezervasyonları birbirinden ayırmak için `payload.context.eventID` kullanın:

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

entase.on('checkout.closed', payload => {
  refreshAvailability(payload.context.eventID);
});
```

`destroy()` çağrısı bunların tümünü durdurur – örnek, ödeme sayfasından gelen iletileri tamamen dinlemeyi bırakır.

## Diğer kaynaklardan gelen iletiler yok sayılır

İstemci yalnızca Entase ödeme sayfası kaynağından gelen iletileri kabul eder; bu nedenle sayfanızdaki ilgisiz `postMessage` trafiği geri çağırma işlevlerinize asla ulaşmaz.
