UNPKG

patronum

Version:

☄️ Effector utility library delivering modularity and convenience

78 lines 2.06 kB
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, "\"")); }