@@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
interval
frompatronum
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!