@taro-hooks/use-request
Version:
useRequest hook for Taro
87 lines (86 loc) • 2.59 kB
JavaScript
;
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;