@modern-kit/react
Version:
49 lines (45 loc) • 1.3 kB
JavaScript
;
var React = require('react');
function useAsyncProcessQueue({
keepPreviousData = false
} = {}) {
const requestQueue = React.useRef([]);
const [data, setData] = React.useState(null);
const [error, setError] = React.useState(null);
const [isLoading, setIsLoading] = React.useState(false);
const handleRequestQueue = React.useCallback(async () => {
if (requestQueue.current.length === 0) {
return;
}
const requestFunc = requestQueue.current[0];
setIsLoading(true);
try {
const res = await requestFunc();
setData(res);
setError(null);
} catch (err) {
setData(null);
setError(err);
} finally {
requestQueue.current.shift();
setIsLoading(false);
await handleRequestQueue();
}
}, []);
const addToProcessQueue = React.useCallback(
async (callbackFunc) => {
requestQueue.current.push(callbackFunc);
if (requestQueue.current.length === 1) {
if (!keepPreviousData) {
setData(null);
setError(null);
}
await handleRequestQueue();
}
},
[keepPreviousData, handleRequestQueue]
);
return { data, error, isLoading, addToProcessQueue };
}
exports.useAsyncProcessQueue = useAsyncProcessQueue;
//# sourceMappingURL=index.cjs.map