UNPKG

@modern-kit/react

Version:
47 lines (44 loc) 1.26 kB
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