@taro-hooks/use-request
Version:
useRequest hook for Taro
69 lines • 2.07 kB
JavaScript
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;