Events

After a Mutate Transaction any relevant events will be dispatched followed by any events that have been queued. This is useful for responding to specific changes either from GraphQL Paper or custom events that might have been queued in a custom operation or by the Mutate Transaction itself using the queueEvent operation.

Listening to Events

Events are available via the events property on the Paper instance which follow the EventTarget pattern.

To listen for an event use events.addEventListener on a Paper instance, for example to listen for the create event.

paper.events.addEventListener('create', (event) => {
// do something with the `create` event
});

removeEventListener is also available to stop listening for an event for a particular listener.

Polyfilling EventTarget for Node.js

If using a Node.js version 14 and higher EventTarget should be supported, otherwise install the event-target-polyfill package.

# npm
npm install --save-dev event-target-polyfill
# yarn
yarn add --dev event-target-polyfill

Then include it early on in a top-level file before using GraphQL Paper

// using common js
require('event-target-polyfill');
// using ES Module imports
import 'event-target-polyfill';

Library Events

The following events are provided by default from GraphQL Paper when a document is created, removed, or modified.

create

When a document is created from a transaction a create event is dispatched with the following properties:

{
// the current `DocumentStore`
store,
// the created `Document`
document
}

remove

{
// the current `DocumentStore`
store,
// the removed `Document`
document
}

modify

{
// the current `DocumentStore`
store,
// the modified `Document`
document,
// object with changes per property on the document
changes
}

The changes property lists the changes per key, for example if changedPropertyOnDocument changed on the document the changes property would look:

{
changedPropertyOnDocument: {
propertyName: 'changedPropertyOnDocument',
value: 'current value of changedPropertyOnDocument',
previousValue: 'previous value of changedPropertyOnDocument',
}
}

Dispatching Custom Events

Any instance of Event that is added either via queueEvent operation or in a custom operation and pushed to the eventQueue array will be dispatched after the transaction is complete and after the library events have been dispatched first.