patronum
Version:
☄️ Effector utility library delivering modularity and convenience
63 lines (60 loc) • 1.47 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.spread = spread;
var _effector = require("effector");
const hasPropBase = {}.hasOwnProperty;
const hasOwnProp = (object, key) => hasPropBase.call(object, key);
/**
* @example
* spread({
* source: dataObject,
* targets: { first: targetA, second: [target1, target2] },
* })
*
* sample({
* source: dataObject,
* target: spread({ targets: { first: targetA, second: [target1, target2] } })
* })
*
* sample({
* source: dataObject,
* target: spread({ first: targetA, second: [target1, target2] })
* })
*/
function spread(args) {
const argsShape = isTargets(args) ? {
targets: args
} : args;
const {
targets,
source = (0, _effector.createEvent)({
name: "source",
sid: "-u92i8l"
})
} = argsShape;
for (const targetKey in targets) {
if (hasOwnProp(targets, targetKey)) {
const currentTarget = targets[targetKey];
(0, _effector.sample)({
and: [{
source,
filter: object => {
return typeof object === 'object' && object !== null && targetKey in object;
},
fn: object => object[targetKey],
target: currentTarget,
batch: false
}],
or: {
sid: "motx3n"
}
});
}
}
return source;
}
function isTargets(args) {
return !Object.keys(args).some(key => ['targets', 'source'].includes(key));
}
;