UNPKG

minh-custom-hooks-release

Version:

Đây là custom hooks được viết bởi hoanggminh2702, bao gồm:

117 lines 6.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useTaskObservable; /* eslint-disable @typescript-eslint/no-explicit-any */ var react_1 = require("react"); var rxjs_1 = require("rxjs"); var innerFrom_1 = require("rxjs/internal/observable/innerFrom"); function useTaskObservable(_a) { var task = _a.task, observablePreHandler = _a.observablePreHandler, onNext = _a.onNext, onComplete = _a.onComplete, onError = _a.onError, onCancel = _a.onCancel; var currentSubscription = (0, react_1.useRef)(null); var _b = (0, react_1.useState)(), data = _b[0], setData = _b[1]; var _c = (0, react_1.useState)(), err = _c[0], setErr = _c[1]; var _d = (0, react_1.useState)("IDLE" /* EnumSubscriptionState.IDLE */), taskState = _d[0], setTaskState = _d[1]; var _e = (0, react_1.useState)("IDLE" /* EnumSubscriptionState.IDLE */), subscriptionState = _e[0], setSubscriptionState = _e[1]; var run = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } (_a = currentSubscription.current) === null || _a === void 0 ? void 0 : _a.unsubscribe(); setTaskState("LOADING" /* EnumSubscriptionState.LOADING */); setSubscriptionState("LOADING" /* EnumSubscriptionState.LOADING */); if (task instanceof Promise) { var toObservable = (0, rxjs_1.defer)(function () { return (0, innerFrom_1.fromPromise)(task); }); if (typeof observablePreHandler === 'function') { toObservable = observablePreHandler(toObservable); } currentSubscription.current = toObservable.subscribe({ next: function (v) { setData(v); setSubscriptionState("DATARECEIVED" /* EnumSubscriptionState.DATARECEIVED */); onNext === null || onNext === void 0 ? void 0 : onNext(v); }, error: function (err) { setTaskState("FAILED" /* EnumSubscriptionState.FAILED */); setSubscriptionState("FAILED" /* EnumSubscriptionState.FAILED */); setErr(err); onError === null || onError === void 0 ? void 0 : onError(err); }, complete: function () { setTaskState("SUCCESS" /* EnumSubscriptionState.SUCCESS */); setSubscriptionState("SUCCESS" /* EnumSubscriptionState.SUCCESS */); onComplete === null || onComplete === void 0 ? void 0 : onComplete(); }, }); } else { var source$ = (0, rxjs_1.defer)(function () { var generateObservable$ = task.apply(void 0, args); return generateObservable$ instanceof Promise ? (0, innerFrom_1.fromPromise)(generateObservable$) : generateObservable$; }); if (typeof observablePreHandler === 'function') { source$ = observablePreHandler(source$); } currentSubscription.current = source$.subscribe({ next: function (v) { setData(v); setSubscriptionState("DATARECEIVED" /* EnumSubscriptionState.DATARECEIVED */); onNext === null || onNext === void 0 ? void 0 : onNext(v); }, error: function (err) { setErr(err); setTaskState("FAILED" /* EnumSubscriptionState.FAILED */); setSubscriptionState("FAILED" /* EnumSubscriptionState.FAILED */); onError === null || onError === void 0 ? void 0 : onError(err); }, complete: function () { setTaskState("SUCCESS" /* EnumSubscriptionState.SUCCESS */); setSubscriptionState("SUCCESS" /* EnumSubscriptionState.SUCCESS */); onComplete === null || onComplete === void 0 ? void 0 : onComplete(); }, }); } }; var cancel = (0, react_1.useCallback)(function () { var _a; (_a = currentSubscription.current) === null || _a === void 0 ? void 0 : _a.unsubscribe(); setTaskState("CANCELED" /* EnumSubscriptionState.CANCELED */); setSubscriptionState("CANCELED" /* EnumSubscriptionState.CANCELED */); onCancel === null || onCancel === void 0 ? void 0 : onCancel(data); }, []); (0, react_1.useEffect)(function () { return function () { var _a; (_a = currentSubscription.current) === null || _a === void 0 ? void 0 : _a.unsubscribe(); }; }, []); return { // data state data: data, err: err, // current state state: taskState, subscriptionState: subscriptionState, // task state isIdle: taskState === "IDLE" /* EnumSubscriptionState.IDLE */, isLoading: taskState === "LOADING" /* EnumSubscriptionState.LOADING */, isSuccess: taskState === "SUCCESS" /* EnumSubscriptionState.SUCCESS */, isFailed: taskState === "FAILED" /* EnumSubscriptionState.FAILED */, isCanceled: taskState === "CANCELED" /* EnumSubscriptionState.CANCELED */, // subscription state isSubscriptionIdle: taskState === "IDLE" /* EnumSubscriptionState.IDLE */, isSubscriptionLoading: taskState === "LOADING" /* EnumSubscriptionState.LOADING */, isSubscriptionDataReceived: taskState === "DATARECEIVED" /* EnumSubscriptionState.DATARECEIVED */, isSubscriptionSuccess: taskState === "SUCCESS" /* EnumSubscriptionState.SUCCESS */, isSubscriptionFailed: taskState === "FAILED" /* EnumSubscriptionState.FAILED */, isSubscriptionCanceled: taskState === "CANCELED" /* EnumSubscriptionState.CANCELED */, // action run: run, cancel: cancel, subscription: currentSubscription.current, }; } //# sourceMappingURL=useTaskObservable.js.map