@ventlio/tanstack-query 0.3.0 → 0.3.2

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.
Files changed (49) hide show
  1. package/dist/config/bootstrapQueryRequest.js +1 -1
  2. package/dist/config/useQueryConfig.js +1 -27
  3. package/dist/config/useQueryConfig.js.map +1 -1
  4. package/dist/config/useQueryHeaders.js +15 -4
  5. package/dist/config/useQueryHeaders.js.map +1 -1
  6. package/dist/config/useReactNativeEnv.js +3 -3
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.js +2 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.mjs +123 -120
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/model/useKeyTrackerModel.d.ts +1 -1
  13. package/dist/model/useKeyTrackerModel.js +1 -5
  14. package/dist/model/useKeyTrackerModel.js.map +1 -1
  15. package/dist/queries/useDeleteRequest.d.ts +4 -4
  16. package/dist/queries/useDeleteRequest.js +11 -10
  17. package/dist/queries/useDeleteRequest.js.map +1 -1
  18. package/dist/queries/useGetInfiniteRequest.d.ts +4 -4
  19. package/dist/queries/useGetInfiniteRequest.js +23 -17
  20. package/dist/queries/useGetInfiniteRequest.js.map +1 -1
  21. package/dist/queries/useGetRequest.d.ts +4 -4
  22. package/dist/queries/useGetRequest.js +20 -14
  23. package/dist/queries/useGetRequest.js.map +1 -1
  24. package/dist/queries/usePatchRequest.d.ts +4 -4
  25. package/dist/queries/usePatchRequest.js +13 -16
  26. package/dist/queries/usePatchRequest.js.map +1 -1
  27. package/dist/queries/usePostRequest.d.ts +4 -4
  28. package/dist/queries/usePostRequest.js +13 -11
  29. package/dist/queries/usePostRequest.js.map +1 -1
  30. package/dist/stores/index.d.ts +1 -0
  31. package/dist/stores/usePauseFutureRequests.d.ts +7 -0
  32. package/dist/stores/usePauseFutureRequests.js +19 -0
  33. package/dist/stores/usePauseFutureRequests.js.map +1 -0
  34. package/dist/types/index.d.ts +4 -7
  35. package/package.json +3 -2
  36. package/src/config/bootstrapQueryRequest.ts +1 -1
  37. package/src/config/useQueryConfig.ts +4 -41
  38. package/src/config/useQueryHeaders.ts +18 -6
  39. package/src/config/useReactNativeEnv.ts +3 -3
  40. package/src/index.ts +2 -0
  41. package/src/model/useKeyTrackerModel.ts +1 -5
  42. package/src/queries/useDeleteRequest.ts +14 -11
  43. package/src/queries/useGetInfiniteRequest.ts +27 -19
  44. package/src/queries/useGetRequest.ts +24 -16
  45. package/src/queries/usePatchRequest.ts +17 -17
  46. package/src/queries/usePostRequest.ts +16 -12
  47. package/src/stores/index.ts +1 -0
  48. package/src/stores/usePauseFutureRequests.ts +25 -0
  49. package/src/types/index.ts +4 -7
@@ -2,11 +2,13 @@ import type { MutateOptions } from '@tanstack/react-query';
2
2
  import { useMutation } from '@tanstack/react-query';
3
3
  import { useEnvironmentVariables, useQueryConfig, useQueryHeaders, useReactNativeEnv } from '../config';
4
4
 
5
+ import type { RawAxiosRequestHeaders } from 'axios';
5
6
  import { useEffect, useState } from 'react';
6
7
  import { scrollToTop } from '../helpers';
7
8
  import { useUploadProgress } from '../hooks';
8
9
  import type { IMakeRequest, IRequestError, IRequestSuccess } from '../request';
9
10
  import { HttpMethod, makeRequest } from '../request';
11
+ import { usePauseFutureRequests } from '../stores';
10
12
  import type { DefaultRequestOptions } from './queries.interface';
11
13
 
12
14
  export const usePostRequest = <TResponse>({
@@ -23,11 +25,13 @@ export const usePostRequest = <TResponse>({
23
25
  const { API_URL, TIMEOUT } = useEnvironmentVariables();
24
26
 
25
27
  const config = useQueryConfig();
26
- const [mutationConfig, setMutationConfig] = useState<{ data: any; options: any }>();
27
28
 
28
29
  const { getHeaders } = useQueryHeaders();
29
30
  const { isApp } = useReactNativeEnv();
30
31
  const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
32
+ const [requestPayload, setRequestPayload] = useState<Record<any, any>>();
33
+
34
+ const isFutureMutationsPaused = usePauseFutureRequests((state) => state.isFutureMutationsPaused);
31
35
 
32
36
  const sendRequest = async (
33
37
  res: (value: any) => void,
@@ -35,7 +39,7 @@ export const usePostRequest = <TResponse>({
35
39
  postData: { data: any; requestConfig?: Partial<IMakeRequest> }
36
40
  ) => {
37
41
  // get request headers
38
- const globalHeaders = getHeaders();
42
+ const globalHeaders: RawAxiosRequestHeaders = getHeaders();
39
43
 
40
44
  const { data, requestConfig } = postData;
41
45
 
@@ -59,7 +63,7 @@ export const usePostRequest = <TResponse>({
59
63
 
60
64
  let shouldContinue = true;
61
65
 
62
- if (config.options.mutationMiddleware) {
66
+ if (config.options?.mutationMiddleware) {
63
67
  shouldContinue = await config.options.mutationMiddleware({
64
68
  mutationKey: [path, { type: 'mutation' }],
65
69
  ...requestOptions,
@@ -72,13 +76,13 @@ export const usePostRequest = <TResponse>({
72
76
  if (postResponse.status) {
73
77
  // scroll to top after success
74
78
 
75
- if (config.options.context !== 'app') {
79
+ if (config.options?.context !== 'app') {
76
80
  scrollToTop();
77
81
  }
78
82
  res(postResponse as IRequestSuccess<TResponse>);
79
83
  } else {
80
84
  // scroll to top after error
81
- if (config.options.context !== 'app') {
85
+ if (config.options?.context !== 'app') {
82
86
  scrollToTop();
83
87
  }
84
88
  rej(postResponse);
@@ -110,22 +114,22 @@ export const usePostRequest = <TResponse>({
110
114
  | undefined
111
115
  ) & { requestConfig?: Partial<Omit<IMakeRequest, 'body'>> }
112
116
  ): Promise<IRequestSuccess<TResponse> | undefined> => {
113
- if (!config.options.pauseFutureMutations) {
117
+ if (!isFutureMutationsPaused) {
114
118
  const { requestConfig, ...otherOptions } = options ?? {};
115
119
  return mutation.mutateAsync({ data, requestConfig }, otherOptions);
116
120
  } else {
117
- setMutationConfig({ data, options });
121
+ setRequestPayload({ data, options });
118
122
  return undefined;
119
123
  }
120
124
  };
121
125
 
122
126
  useEffect(() => {
123
- if (!config.options.pauseFutureMutations && mutationConfig) {
124
- post(mutationConfig.data, mutationConfig.options);
125
- setMutationConfig(undefined);
127
+ if (!isFutureMutationsPaused && requestPayload) {
128
+ post(requestPayload.data, requestPayload.options);
129
+ setRequestPayload(undefined);
126
130
  }
127
131
  // eslint-disable-next-line react-hooks/exhaustive-deps
128
- }, [config.options.pauseFutureMutations]);
132
+ }, [isFutureMutationsPaused]);
129
133
 
130
- return { post, uploadProgressPercent, ...mutation };
134
+ return { post, uploadProgressPercent, ...mutation, isLoading: mutation.isLoading || isFutureMutationsPaused };
131
135
  };
@@ -0,0 +1 @@
1
+ export * from './usePauseFutureRequests';
@@ -0,0 +1,25 @@
1
+ import { create } from 'zustand';
2
+
3
+ export interface PauseFutureRequest {
4
+ isFutureQueriesPaused: boolean;
5
+ isFutureMutationsPaused: boolean;
6
+
7
+ pauseFutureMutation: (status: boolean) => void;
8
+ pauseFutureQueries: (status: boolean) => void;
9
+ }
10
+
11
+ export const usePauseFutureRequests = create<PauseFutureRequest>((set) => {
12
+ const pauseFutureQueries = (status: boolean) => {
13
+ return set({ isFutureQueriesPaused: status });
14
+ };
15
+ const pauseFutureMutation = (status: boolean) => {
16
+ return set({ isFutureQueriesPaused: status });
17
+ };
18
+
19
+ return {
20
+ isFutureMutationsPaused: false,
21
+ isFutureQueriesPaused: false,
22
+ pauseFutureQueries,
23
+ pauseFutureMutation,
24
+ };
25
+ });
@@ -11,9 +11,6 @@ export interface BootstrapConfig {
11
11
  modelConfig?: BootstrapModelConfig;
12
12
  mutationMiddleware?: (mutateRequestConfig?: IMakeRequest & { mutationKey: QueryKey }) => Promise<boolean>;
13
13
  queryMiddleware?: (queryRequestConfig?: IMakeRequest & { queryKey: QueryKey }) => Promise<boolean>;
14
- pauseFutureMutations?: boolean;
15
- pauseFutureQueries?: boolean;
16
- headers?: RawAxiosRequestHeaders;
17
14
  }
18
15
 
19
16
  export interface BootstrapModelConfig {
@@ -22,11 +19,11 @@ export interface BootstrapModelConfig {
22
19
 
23
20
  export type ContextType = 'app' | 'web' | 'electronjs';
24
21
  export interface TanstackQueryConfig {
25
- options: BootstrapConfig;
26
- setConfig: (options: BootstrapConfig) => void;
22
+ headers: RawAxiosRequestHeaders;
23
+ options?: BootstrapConfig;
27
24
  }
28
25
 
29
26
  export interface IUseQueryHeaders {
30
- getHeaders: () => BootstrapConfig['headers'];
31
- setQueryHeaders: (header: BootstrapConfig['headers']) => void;
27
+ getHeaders: () => TanstackQueryConfig['headers'];
28
+ setQueryHeaders: (header: TanstackQueryConfig['headers']) => void;
32
29
  }