UNPKG

reactive-blocs

Version:
50 lines (49 loc) 1.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createTask = void 0; const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const action_context_1 = require("./action-context"); const primitives_1 = require("./primitives"); const utils_1 = require("./utils"); const createTask = (executor, initialValue, initialParams) => { const { actionOf, dispatch } = (0, action_context_1.createActionContext)(); const actionName = (0, utils_1.generateId)(); const result = (0, primitives_1.createValue)(initialValue); const loading = new rxjs_1.BehaviorSubject(false); const error = new rxjs_1.BehaviorSubject(null); const reset = () => { if (result.value !== initialValue) { result.next(initialValue); } loading.next(true); error.next(null); }; const execute = (args, ignoreErorr) => { loading.next(true); error.next(null); return new Promise((resolve, reject) => { const actionResult = dispatch(actionName, args).pipe((0, operators_1.tap)(() => loading.next(false)), (0, operators_1.filter)(res => { if (res instanceof Error) { error.next(res); ignoreErorr ? resolve(null) : reject(res); return false; } else { error.next(null); resolve(res); return true; } }), (0, operators_1.share)()); actionResult.subscribe(val => result.next(val)); }); }; if (initialParams !== undefined) { execute(initialParams); } actionOf(actionName, (args) => { return executor(args); }); return { result, loading, error, execute }; }; exports.createTask = createTask;