patronum
Version:
☄️ Effector utility library delivering modularity and convenience
60 lines (58 loc) • 1.41 kB
JavaScript
import { createEvent, sample } from 'effector';
var hasPropBase = {}.hasOwnProperty;
var 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] })
* })
*/
export function spread(args) {
var argsShape = isTargets(args) ? {
targets: args
} : args;
var {
targets,
source = createEvent({
name: "source",
sid: "-u92i8l"
})
} = argsShape;
var _loop = function _loop(targetKey) {
if (hasOwnProp(targets, targetKey)) {
var currentTarget = targets[targetKey];
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"
}
});
}
};
for (var targetKey in targets) {
_loop(targetKey);
}
return source;
}
function isTargets(args) {
return !Object.keys(args).some(key => ['targets', 'source'].includes(key));
}