UNPKG

@taro-hooks/use-request

Version:
69 lines 2.07 kB
import { useDidShow, useDidHide } from '@tarojs/taro'; import { useEffect, useRef } from '@taro-hooks/core'; import { useUnmount } from '@taro-hooks/ahooks'; import limit from '../utils/limit'; import isOnline from '../utils/isOnline'; 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); } } 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 = useRef(); var visible = useRef(true); var stopSubscribe = function stopSubscribe() { unsubscribeRef.current == null ? void 0 : unsubscribeRef.current(); }; var subscribeFocus = function subscribeFocus() { return _call(isOnline, function (online) { if (visible.current || !online) return; for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; listener(); } }); }; useDidShow(function () { visible.current = true; subscribeFocus(); }); useDidHide(function () { visible.current = false; subscribeFocus(); }); useEffect(function () { if (refreshOnWindowFocus) { var limitRefresh = limit(fetchInstance.refresh.bind(fetchInstance), focusTimespan); unsubscribeRef.current = subscribe(function () { limitRefresh(); }); } return function () { stopSubscribe(); }; }, [refreshOnWindowFocus, focusTimespan]); useUnmount(function () { stopSubscribe(); }); return {}; }; export default useRefreshOnWindowFocusPlugin;