@emmveqz/react-components
Version:
Diverse Components for React
39 lines (38 loc) • 1.42 kB
JavaScript
;
//
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;