UNPKG

ahooks

Version:
70 lines (69 loc) 2.45 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = require("react"); var _useUpdateEffect = _interopRequireDefault(require("../../../useUpdateEffect")); var _isDocumentVisible = _interopRequireDefault(require("../utils/isDocumentVisible")); var _subscribeReVisible = _interopRequireDefault(require("../utils/subscribeReVisible")); var usePollingPlugin = function usePollingPlugin(fetchInstance, _a) { var pollingInterval = _a.pollingInterval, _b = _a.pollingWhenHidden, pollingWhenHidden = _b === void 0 ? true : _b, _c = _a.pollingErrorRetryCount, pollingErrorRetryCount = _c === void 0 ? -1 : _c; var timerRef = (0, _react.useRef)(); var unsubscribeRef = (0, _react.useRef)(); var countRef = (0, _react.useRef)(0); var stopPolling = function stopPolling() { var _a; if (timerRef.current) { clearTimeout(timerRef.current); } (_a = unsubscribeRef.current) === null || _a === void 0 ? void 0 : _a.call(unsubscribeRef); }; (0, _useUpdateEffect["default"])(function () { if (!pollingInterval) { stopPolling(); } }, [pollingInterval]); if (!pollingInterval) { return {}; } return { onBefore: function onBefore() { stopPolling(); }, onError: function onError() { countRef.current += 1; }, onSuccess: function onSuccess() { countRef.current = 0; }, onFinally: function onFinally() { if (pollingErrorRetryCount === -1 || // When an error occurs, the request is not repeated after pollingErrorRetryCount retries pollingErrorRetryCount !== -1 && countRef.current <= pollingErrorRetryCount) { timerRef.current = setTimeout(function () { // if pollingWhenHidden = false && document is hidden, then stop polling and subscribe revisible if (!pollingWhenHidden && !(0, _isDocumentVisible["default"])()) { unsubscribeRef.current = (0, _subscribeReVisible["default"])(function () { fetchInstance.refresh(); }); } else { fetchInstance.refresh(); } }, pollingInterval); } else { countRef.current = 0; } }, onCancel: function onCancel() { stopPolling(); } }; }; var _default = usePollingPlugin; exports["default"] = _default;