@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.
- package/dist/config/bootstrapQueryRequest.js +1 -1
- package/dist/config/useQueryConfig.js +1 -27
- package/dist/config/useQueryConfig.js.map +1 -1
- package/dist/config/useQueryHeaders.js +15 -4
- package/dist/config/useQueryHeaders.js.map +1 -1
- package/dist/config/useReactNativeEnv.js +3 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +123 -120
- package/dist/index.mjs.map +1 -1
- package/dist/model/useKeyTrackerModel.d.ts +1 -1
- package/dist/model/useKeyTrackerModel.js +1 -5
- package/dist/model/useKeyTrackerModel.js.map +1 -1
- package/dist/queries/useDeleteRequest.d.ts +4 -4
- package/dist/queries/useDeleteRequest.js +11 -10
- package/dist/queries/useDeleteRequest.js.map +1 -1
- package/dist/queries/useGetInfiniteRequest.d.ts +4 -4
- package/dist/queries/useGetInfiniteRequest.js +23 -17
- package/dist/queries/useGetInfiniteRequest.js.map +1 -1
- package/dist/queries/useGetRequest.d.ts +4 -4
- package/dist/queries/useGetRequest.js +20 -14
- package/dist/queries/useGetRequest.js.map +1 -1
- package/dist/queries/usePatchRequest.d.ts +4 -4
- package/dist/queries/usePatchRequest.js +13 -16
- package/dist/queries/usePatchRequest.js.map +1 -1
- package/dist/queries/usePostRequest.d.ts +4 -4
- package/dist/queries/usePostRequest.js +13 -11
- package/dist/queries/usePostRequest.js.map +1 -1
- package/dist/stores/index.d.ts +1 -0
- package/dist/stores/usePauseFutureRequests.d.ts +7 -0
- package/dist/stores/usePauseFutureRequests.js +19 -0
- package/dist/stores/usePauseFutureRequests.js.map +1 -0
- package/dist/types/index.d.ts +4 -7
- package/package.json +3 -2
- package/src/config/bootstrapQueryRequest.ts +1 -1
- package/src/config/useQueryConfig.ts +4 -41
- package/src/config/useQueryHeaders.ts +18 -6
- package/src/config/useReactNativeEnv.ts +3 -3
- package/src/index.ts +2 -0
- package/src/model/useKeyTrackerModel.ts +1 -5
- package/src/queries/useDeleteRequest.ts +14 -11
- package/src/queries/useGetInfiniteRequest.ts +27 -19
- package/src/queries/useGetRequest.ts +24 -16
- package/src/queries/usePatchRequest.ts +17 -17
- package/src/queries/usePostRequest.ts +16 -12
- package/src/stores/index.ts +1 -0
- package/src/stores/usePauseFutureRequests.ts +25 -0
- 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
|
|
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
|
|
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
|
|
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 (!
|
|
117
|
+
if (!isFutureMutationsPaused) {
|
|
114
118
|
const { requestConfig, ...otherOptions } = options ?? {};
|
|
115
119
|
return mutation.mutateAsync({ data, requestConfig }, otherOptions);
|
|
116
120
|
} else {
|
|
117
|
-
|
|
121
|
+
setRequestPayload({ data, options });
|
|
118
122
|
return undefined;
|
|
119
123
|
}
|
|
120
124
|
};
|
|
121
125
|
|
|
122
126
|
useEffect(() => {
|
|
123
|
-
if (!
|
|
124
|
-
post(
|
|
125
|
-
|
|
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
|
-
}, [
|
|
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
|
+
});
|
package/src/types/index.ts
CHANGED
|
@@ -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
|
-
|
|
26
|
-
|
|
22
|
+
headers: RawAxiosRequestHeaders;
|
|
23
|
+
options?: BootstrapConfig;
|
|
27
24
|
}
|
|
28
25
|
|
|
29
26
|
export interface IUseQueryHeaders {
|
|
30
|
-
getHeaders: () =>
|
|
31
|
-
setQueryHeaders: (header:
|
|
27
|
+
getHeaders: () => TanstackQueryConfig['headers'];
|
|
28
|
+
setQueryHeaders: (header: TanstackQueryConfig['headers']) => void;
|
|
32
29
|
}
|