Action Registry
The first step in adding Trrack
to your application is to create a action registry using the Registry
class.
const registry = Registry.create();
Now actions can be registered in the registry. Actions are the only way Trrack
knows that something has happened and it has to update the provenance graph.
Action Types
There are two types of actions that can be registered.
State Action
State actions get the current state
of the application as an argument and can modify it based on the payload
, which is the second argument.
This is similar to redux reducers (opens in a new tab).
// Action which updates the `count` key in the state by desired value.
const incrementAction = registry.register(
'increment-action', // Action name
// Action handler which receives the current state and a payload.
(currentState: State, payload: number) => {
currentState.count += payload;
}
);
When state actions are executed, the changes to the state are stored in a new provenance node.
Trrack Action
The other type of action that is supported is called a Trrack action
. These actions do not modify the application state, but execute any arbitrary side effect.
When trrack action
is executed, Trrack
keeps a record of execution and the payload of the action.
You need to provide a undo
counterpart to each action to allow Trrack
to undo the action.
An trrack action
can be set as undo for itself.
const arr = [1, 2, 3, 4];
registry.register('sort', (sortBy: 'asc' | 'dsc') => {
if (sortBy === 'asc') arr.sort();
if (sortBy === 'dsc') arr.sort().reverse();
return {
undo: {
type: 'sort',
payload: sortBy === 'asc' ? 'dsc' : 'asc',
meta: {
hasSideEffects: true,
},
},
};
});
Trrack provides no guarantees that the trrack action
is properly undone by the
undo action
. We rely on developers for correct implementation. Trrack can
only guarantee that the undo action will be called properly during the
traversal.
You should be using state actions
exclusively in your application. State
actions allow for faster traversal through the provenance graph.