vue-admin-core
Version:
A Component Library for Vue 3
62 lines (57 loc) • 1.58 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var subscribeReVisible = require('../../__utils__/subscribeReVisible.js');
const usePollingPlugin = (fetchInstance, { pollingInterval, pollingWhenHidden = true, pollingErrorRetryCount = -1 }) => {
let timer = null;
let count = 0;
let unsubscribe = () => {
};
const stopPolling = () => {
if (timer) {
clearTimeout(timer);
}
if (unsubscribe)
unsubscribe();
};
vue.watch(vue.toRef(pollingInterval), () => {
if (!vue.toValue(pollingInterval)) {
stopPolling();
}
});
if (!pollingInterval) {
return {};
}
return {
onBefore: () => {
stopPolling();
},
onError: () => {
count += 1;
},
onSuccess: () => {
count = 0;
},
onFinally: () => {
if (pollingErrorRetryCount === -1 || // When an error occurs, the request is not repeated after pollingErrorRetryCount retries
pollingErrorRetryCount !== -1 && count <= pollingErrorRetryCount) {
timer = setTimeout(() => {
if (!pollingWhenHidden && !subscribeReVisible.isDocumentVisible()) {
unsubscribe = subscribeReVisible.default(() => {
fetchInstance.refresh();
});
} else {
fetchInstance.refresh();
}
}, vue.toValue(pollingInterval));
} else {
count = 0;
}
},
onCancel: () => {
stopPolling();
}
};
};
exports.default = usePollingPlugin;
//# sourceMappingURL=usePollingPlugin.js.map