combineEvents
import { combineEvents } from 'patronum';
// or
import { combineEvents } from 'patronum/combine-events';
combineEvents(events)
since
patronum 2.1.0
Use combineEvents({ events })
with patronum < 2.1.0
Motivation
Method allows to trigger event when all of given events are triggered, with payloads ov given events
note
Consider using stores with combine in case of lazy-loaded modules, as they could miss some updates happened before module loaded
Formulae
const target = combineEvents({ key1: event1, key2: event2 });
- When all events are triggered, trigger
target
with{key1: firstPayload, key2: secondPayload}
const target = combineEvents([event1, event2]);
- When all events are triggered, trigger
target
with[firstPayload, secondPayload]
Arguments
events
— Object or array with events
Returns
target
— Event with the same shape asevents
, that triggered after allevents
triggered
combineEvents({ events, reset, target })
Motivation
Object form which allow to pass reset
unit or target
Formulae
const target = combineEvents({
events: {
key1: event1,
key2: event2,
},
reset: resetUnit,
target: targetUnit,
});
- When all events are triggered, trigger
target
with{key1: firstPayload, key2: secondPayload}
const target = combineEvents({
events: [event1, event2],
reset: resetUnit,
target: targetUnit,
});
- When all events are triggered, trigger
target
with[firstPayload, secondPayload]
Arguments
events
— Object or array with eventsreset
(Unit<any>)
- Optional. Any unit which will reset state ofcombineEvents
and collecting of payloads will start from scratchtarget
(Unit<Shape>)
- Optional. Any unit with type matchingevents
shape
Returns
target
— Whentarget
option is not defined, will return new event with the same shape asevents
, otherwisetarget
unit will return
Example
const first = createEvent<number>();
const second = createEvent<string>();
const third = createEvent<boolean>();
const target = createEvent<{ a: number; b: string; c: boolean }>();
const reset = createEvent();
combineEvents({
events: {
a: first,
b: second,
c: third,
},
reset,
target,
});
target.watch((object) => {
console.log('first event data', object.a);
console.log('second event data', object.b);
console.log('third event data', object.c);
});
first(15); // nothing
second('wow'); // nothing
third(false); // target triggered with {a: 15, b: 'wow', c: false}
first(10);
second('-');
reset(); // combineEvents state is erased
third(true); // nothing, as it's a first saved payload
first(0);
second('ok'); // target triggered with {a: 0, b: 'ok', c: true}