UNPKG

@taro-hooks/use-request

Version:
87 lines (86 loc) 2.59 kB
"use strict"; function _call(body, then, direct) { if (direct) { return then ? then(body()) : body(); } try { var result = Promise.resolve(body()); return then ? result.then(then) : result; } catch (e) { return Promise.reject(e); } } function _async(f) { return function () { for (var args = [], i = 0; i < arguments.length; i++) { args[i] = arguments[i]; } try { return Promise.resolve(f.apply(this, args)); } catch (e) { return Promise.reject(e); } }; } Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var taro_1 = require("@tarojs/taro"); var core_1 = require("@taro-hooks/core"); var ahooks_1 = require("@taro-hooks/ahooks"); var limit_1 = tslib_1.__importDefault(require("../utils/limit")); var isOnline_1 = tslib_1.__importDefault(require("../utils/isOnline")); var listeners = []; function subscribe(listener) { listeners.push(listener); return function unsubscribe() { var index = listeners.indexOf(listener); if (index > -1) { listeners.splice(index, 1); } }; } var useRefreshOnWindowFocusPlugin = function useRefreshOnWindowFocusPlugin(fetchInstance, _ref) { var refreshOnWindowFocus = _ref.refreshOnWindowFocus, _ref$focusTimespan = _ref.focusTimespan, focusTimespan = _ref$focusTimespan === void 0 ? 5000 : _ref$focusTimespan; var unsubscribeRef = (0, core_1.useRef)(); var visible = (0, core_1.useRef)(true); var stopSubscribe = function stopSubscribe() { unsubscribeRef.current == null ? void 0 : unsubscribeRef.current(); }; var subscribeFocus = _async(function () { return _call((0, isOnline_1["default"]), function (online) { if (visible.current || !online) return; for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; listener(); } }); }); (0, taro_1.useDidShow)(function () { visible.current = true; subscribeFocus(); }); (0, taro_1.useDidHide)(function () { visible.current = false; subscribeFocus(); }); (0, core_1.useEffect)(function () { if (refreshOnWindowFocus) { var limitRefresh = (0, limit_1["default"])(fetchInstance.refresh.bind(fetchInstance), focusTimespan); unsubscribeRef.current = subscribe(function () { limitRefresh(); }); } return function () { stopSubscribe(); }; }, [refreshOnWindowFocus, focusTimespan]); (0, ahooks_1.useUnmount)(function () { stopSubscribe(); }); return {}; }; exports["default"] = useRefreshOnWindowFocusPlugin;