# Commands & Events

## An introduction to commands & events

A **command** is an action/instruction sent to the Flipbook. These are used to trigger functionality inside the flipbook.

An **event** is when certain things happen inside a flipbook. These can be subscribed to in order to execute code when they occur. The code that should be executed is passed as a callback function when subscribing. You can set up multiple subscriptions to the same event. In addition, when you set up a subscription you will get an unsubscribe function returned which can be used to delete/cancel the subscription at any time (Note: You will need to `await` the subscription setup for the unsubscribe function to be accessible). For example:

```javascript
var mySubscription = await instance.basket.onToggled(() => {
    console.log('The basket was toggled');
});

mySubscription.unsubscribe();
```

The JS API comes with an extensive list of commands and events, which are split into the categories below:

{% content-ref url="commands-and-events/basket" %}
[basket](https://docs.ipaper.io/flipbook-javascript-api/commands-and-events/basket)
{% endcontent-ref %}

{% content-ref url="commands-and-events/consent" %}
[consent](https://docs.ipaper.io/flipbook-javascript-api/commands-and-events/consent)
{% endcontent-ref %}

{% content-ref url="commands-and-events/paging" %}
[paging](https://docs.ipaper.io/flipbook-javascript-api/commands-and-events/paging)
{% endcontent-ref %}

{% content-ref url="commands-and-events/publication" %}
[publication](https://docs.ipaper.io/flipbook-javascript-api/commands-and-events/publication)
{% endcontent-ref %}

{% content-ref url="commands-and-events/search" %}
[search](https://docs.ipaper.io/flipbook-javascript-api/commands-and-events/search)
{% endcontent-ref %}

{% content-ref url="commands-and-events/table-of-contents" %}
[table-of-contents](https://docs.ipaper.io/flipbook-javascript-api/commands-and-events/table-of-contents)
{% endcontent-ref %}

{% content-ref url="commands-and-events/sharing" %}
[sharing](https://docs.ipaper.io/flipbook-javascript-api/commands-and-events/sharing)
{% endcontent-ref %}

In addition to these commands and events, there is also a `updateConfig` command that can be used to update/set certain config settings of the API instance. The command accepts a single argument, consisting of the properties below:

| Property        | Type   | Description                                                                  |
| --------------- | ------ | ---------------------------------------------------------------------------- |
| `preventAction` | Object | Used to prevent default Flipbook behaviour when certain events are triggered |

For the `preventAction` object inside, this accepts one or multiple of the following properties:

| Property      | Type      | Description                                                                         |
| ------------- | --------- | ----------------------------------------------------------------------------------- |
| `basketClick` | `boolean` | When set to true, this will prevent the native basket from opening                  |
| `itemAdd`     | `boolean` | When set to true, this will prevent all shop items being added to the native basket |

Below is an example use which will prevent the native basket from opening:

```javascript
instance.updateConfig({
    preventAction: {
        basketClick: true,
        itemAdd: true
    }
});
```
