UNPKG

@taro-hooks/use-request

Version:
104 lines (103 loc) 4.82 kB
"use strict"; var _excluded = ["manual"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var ahooks_1 = require("@taro-hooks/ahooks"); var core_1 = require("@taro-hooks/core"); var shared_1 = require("@taro-hooks/shared"); var Fetch_1 = tslib_1.__importDefault(require("./Fetch")); function useRequestImplement(service, options, plugins) { if (options === void 0) { options = {}; } if (plugins === void 0) { plugins = []; } var _options = options, _options$manual = _options.manual, manual = _options$manual === void 0 ? false : _options$manual, rest = _objectWithoutPropertiesLoose(_options, _excluded); var fetchOptions = _extends({ manual: manual }, rest); var serviceRef = (0, ahooks_1.useLatest)(service); var update = (0, ahooks_1.useUpdate)(); var fetchInstance = (0, core_1.useMemo)(function () { var initState = plugins.map(function (p) { return p == null ? void 0 : p.onInit == null ? void 0 : p.onInit(fetchOptions); }).filter(Boolean); var fetch = new Fetch_1["default"]( // @ts-ignore serviceRef, fetchOptions, update, Object.assign.apply(Object, [{}].concat(initState))); return fetch; }, []); // react can not call hooks in other hooks. we use env to fix it if (shared_1.FRAMEWORK === 'react') { fetchInstance.options = fetchOptions; // run all plugins hooks fetchInstance.pluginImpls = plugins.map(function (p) { return p(fetchInstance, fetchOptions); }); } else if (shared_1.FRAMEWORK === 'vue') { // TODO: maybe find a better way to hold reactive // @ts-ignore fetchInstance.value.options = fetchOptions; // run all plugins hooks // @ts-ignore fetchInstance.value.pluginImpls = plugins.map(function (p) { return ( // @ts-ignore p(fetchInstance.value, fetchOptions) ); }); } (0, ahooks_1.useMount)(function () { if (!manual) { // useCachePlugin can set fetchInstance.state.params from cache when init var instance = (0, shared_1.escapeState)(fetchInstance); var params = instance.state.params || options.defaultParams || []; // @ts-ignore instance.run.apply(instance, params); } }); (0, ahooks_1.useUnmount)(function () { var _ref; (_ref = (0, shared_1.escapeState)(fetchInstance)) == null ? void 0 : _ref.cancel == null ? void 0 : _ref.cancel(); }); // due to vue reactive, need reduce single for useMemo // ugly var vueRefResult = (0, core_1.useMemo)(function () { return { loading: (0, shared_1.escapeState)(fetchInstance).state.loading, data: (0, shared_1.escapeState)(fetchInstance).state.data, error: (0, shared_1.escapeState)(fetchInstance).state.error, params: (0, shared_1.escapeState)(fetchInstance).state.params || [], cancel: (0, shared_1.escapeState)(fetchInstance).cancel.bind((0, shared_1.escapeState)(fetchInstance)), refresh: (0, shared_1.escapeState)(fetchInstance).refresh.bind((0, shared_1.escapeState)(fetchInstance)), refreshAsync: (0, shared_1.escapeState)(fetchInstance).refreshAsync.bind((0, shared_1.escapeState)(fetchInstance)), run: (0, shared_1.escapeState)(fetchInstance).run.bind((0, shared_1.escapeState)(fetchInstance)), runAsync: (0, shared_1.escapeState)(fetchInstance).runAsync.bind((0, shared_1.escapeState)(fetchInstance)), mutate: (0, shared_1.escapeState)(fetchInstance).mutate.bind((0, shared_1.escapeState)(fetchInstance)) }; }, [fetchInstance]); if (shared_1.FRAMEWORK === 'vue') { return vueRefResult; } return { loading: fetchInstance.state.loading, data: fetchInstance.state.data, error: fetchInstance.state.error, params: fetchInstance.state.params || [], cancel: (0, ahooks_1.useMemoizedFn)(fetchInstance.cancel.bind(fetchInstance)), refresh: (0, ahooks_1.useMemoizedFn)(fetchInstance.refresh.bind(fetchInstance)), refreshAsync: (0, ahooks_1.useMemoizedFn)(fetchInstance.refreshAsync.bind(fetchInstance)), run: (0, ahooks_1.useMemoizedFn)(fetchInstance.run.bind(fetchInstance)), runAsync: (0, ahooks_1.useMemoizedFn)(fetchInstance.runAsync.bind(fetchInstance)), mutate: (0, ahooks_1.useMemoizedFn)(fetchInstance.mutate.bind(fetchInstance)) }; } exports["default"] = useRequestImplement;