patronum
Version:
☄️ Effector utility library delivering modularity and convenience
78 lines • 2.06 kB
JavaScript
import { createEffect, createEvent, is, sample, combine } from 'effector';
export function delay() {
var argsShape = arguments.length === 2 ? {
source: arguments.length <= 0 ? undefined : arguments[0],
timeout: arguments.length <= 1 ? undefined : arguments[1]
} : arguments.length <= 0 ? undefined : arguments[0];
var {
source,
timeout,
target = createEvent({
name: "target",
sid: "jucb8d"
})
} = argsShape;
var targets = Array.isArray(target) ? target : [target];
if (!is.unit(source)) throw new TypeError('source must be a unit from effector');
if (!targets.every(unit => is.unit(unit))) throw new TypeError('target must be a unit from effector');
var ms = validateTimeout(timeout);
var timerFx = createEffect(_ref => {
var {
payload,
milliseconds
} = _ref;
return new Promise(resolve => {
setTimeout(resolve, milliseconds, payload);
});
}, {
name: "timerFx",
sid: "-wp3hwr"
});
sample({
and: [{
// ms can be Store<number> | number
// converts object of stores or object of values to store
source: combine({
and: [{
milliseconds: ms
}],
or: {
name: "source",
sid: "-gaikyz"
}
}),
clock: source,
fn: (_ref2, payload) => {
var {
milliseconds
} = _ref2;
return {
payload,
milliseconds: typeof milliseconds === 'function' ? milliseconds(payload) : milliseconds
};
},
target: timerFx
}],
or: {
sid: "-uuqxfw"
}
});
sample({
and: [{
clock: timerFx.doneData,
target: targets
}],
or: {
sid: "-uc1x9m"
}
});
return target;
}
function validateTimeout(timeout) {
if (is.store(timeout, {
sid: "-tvk3f2"
}) || typeof timeout === 'function' || typeof timeout === 'number') {
return timeout;
}
throw new TypeError("'timeout' argument must be a function, Store, or a number. Passed \"".concat(typeof timeout, "\""));
}