UNPKG

@modern-kit/react

Version:
49 lines (45 loc) 1.3 kB
'use strict'; 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