patronum
Version:
☄️ Effector utility library delivering modularity and convenience
111 lines (110 loc) • 2.79 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.combineEvents = combineEvents;
var _effector = require("effector");
function combineEvents(args) {
const argsShape = isEventsShape(args) ? {
events: args
} : args;
const {
events,
reset,
target = (0, _effector.createEvent)({
name: "target",
sid: "p73fff"
})
} = argsShape;
if (!(_effector.is.unit(target) && _effector.is.targetable(target))) throwError('target should be a targetable unit');
if (reset && !_effector.is.unit(reset)) throwError('reset should be a unit');
(0, _effector.withRegion)(target, () => {
const keys = Object.keys(events);
const defaultShape = Array.isArray(events) ? [...keys].fill('') : {};
const $counter = (0, _effector.createStore)(keys.length, {
and: {
serialize: 'ignore'
},
name: "$counter",
sid: "-ahoahx"
});
const $results = (0, _effector.createStore)(defaultShape, {
and: {
serialize: 'ignore'
},
name: "$results",
sid: "oy8iyn"
});
(0, _effector.sample)({
and: [{
source: target,
target: $counter.reinit
}],
or: {
sid: "blex0c"
}
});
$results.reset(target);
if (reset) {
(0, _effector.sample)({
and: [{
source: reset,
target: $counter.reinit
}],
or: {
sid: "bnm3fi"
}
});
$results.reset(reset);
}
for (const key of keys) {
const $isDone = (0, _effector.createStore)(false, {
and: {
serialize: 'ignore'
},
name: "$isDone",
sid: "-rf2fac"
}).on(events[key], () => true).reset(target);
if (reset) {
$isDone.reset(reset);
}
$counter.on($isDone, value => value - 1);
$results.on(events[key], (shape, payload) => {
const newShape = Array.isArray(shape) ? [...shape] : {
...shape
};
newShape[key] = payload;
return newShape;
});
}
const eventsTrriggered = (0, _effector.sample)({
and: [{
source: $results,
clock: [...Object.values(events)]
}],
or: {
name: "eventsTrriggered",
sid: "-lro8bq"
}
});
(0, _effector.sample)({
and: [{
source: eventsTrriggered,
filter: $counter.map(value => value === 0, {
skipVoid: false
}),
target: target
}],
or: {
sid: "-dlkr2s"
}
});
});
return target;
}
function isEventsShape(args) {
return Object.keys(args).some(key => !['events', 'reset', 'target'].includes(key) && _effector.is.unit(args[key]));
}
function throwError(message) {
throw new Error(message);
}
;