@@trigger
Protocol that allows start watching some external trigger and react on it with universal API.
Packages that use @@trigger
Known @@trigger
- all integrations from
@withease/web-api - method
intervalfrompatronum
Formulae
Trigger is an any object with the field @@trigger that a function that returns an object with fields:
fired: Event, external consumers will listen it to determine when trigger was activatedsetup: EventCallable, external consumers will call it to set up triggerteardown: EventCallable, external consumers will call it to stop trigger
TIP
Events setup and teardown are presented in protocol, because it is better to provide explicit start of the application.
Single fired
Since @@trigger supports only one fired Event, any operator that supports @@trigger protocol has to choose reasonable Event to use it as fired.
E.g., trackPageVisibility returns Events visible and hidden, but visible seems more reasonable fired Event.
Example
Let's create simple trigger that will be activated every second after starting:
import {
createEvent,
createStore,
createEffect,
scopeBind,
sample,
} from 'effector';
const intervalTrigger = {
'@@trigger': () => {
const setup = createEvent();
const fired = createEvent();
const teardown = createEvent();
const $interval = createStore(null);
const startInternalFx = createEffect(() => {
const boundFired = scopeBind(fired, { safe: true });
return setInterval(boundFired, 1000);
});
const stopIntervalFx = createEffect(clearInterval);
sample({ clock: setup, target: startInternalFx });
sample({ clock: startIntervalFx.doneData, target: $interval });
sample({ clock: teardown, source: $interval, target: stopIntervalFx });
sample({ clock: stopIntervalFx.done, target: $interval.reinit });
return { setup, fired };
},
};That is it, we can use intervalTrigger everywhere as a trigger!