@modern-kit/react
Version:
47 lines (44 loc) • 1.26 kB
JavaScript
import { useRef, useState, useCallback } from 'react';
function useAsyncProcessQueue({
keepPreviousData = false
} = {}) {
const requestQueue = useRef([]);
const [data, setData] = useState(null);
const [error, setError] = useState(null);
const [isLoading, setIsLoading] = useState(false);
const handleRequestQueue = 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 = 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 };
}
export { useAsyncProcessQueue };
//# sourceMappingURL=index.mjs.map