UNPKG

@emmveqz/react-components

Version:
39 lines (38 loc) 1.42 kB
"use strict"; // Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable no-plusplus */ const react_1 = require("react"); // const useAsyncEffect = (asyncEffectGetter, dependencies) => { const updates = (0, react_1.useRef)([]); (0, react_1.useEffect)(() => { const { cleanup, onUpdate, } = asyncEffectGetter(); updates.current.push({ controller: new AbortController(), func: onUpdate, }); const runUpdates = () => { var _a; (_a = updates.current[0]) === null || _a === void 0 ? void 0 : _a.func(updates.current[0].controller.signal).then(() => { updates.current.shift(); runUpdates(); }); }; if (updates.current.length === 1) { runUpdates(); } return () => { const count = updates.current.length - 1; for (let i = 0; i < count; i++) { // eslint-disable-next-line react-hooks/exhaustive-deps updates.current[i].controller.abort(); } // eslint-disable-next-line react-hooks/exhaustive-deps updates.current.splice(0, count); cleanup === null || cleanup === void 0 ? void 0 : cleanup(); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, dependencies); }; exports.default = useAsyncEffect;