vue-hooks-plus
Version:
Vue hooks library
59 lines (58 loc) • 1.86 kB
JavaScript
const vue = require("vue");
const isDocumentVisible = require("../utils/isDocumentVisible");
const subscribeReVisible = require("../utils/subscribeReVisible");
const _interopDefaultLegacy = (e) => e && typeof e === "object" && "default" in e ? e : { default: e };
const isDocumentVisible__default = /* @__PURE__ */ _interopDefaultLegacy(isDocumentVisible);
const subscribeReVisible__default = /* @__PURE__ */ _interopDefaultLegacy(subscribeReVisible);
const usePollingPlugin = (fetchInstance, { pollingInterval, pollingWhenHidden = true, pollingErrorRetryCount = -1 }) => {
let timeouter;
const unsubscribeRef = vue.ref();
const countRef = vue.ref(0);
const stopPolling = () => {
var _a;
if (timeouter) {
clearTimeout(timeouter);
}
(_a = unsubscribeRef.value) == null ? void 0 : _a.call(unsubscribeRef);
};
vue.watchEffect(() => {
if (!vue.unref(pollingInterval)) {
stopPolling();
}
});
if (!vue.unref(pollingInterval)) {
return {};
}
return {
name: "pollingPlugin",
onBefore: () => {
stopPolling();
},
onError: () => {
countRef.value += 1;
},
onSuccess: () => {
countRef.value = 0;
},
onFinally: () => {
if (pollingErrorRetryCount === -1 || pollingErrorRetryCount !== -1 && countRef.value <= pollingErrorRetryCount) {
timeouter = setTimeout(() => {
if (!pollingWhenHidden && !isDocumentVisible__default.default()) {
unsubscribeRef.value = subscribeReVisible__default.default(() => {
fetchInstance.refresh();
});
} else {
fetchInstance.refresh();
}
}, vue.unref(pollingInterval));
} else {
countRef.value = 0;
}
},
onCancel: () => {
stopPolling();
}
};
};
module.exports = usePollingPlugin;
;