UNPKG

@gaddario98/react-queries

Version:
1 lines 25.4 kB
{"version":3,"file":"index.mjs","sources":["../../lib/endpoint.ts","../../lib/api.ts","../../lib/hooks.ts"],"sourcesContent":["let endpoints: Record<string, string> = {\r\n custom: '',\r\n};\r\n\r\nconst setEndpoints = (data: Record<string, string>) => {\r\n endpoints = { ...endpoints, ...data };\r\n};\r\n\r\ntype Endpoint = Record<string, string>;\r\nexport { endpoints, type Endpoint, setEndpoints };\r\n","import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';\r\n\r\ntype ApiMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';\r\ntype ApiConverter<TProps, TConverter> = (props: TProps) => TConverter;\r\n\r\n// Crea un'istanza di Axios\r\nconst apiClient = axios.create();\r\nconst url = '';\r\n\r\n// Aggiungi un interceptor di richiesta\r\napiClient.interceptors.request.use(\r\n async (config) => {\r\n config.baseURL = url;\r\n return config;\r\n },\r\n async (error) => {\r\n return await Promise.reject(error);\r\n },\r\n);\r\n\r\napiClient.interceptors.response.use(\r\n (response) => {\r\n return response;\r\n },\r\n (error) => {\r\n if (error.response) {\r\n throw new Error(\r\n error.response.data?.message ||\r\n error.response.data?.error ||\r\n `Error ${error.response.status}`,\r\n );\r\n } else if (error.request) {\r\n throw new Error(\r\n 'No response from server - request timeout or network issue',\r\n );\r\n } else {\r\n throw new Error('Request configuration error');\r\n }\r\n },\r\n);\r\n\r\nconst apiRequest = async <TProps, TResponse, TConverter = TProps>(\r\n url: string,\r\n method: ApiMethod,\r\n body?: TProps,\r\n headers?: AxiosRequestConfig['headers'],\r\n converter?: ApiConverter<TProps, TConverter>,\r\n): Promise<TResponse> => {\r\n try {\r\n const data = converter && body ? converter(body) : body;\r\n const response: AxiosResponse<TResponse & { error?: string }> =\r\n await apiClient({\r\n url,\r\n method,\r\n data,\r\n headers,\r\n });\r\n\r\n if (response.status >= 200 && response.status < 300) {\r\n return response.data;\r\n }\r\n\r\n throw new Error(response.data?.error ?? 'Error');\r\n } catch (error) {\r\n console.error('API Request Error:', error);\r\n if (error instanceof Error) {\r\n throw error;\r\n }\r\n throw new Error('Unknown error occurred');\r\n }\r\n};\r\n\r\nconst fetchRequest = async <TProps, TResponse, TConverter = TProps>(\r\n url: string,\r\n headers?: AxiosRequestConfig['headers'],\r\n): Promise<TResponse> => {\r\n return apiRequest<TProps, TResponse, TConverter>(url, 'GET', undefined, headers);\r\n};\r\n\r\nexport { fetchRequest, apiRequest };\r\nexport type { ApiMethod, ApiConverter };\r\n","import {\r\n useMutation,\r\n useQueries,\r\n useQuery,\r\n UseQueryResult,\r\n queryClient,\r\n} from \"@gaddario98/react-providers\";\r\nimport { endpoints } from \"./endpoint\";\r\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\r\nimport { apiRequest, fetchRequest } from \"./api\";\r\nimport {\r\n QueryProps,\r\n MultipleQueryResponse,\r\n QueriesArray,\r\n QueriesProps,\r\n AllMutation,\r\n MutationItem,\r\n QueryItem,\r\n ContextValue,\r\n QueryConfigArray,\r\n} from \"./types\";\r\nimport { useNotification } from \"@gaddario98/react-notifications\";\r\nimport { useAuthValue } from \"@gaddario98/react-auth\";\r\n\r\nlet validateApi = () => {\r\n return true;\r\n};\r\n\r\nexport const setValidateApi = (validate: () => boolean) => {\r\n validateApi = validate;\r\n};\r\n\r\nexport const useQueryApi = <TGetProps, TGetResponse>(\r\n props: Omit<QueryProps<string, TGetResponse>, \"keyToMap\">\r\n) => {\r\n const {\r\n enabled,\r\n endpoint,\r\n queryKey,\r\n customQueryFn,\r\n headers,\r\n disableAuthControl,\r\n onDataChanged,\r\n } = props;\r\n const auth = useAuthValue();\r\n const base = useMemo(() => endpoints[endpoint[0]], [endpoint]);\r\n\r\n const queryResult = useQuery<TGetResponse>({\r\n queryKey,\r\n queryFn: async () => {\r\n const res = await (customQueryFn?.() ??\r\n fetchRequest<TGetProps, TGetResponse>(\r\n `${base ? base + \"/\" : \"\"}${endpoint?.[1] ?? \"\"}`,\r\n {\r\n Authorization: auth?.token ? `Bearer ${auth?.token ?? \"\"}` : \"\",\r\n ...headers,\r\n }\r\n ));\r\n onDataChanged?.(res);\r\n return res;\r\n },\r\n enabled:\r\n !!enabled && (disableAuthControl || (!!auth?.isLogged && validateApi())),\r\n retry: 1,\r\n retryDelay: 1000,\r\n });\r\n\r\n return queryResult;\r\n};\r\n\r\nexport const useMultipleQuery = <Q extends QueriesArray>(\r\n settings: QueryProps<Q[number][\"key\"], Q[number][\"response\"]>[] = []\r\n) => {\r\n const auth = useAuthValue();\r\n\r\n const results = useQueries({\r\n queries: settings.map(\r\n ({\r\n enabled,\r\n endpoint: endpointArr,\r\n queryKey,\r\n customQueryFn,\r\n headers,\r\n disableAuthControl,\r\n onDataChanged,\r\n }) => {\r\n const [key, path] = endpointArr;\r\n const baseUrl = endpoints[key];\r\n const fullEndpoint = [baseUrl, path].filter(Boolean).join(\"/\");\r\n return {\r\n queryKey,\r\n queryFn: async () => {\r\n const res = await (customQueryFn?.() ??\r\n fetchRequest<Q[number][\"props\"], Q[number][\"response\"]>(\r\n fullEndpoint,\r\n {\r\n Authorization: auth?.token ? `Bearer ${auth.token}` : \"\",\r\n ...headers,\r\n }\r\n ));\r\n onDataChanged?.(res);\r\n return res;\r\n },\r\n enabled:\r\n !!enabled &&\r\n (disableAuthControl || (!!auth?.isLogged && validateApi())),\r\n retry: 1,\r\n retryDelay: 1000,\r\n } as Parameters<typeof useQuery>[0];\r\n }\r\n ),\r\n combine: useCallback(\r\n (results: UseQueryResult<Q[number][\"response\"], Error>[]) =>\r\n results.reduce<MultipleQueryResponse<Q>>((prev, result, index) => {\r\n return {\r\n ...prev,\r\n [settings[index].keyToMap]: {\r\n data: result.data as Q[number][\"response\"],\r\n isLoadingMapped:\r\n !settings[index]?.disableLoading && result.isLoading,\r\n isLoading: result.isLoading,\r\n isFetching: result.isFetching,\r\n isPending: result.isPending,\r\n },\r\n };\r\n }, {} as MultipleQueryResponse<Q>),\r\n [settings]\r\n ),\r\n });\r\n /*\r\n const prevOnDataChangedMappedRef = useRef<\r\n Array<{\r\n keyToMap: Q[number][\"key\"];\r\n onDataChanged: ((data: Q[number][\"response\"]) => void) | undefined;\r\n }>\r\n >([]);\r\n\r\n const onDataChangedMapped = useMemo(() => {\r\n const data = settings.map(({ keyToMap, onDataChanged }) => {\r\n return {\r\n keyToMap,\r\n onDataChanged,\r\n };\r\n });\r\n if (\r\n JSON.stringify(prevOnDataChangedMappedRef.current) !==\r\n JSON.stringify(data)\r\n ) {\r\n prevOnDataChangedMappedRef.current = data;\r\n }\r\n prevOnDataChangedMappedRef.current = data;\r\n return prevOnDataChangedMappedRef.current;\r\n }, [settings]);\r\n\r\n onDataChangedMapped.forEach((data) => {\r\n const { onDataChanged, keyToMap } = data;\r\n const result = useMemo(() => results[keyToMap], [results, keyToMap]);\r\n\r\n useEffect(() => {\r\n if (\r\n onDataChanged &&\r\n result.data !== undefined &&\r\n !result.isLoading &&\r\n !result.isFetching &&\r\n !result.isPending\r\n ) {\r\n onDataChanged(result.data);\r\n }\r\n }, [\r\n result.data,\r\n onDataChanged,\r\n result.isLoading,\r\n result.isFetching,\r\n result.isPending,\r\n ]);\r\n });*/\r\n\r\n return results;\r\n};\r\n\r\nexport const useMutateApi = <TProps, TResponse, TConverter = null>({\r\n endpoint,\r\n queryKeyToInvalidate,\r\n converter,\r\n customRequest,\r\n headers,\r\n isTest,\r\n mutateOptions,\r\n method,\r\n notification,\r\n}: QueriesProps<TProps, TResponse, TConverter>) => {\r\n const { showNotification } = useNotification();\r\n const auth = useAuthValue();\r\n\r\n return useMutation<TResponse, Error, TProps>({\r\n mutationFn: async (data) => {\r\n if (isTest) {\r\n return \"test\" as TResponse;\r\n }\r\n if (auth?.isLogged && !validateApi())\r\n throw new Error(\"Utente non autenticato\");\r\n return (customRequest ?? apiRequest<TProps, TResponse, TConverter>)(\r\n `${endpoints[endpoint[0]]}/${endpoint?.[1] ?? \"\"}`,\r\n method,\r\n data,\r\n {\r\n Authorization: auth?.token ? `Bearer ${auth?.token ?? \"\"}` : \"\",\r\n ...headers,\r\n },\r\n converter\r\n );\r\n },\r\n ...(mutateOptions || {}),\r\n onSuccess: (data: TResponse, variables: TProps, context: unknown) => {\r\n mutateOptions?.onSuccess?.(data, variables, context);\r\n queryKeyToInvalidate?.forEach((queryKey) => {\r\n queryClient.invalidateQueries({ queryKey: [queryKey], exact: false });\r\n });\r\n const notificationProps =\r\n typeof notification?.success === \"function\"\r\n ? notification.success(data)\r\n : notification?.success;\r\n if (notificationProps?.message) {\r\n showNotification({\r\n message: notificationProps.message,\r\n type: notificationProps?.type ?? \"success\",\r\n ...notificationProps,\r\n });\r\n }\r\n },\r\n onError(error: Error, variables: TProps, context: unknown) {\r\n mutateOptions?.onError?.(error, variables, context);\r\n if (error?.message) {\r\n const notificationProps =\r\n typeof notification?.error === \"function\"\r\n ? notification.error(error?.message ?? \"Error\")\r\n : notification?.error;\r\n showNotification({\r\n message:\r\n notificationProps?.message ??\r\n error?.message ??\r\n \"An unexpected error occurred\",\r\n type: notificationProps?.type ?? \"error\",\r\n ...notificationProps,\r\n });\r\n }\r\n },\r\n });\r\n};\r\n\r\nexport const useApi = <Q extends QueriesArray>(\r\n configs: QueryConfigArray<Q>\r\n): ContextValue<Q> => {\r\n // Filter and prepare query configurations\r\n const queryItems = useMemo(\r\n () => configs?.filter((q): q is QueryItem<Q> => q.type === \"query\"),\r\n [configs]\r\n );\r\n\r\n const queryConfigs = useMemo(() => {\r\n return queryItems\r\n .map((item) =>\r\n item.queryConfig ? { ...item.queryConfig, keyToMap: item.key } : null\r\n )\r\n .filter(Boolean) as QueryProps<Q[number][\"key\"], Q[number][\"response\"]>[];\r\n }, [queryItems]);\r\n\r\n // Execute all queries with a single hook\r\n const queriesResult = useMultipleQuery<Q>(queryConfigs);\r\n\r\n // Filter mutation configs\r\n const mutationItems = useMemo(\r\n () =>\r\n configs?.filter(\r\n (q): q is MutationItem<Q> => q.type === \"mutation\" && !!q.mutationConfig\r\n ),\r\n [configs]\r\n );\r\n\r\n // Define a default config for empty slots\r\n const defaultMutationConfig = {\r\n endpoint: [\"default\"],\r\n method: \"POST\" as const,\r\n };\r\n\r\n // Create mutation hooks - each must be declared separately to follow React's rules of hooks\r\n const mutation1 = useMutateApi(\r\n mutationItems[0]?.mutationConfig || defaultMutationConfig\r\n );\r\n const mutation2 = useMutateApi(\r\n mutationItems[1]?.mutationConfig || defaultMutationConfig\r\n );\r\n const mutation3 = useMutateApi(\r\n mutationItems[2]?.mutationConfig || defaultMutationConfig\r\n );\r\n const mutation4 = useMutateApi(\r\n mutationItems[3]?.mutationConfig || defaultMutationConfig\r\n );\r\n const mutation5 = useMutateApi(\r\n mutationItems[4]?.mutationConfig || defaultMutationConfig\r\n );\r\n const mutation6 = useMutateApi(\r\n mutationItems[5]?.mutationConfig || defaultMutationConfig\r\n );\r\n const mutation7 = useMutateApi(\r\n mutationItems[6]?.mutationConfig || defaultMutationConfig\r\n );\r\n const mutation8 = useMutateApi(\r\n mutationItems[7]?.mutationConfig || defaultMutationConfig\r\n );\r\n const mutation9 = useMutateApi(\r\n mutationItems[8]?.mutationConfig || defaultMutationConfig\r\n );\r\n const mutation10 = useMutateApi(\r\n mutationItems[9]?.mutationConfig || defaultMutationConfig\r\n );\r\n\r\n // Store all mutation instances in an array for mapping\r\n const mutationInstances = useMemo(\r\n () => [\r\n mutation1,\r\n mutation2,\r\n mutation3,\r\n mutation4,\r\n mutation5,\r\n mutation6,\r\n mutation7,\r\n mutation8,\r\n mutation9,\r\n mutation10,\r\n ],\r\n [\r\n mutation1,\r\n mutation10,\r\n mutation2,\r\n mutation3,\r\n mutation4,\r\n mutation5,\r\n mutation6,\r\n mutation7,\r\n mutation8,\r\n mutation9,\r\n ]\r\n );\r\n\r\n // Map mutations to their keys\r\n const allMutation = useMemo(() => {\r\n const result = {} as AllMutation<Q>;\r\n\r\n mutationItems.forEach((item, index) => {\r\n if (index < mutationInstances.length) {\r\n result[item.key as keyof AllMutation<Q>] = mutationInstances[index];\r\n } else {\r\n console.warn(\r\n `Maximum number of mutations (${mutationInstances.length}) exceeded. Mutation \"${item.key}\" was not created.`\r\n );\r\n }\r\n });\r\n\r\n return result;\r\n }, [mutationItems, mutationInstances]);\r\n\r\n // Return both queries and mutations\r\n return { allMutation, allQuery: queriesResult };\r\n};\r\n"],"names":[],"mappings":"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"}