UNPKG

vue-hooks-plus

Version:
59 lines (58 loc) 1.86 kB
"use strict"; 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;