@siberiacancode/reactuse 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/hooks/useDidUpdate/useDidUpdate.cjs.map +1 -1
- package/dist/cjs/hooks/useDropZone/useDropZone.cjs +2 -0
- package/dist/cjs/hooks/useDropZone/useDropZone.cjs.map +1 -0
- package/dist/cjs/hooks/useEventSource/useEventSource.cjs +2 -0
- package/dist/cjs/hooks/useEventSource/useEventSource.cjs.map +1 -0
- package/dist/cjs/hooks/useHover/useHover.cjs +1 -1
- package/dist/cjs/hooks/useHover/useHover.cjs.map +1 -1
- package/dist/cjs/hooks/useQuery/useQuery.cjs +1 -1
- package/dist/cjs/hooks/useQuery/useQuery.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/esm/hooks/useDidUpdate/useDidUpdate.mjs.map +1 -1
- package/dist/esm/hooks/useDropZone/useDropZone.mjs +50 -0
- package/dist/esm/hooks/useDropZone/useDropZone.mjs.map +1 -0
- package/dist/esm/hooks/useEventSource/useEventSource.mjs +52 -0
- package/dist/esm/hooks/useEventSource/useEventSource.mjs.map +1 -0
- package/dist/esm/hooks/useHover/useHover.mjs +9 -6
- package/dist/esm/hooks/useHover/useHover.mjs.map +1 -1
- package/dist/esm/hooks/useQuery/useQuery.mjs +27 -29
- package/dist/esm/hooks/useQuery/useQuery.mjs.map +1 -1
- package/dist/esm/index.mjs +260 -256
- package/dist/esm/index.mjs.map +1 -1
- package/dist/types/hooks/index.d.ts +2 -0
- package/dist/types/hooks/useDropZone/useDropZone.d.ts +80 -0
- package/dist/types/hooks/useEventSource/useEventSource.d.ts +47 -0
- package/dist/types/hooks/useHover/useHover.d.ts +11 -4
- package/dist/types/hooks/useQuery/useQuery.d.ts +0 -1
- package/package.json +2 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQuery.mjs","sources":["../../../../src/hooks/useQuery/useQuery.ts"],"sourcesContent":["import type { DependencyList } from 'react';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { getRetry } from '@/utils/helpers';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\nimport { useMount } from '../useMount/useMount';\n\n/* The use query return type */\nexport interface UseQueryOptions<QueryData, Data> {\n /* The enabled state of the query */\n enabled?: boolean;\n /* The initial data for the hook */\n initialData?: (() => Data) | Data;\n /* The depends for the hook */\n keys?: DependencyList;\n /* The placeholder data for the hook */\n placeholderData?: (() => Data) | Data;\n /* The refetch interval */\n refetchInterval?: number;\n /* The retry count of requests */\n retry?: boolean | number;\n /* The retry delay of requests */\n retryDelay?: ((retry: number, error: Error) => number) | number;\n /* The callback function to be invoked on error */\n onError?: (error: Error) => void;\n /* The callback function to be invoked on success */\n onSuccess?: (data: Data) => void;\n /* The select function to be invoked */\n select?: (data: QueryData) => Data;\n}\n\ninterface UseQueryCallbackParams {\n /* The depends for the hook */\n keys: DependencyList;\n /* The abort signal */\n signal: AbortSignal;\n}\n\n/* The use query return type */\nexport interface UseQueryReturn<Data> {\n /* The abort function */\n abort: AbortController['abort'];\n /* The state of the query */\n data?: Data;\n /* The success state of the query */\n error?: Error;\n /* The error state of the query */\n isError: boolean;\n /* The fetching state of the query */\n isFetching: boolean;\n /* The loading state of the query */\n isLoading: boolean;\n /* The refetching state of the query */\n isRefetching: boolean;\n /* The success state of the query */\n isSuccess: boolean;\n /* The refetch function */\n refetch: () => void;\n}\n\n/**\n * @name useQuery\n * @description - Hook that defines the logic when query data\n * @category Utilities\n *\n * @template Data The type of the data\n * @param {() => Promise<Data>} callback The callback function to be invoked\n * @param {DependencyList} [options.keys] The dependencies for the hook\n * @param {(data: Data) => void} [options.onSuccess] The callback function to be invoked on success\n * @param {(error: Error) => void} [options.onError] The callback function to be invoked on error\n * @param {UseQueryOptionsSelect<Data>} [options.select] The select function to be invoked\n * @param {Data | (() => Data)} [options.initialData] The initial data for the hook\n * @param {Data | (() => Data)} [options.placeholderData] The placeholder data for the hook\n * @param {number} [options.refetchInterval] The refetch interval\n * @param {boolean | number} [options.retry] The retry count of requests\n * @returns {UseQueryReturn<Data>} An object with the state of the query\n *\n * @example\n * const { data, isFetching, isLoading, isError, isSuccess, error, refetch, isRefetching, abort, aborted } = useQuery(() => fetch('url'));\n */\nexport const useQuery = <QueryData, Data = QueryData>(\n callback: (params: UseQueryCallbackParams) => Promise<QueryData>,\n options?: UseQueryOptions<QueryData, Data>\n): UseQueryReturn<Data> => {\n const enabled = options?.enabled ?? true;\n const retryCountRef = useRef(options?.retry ? getRetry(options.retry) : 0);\n const alreadyRequested = useRef(false);\n\n const [isFetching, setIsFetching] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n const [isRefetching, setIsRefetching] = useState(false);\n const [isSuccess, setIsSuccess] = useState(!!options?.initialData);\n\n const [error, setError] = useState<Error | undefined>(undefined);\n const [data, setData] = useState<Data | undefined>(options?.initialData);\n\n const abortControllerRef = useRef<AbortController>(new AbortController());\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>(undefined);\n\n const keys = options?.keys ?? [];\n\n const abort = () => {\n abortControllerRef.current.abort();\n abortControllerRef.current = new AbortController();\n };\n\n const request = (action: 'init' | 'refetch') => {\n abort();\n\n setIsFetching(true);\n if (action === 'init') {\n alreadyRequested.current = true;\n setIsLoading(true);\n }\n if (action === 'refetch') setIsRefetching(true);\n callback({ signal: abortControllerRef.current.signal, keys })\n .then((response) => {\n const data = options?.select ? options?.select(response) : response;\n options?.onSuccess?.(data as Data);\n setData(data as Data);\n setIsSuccess(true);\n setError(undefined);\n setIsError(false);\n setIsFetching(false);\n if (action === 'init') setIsLoading(false);\n if (action === 'refetch') setIsRefetching(false);\n })\n .catch((error: Error) => {\n if (retryCountRef.current > 0) {\n retryCountRef.current -= 1;\n const retryDelay =\n typeof options?.retryDelay === 'function'\n ? options?.retryDelay(retryCountRef.current, error)\n : options?.retryDelay;\n\n if (retryDelay) {\n setTimeout(() => request(action), retryDelay);\n return;\n }\n\n return request(action);\n }\n options?.onError?.(error);\n setData(undefined);\n setIsSuccess(false);\n setError(error);\n setIsError(true);\n setIsFetching(false);\n if (action === 'init') setIsLoading(false);\n if (action === 'refetch') setIsRefetching(false);\n retryCountRef.current = options?.retry ? getRetry(options.retry) : 0;\n })\n .finally(() => {\n if (options?.refetchInterval) {\n const interval = setInterval(() => {\n clearInterval(interval);\n request('refetch');\n }, options?.refetchInterval);\n intervalIdRef.current = interval;\n }\n });\n };\n\n useMount(() => {\n if (!enabled) return;\n request('init');\n });\n\n useDidUpdate(() => {\n if (!enabled) return;\n request(alreadyRequested.current ? 'refetch' : 'init');\n }, [enabled, ...keys]);\n\n useEffect(() => {\n return () => {\n clearInterval(intervalIdRef.current);\n };\n }, [enabled, options?.refetchInterval, options?.retry, ...keys]);\n\n const refetch = () => request('refetch');\n\n const placeholderData =\n typeof options?.placeholderData === 'function'\n ? (options?.placeholderData as () => Data)()\n : options?.placeholderData;\n\n return {\n abort,\n data: data ?? placeholderData,\n error,\n refetch,\n isFetching,\n isLoading,\n isError,\n isSuccess,\n isRefetching\n };\n};\n"],"names":["useQuery","callback","options","enabled","retryCountRef","useRef","getRetry","alreadyRequested","isFetching","setIsFetching","useState","isLoading","setIsLoading","isError","setIsError","isRefetching","setIsRefetching","isSuccess","setIsSuccess","error","setError","data","setData","abortControllerRef","intervalIdRef","keys","abort","request","action","response","_a","retryDelay","interval","useMount","useDidUpdate","useEffect","refetch","placeholderData"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useQuery.mjs","sources":["../../../../src/hooks/useQuery/useQuery.ts"],"sourcesContent":["import type { DependencyList } from 'react';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { getRetry } from '@/utils/helpers';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\nimport { useMount } from '../useMount/useMount';\n\n/* The use query return type */\nexport interface UseQueryOptions<QueryData, Data> {\n /* The enabled state of the query */\n enabled?: boolean;\n /* The depends for the hook */\n keys?: DependencyList;\n /* The placeholder data for the hook */\n placeholderData?: (() => Data) | Data;\n /* The refetch interval */\n refetchInterval?: number;\n /* The retry count of requests */\n retry?: boolean | number;\n /* The retry delay of requests */\n retryDelay?: ((retry: number, error: Error) => number) | number;\n /* The callback function to be invoked on error */\n onError?: (error: Error) => void;\n /* The callback function to be invoked on success */\n onSuccess?: (data: Data) => void;\n /* The select function to be invoked */\n select?: (data: QueryData) => Data;\n}\n\ninterface UseQueryCallbackParams {\n /* The depends for the hook */\n keys: DependencyList;\n /* The abort signal */\n signal: AbortSignal;\n}\n\n/* The use query return type */\nexport interface UseQueryReturn<Data> {\n /* The abort function */\n abort: AbortController['abort'];\n /* The state of the query */\n data?: Data;\n /* The success state of the query */\n error?: Error;\n /* The error state of the query */\n isError: boolean;\n /* The fetching state of the query */\n isFetching: boolean;\n /* The loading state of the query */\n isLoading: boolean;\n /* The refetching state of the query */\n isRefetching: boolean;\n /* The success state of the query */\n isSuccess: boolean;\n /* The refetch function */\n refetch: () => void;\n}\n\n/**\n * @name useQuery\n * @description - Hook that defines the logic when query data\n * @category Utilities\n *\n * @template Data The type of the data\n * @param {() => Promise<Data>} callback The callback function to be invoked\n * @param {DependencyList} [options.keys] The dependencies for the hook\n * @param {(data: Data) => void} [options.onSuccess] The callback function to be invoked on success\n * @param {(error: Error) => void} [options.onError] The callback function to be invoked on error\n * @param {UseQueryOptionsSelect<Data>} [options.select] The select function to be invoked\n * @param {Data | (() => Data)} [options.initialData] The initial data for the hook\n * @param {Data | (() => Data)} [options.placeholderData] The placeholder data for the hook\n * @param {number} [options.refetchInterval] The refetch interval\n * @param {boolean | number} [options.retry] The retry count of requests\n * @returns {UseQueryReturn<Data>} An object with the state of the query\n *\n * @example\n * const { data, isFetching, isLoading, isError, isSuccess, error, refetch, isRefetching, abort, aborted } = useQuery(() => fetch('url'));\n */\nexport const useQuery = <QueryData, Data = QueryData>(\n callback: (params: UseQueryCallbackParams) => Promise<QueryData>,\n options?: UseQueryOptions<QueryData, Data>\n): UseQueryReturn<Data> => {\n const enabled = options?.enabled ?? true;\n const retryCountRef = useRef(options?.retry ? getRetry(options.retry) : 0);\n const alreadyRequested = useRef(false);\n\n const [isFetching, setIsFetching] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n const [isRefetching, setIsRefetching] = useState(false);\n const [isSuccess, setIsSuccess] = useState(!!options?.placeholderData);\n\n const [error, setError] = useState<Error | undefined>(undefined);\n const [data, setData] = useState<Data | undefined>(options?.placeholderData);\n\n const abortControllerRef = useRef<AbortController>(new AbortController());\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>(undefined);\n\n const keys = options?.keys ?? [];\n\n const abort = () => {\n abortControllerRef.current.abort();\n abortControllerRef.current = new AbortController();\n };\n\n const request = (action: 'init' | 'refetch') => {\n abort();\n\n setIsFetching(true);\n if (action === 'init') {\n alreadyRequested.current = true;\n setIsLoading(true);\n }\n if (action === 'refetch') setIsRefetching(true);\n callback({ signal: abortControllerRef.current.signal, keys })\n .then((response) => {\n const data = options?.select ? options?.select(response) : response;\n options?.onSuccess?.(data as Data);\n setData(data as Data);\n setIsSuccess(true);\n setError(undefined);\n setIsError(false);\n setIsFetching(false);\n if (action === 'init') setIsLoading(false);\n if (action === 'refetch') setIsRefetching(false);\n })\n .catch((error: Error) => {\n if (retryCountRef.current > 0) {\n retryCountRef.current -= 1;\n const retryDelay =\n typeof options?.retryDelay === 'function'\n ? options?.retryDelay(retryCountRef.current, error)\n : options?.retryDelay;\n\n if (retryDelay) {\n setTimeout(() => request(action), retryDelay);\n return;\n }\n\n return request(action);\n }\n options?.onError?.(error);\n setData(undefined);\n setIsSuccess(false);\n setError(error);\n setIsError(true);\n setIsFetching(false);\n if (action === 'init') setIsLoading(false);\n if (action === 'refetch') setIsRefetching(false);\n retryCountRef.current = options?.retry ? getRetry(options.retry) : 0;\n })\n .finally(() => {\n if (options?.refetchInterval) {\n const interval = setInterval(() => {\n clearInterval(interval);\n request('refetch');\n }, options?.refetchInterval);\n intervalIdRef.current = interval;\n }\n });\n };\n\n useMount(() => {\n if (!enabled) return;\n request('init');\n });\n\n useDidUpdate(() => {\n if (!enabled) return;\n request(alreadyRequested.current ? 'refetch' : 'init');\n }, [enabled, ...keys]);\n\n useEffect(() => {\n return () => {\n clearInterval(intervalIdRef.current);\n };\n }, [enabled, options?.refetchInterval, options?.retry, ...keys]);\n\n const refetch = () => request('refetch');\n\n return {\n abort,\n data,\n error,\n refetch,\n isFetching,\n isLoading,\n isError,\n isSuccess,\n isRefetching\n };\n};\n"],"names":["useQuery","callback","options","enabled","retryCountRef","useRef","getRetry","alreadyRequested","isFetching","setIsFetching","useState","isLoading","setIsLoading","isError","setIsError","isRefetching","setIsRefetching","isSuccess","setIsSuccess","error","setError","data","setData","abortControllerRef","intervalIdRef","keys","abort","request","action","response","_a","retryDelay","interval","useMount","useDidUpdate","useEffect"],"mappings":"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"}
|