@modern-kit/react
Version:
1 lines • 3.01 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../../src/hooks/useAsyncProcessQueue/index.ts"],"sourcesContent":["import { useCallback, useState, useRef } from 'react';\n\ntype RequestFunction<T> = (...args: any[]) => Promise<T>;\n\ninterface UseAsyncProcessQueueOptions {\n keepPreviousData?: boolean;\n}\n\nexport function useAsyncProcessQueue<T = unknown, E = unknown>({\n keepPreviousData = false,\n}: UseAsyncProcessQueueOptions = {}) {\n const requestQueue = useRef<RequestFunction<T>[]>([]);\n\n const [data, setData] = useState<T | null>(null);\n const [error, setError] = useState<E | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const handleRequestQueue = useCallback(async () => {\n if (requestQueue.current.length === 0) {\n return;\n }\n\n const requestFunc = requestQueue.current[0];\n setIsLoading(true);\n\n try {\n const res = await requestFunc();\n\n setData(res as T);\n setError(null);\n } catch (err) {\n setData(null);\n setError(err as E);\n } finally {\n requestQueue.current.shift();\n setIsLoading(false);\n\n await handleRequestQueue();\n }\n }, []);\n\n const addToProcessQueue = useCallback(\n async (callbackFunc: RequestFunction<T>) => {\n requestQueue.current.push(callbackFunc);\n\n if (requestQueue.current.length === 1) {\n if (!keepPreviousData) {\n setData(null);\n setError(null);\n }\n\n await handleRequestQueue();\n }\n },\n [keepPreviousData, handleRequestQueue]\n );\n\n return { data, error, isLoading, addToProcessQueue };\n}\n"],"names":["useRef","useState","useCallback"],"mappings":";;;;AAQO,SAAS,oBAAA,CAA+C;AAAA,EAC7D,gBAAA,GAAmB;AACrB,CAAA,GAAiC,EAAC,EAAG;AACnC,EAAA,MAAM,YAAA,GAAeA,YAAA,CAA6B,EAAE,CAAA;AAEpD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAmB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAmB,IAAI,CAAA;AACjD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,kBAAA,GAAqBC,kBAAY,YAAY;AACjD,IAAA,IAAI,YAAA,CAAa,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAA;AAC1C,IAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,WAAA,EAAY;AAE9B,MAAA,OAAA,CAAQ,GAAQ,CAAA;AAChB,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,QAAA,CAAS,GAAQ,CAAA;AAAA,IACnB,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,QAAQ,KAAA,EAAM;AAC3B,MAAA,YAAA,CAAa,KAAK,CAAA;AAElB,MAAA,MAAM,kBAAA,EAAmB;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAAoBA,iBAAA;AAAA,IACxB,OAAO,YAAA,KAAqC;AAC1C,MAAA,YAAA,CAAa,OAAA,CAAQ,KAAK,YAAY,CAAA;AAEtC,MAAA,IAAI,YAAA,CAAa,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACrC,QAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,UAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,UAAA,QAAA,CAAS,IAAI,CAAA;AAAA,QACf;AAEA,QAAA,MAAM,kBAAA,EAAmB;AAAA,MAC3B;AAAA,IACF,CAAA;AAAA,IACA,CAAC,kBAAkB,kBAAkB;AAAA,GACvC;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,iBAAA,EAAkB;AACrD;;;;"}