@ventlio/tanstack-query 0.2.85 → 0.2.87
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 +7 -5
- package/dist/config/bootstrapQueryRequest.js.map +1 -1
- package/dist/config/useQueryConfig.js +3 -2
- package/dist/config/useQueryConfig.js.map +1 -1
- package/dist/config/useQueryHeaders.js +12 -14
- package/dist/config/useQueryHeaders.js.map +1 -1
- package/dist/config/useReactNativeEnv.js +5 -6
- package/dist/config/useReactNativeEnv.js.map +1 -1
- package/dist/index.mjs +161 -100
- package/dist/index.mjs.map +1 -1
- package/dist/model/useQueryModel.js +4 -1
- package/dist/model/useQueryModel.js.map +1 -1
- package/dist/queries/useDeleteRequest.js +23 -11
- package/dist/queries/useDeleteRequest.js.map +1 -1
- package/dist/queries/useGetInfiniteRequest.js +21 -9
- package/dist/queries/useGetInfiniteRequest.js.map +1 -1
- package/dist/queries/useGetRequest.d.ts +4 -4
- package/dist/queries/useGetRequest.js +27 -14
- package/dist/queries/useGetRequest.js.map +1 -1
- package/dist/queries/usePatchRequest.js +29 -16
- package/dist/queries/usePatchRequest.js.map +1 -1
- package/dist/queries/usePostRequest.js +31 -16
- package/dist/queries/usePostRequest.js.map +1 -1
- package/dist/types/index.d.ts +8 -0
- package/package.json +1 -1
- package/src/config/bootstrapQueryRequest.ts +9 -6
- package/src/config/useQueryConfig.ts +3 -2
- package/src/config/useQueryHeaders.ts +12 -18
- package/src/config/useReactNativeEnv.ts +5 -7
- package/src/model/useQueryModel.ts +3 -2
- package/src/queries/useDeleteRequest.ts +27 -13
- package/src/queries/useGetInfiniteRequest.ts +25 -11
- package/src/queries/useGetRequest.ts +30 -16
- package/src/queries/usePatchRequest.ts +31 -18
- package/src/queries/usePostRequest.ts +36 -18
- package/src/types/index.ts +4 -0
|
@@ -2,38 +2,52 @@ import type { QueryKey, UseQueryOptions } from '@tanstack/react-query';
|
|
|
2
2
|
import { useQuery } from '@tanstack/react-query';
|
|
3
3
|
import type { RawAxiosRequestHeaders } from 'axios';
|
|
4
4
|
import { useState } from 'react';
|
|
5
|
-
import { useEnvironmentVariables, useQueryHeaders } from '../config';
|
|
5
|
+
import { useEnvironmentVariables, useQueryConfig, useQueryHeaders } from '../config';
|
|
6
6
|
import type { IRequestError, IRequestSuccess } from '../request';
|
|
7
|
-
import {
|
|
7
|
+
import { makeRequest } from '../request';
|
|
8
8
|
import type { DefaultRequestOptions } from './queries.interface';
|
|
9
9
|
|
|
10
10
|
export const useDeleteRequest = <TResponse>(deleteOptions?: DefaultRequestOptions) => {
|
|
11
11
|
const { baseUrl, headers } = deleteOptions ?? {};
|
|
12
|
-
const [requestPath,
|
|
12
|
+
const [requestPath, setRequestPath] = useState<string>('');
|
|
13
13
|
const [options, setOptions] = useState<any>();
|
|
14
14
|
|
|
15
|
+
const { options: queryConfigOptions } = useQueryConfig();
|
|
16
|
+
|
|
15
17
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
16
18
|
|
|
17
19
|
const { getHeaders } = useQueryHeaders();
|
|
18
20
|
|
|
19
|
-
const sendRequest = async (res: (value: any) => void, rej: (reason?: any) => void, queryKey
|
|
21
|
+
const sendRequest = async (res: (value: any) => void, rej: (reason?: any) => void, queryKey: QueryKey) => {
|
|
20
22
|
// get request headers
|
|
21
23
|
const globalHeaders: RawAxiosRequestHeaders = getHeaders();
|
|
22
24
|
|
|
23
|
-
const [url] =
|
|
25
|
+
const [url] = queryKey;
|
|
26
|
+
const requestUrl = (url ?? requestPath) as string;
|
|
24
27
|
|
|
25
|
-
const
|
|
26
|
-
path:
|
|
28
|
+
const requestOptions = {
|
|
29
|
+
path: requestUrl,
|
|
27
30
|
headers: { ...globalHeaders, ...headers },
|
|
28
|
-
method: HttpMethod.DELETE,
|
|
29
31
|
baseURL: baseUrl ?? API_URL,
|
|
30
32
|
timeout: TIMEOUT,
|
|
31
|
-
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
let shouldContinue = true;
|
|
36
|
+
|
|
37
|
+
if (queryConfigOptions?.queryMiddleware) {
|
|
38
|
+
shouldContinue = await queryConfigOptions.queryMiddleware({ queryKey, ...requestOptions });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (shouldContinue) {
|
|
42
|
+
const postResponse = await makeRequest<TResponse>(requestOptions);
|
|
32
43
|
|
|
33
|
-
|
|
34
|
-
|
|
44
|
+
if (postResponse.status) {
|
|
45
|
+
res(postResponse as IRequestSuccess<TResponse>);
|
|
46
|
+
} else {
|
|
47
|
+
rej(postResponse);
|
|
48
|
+
}
|
|
35
49
|
} else {
|
|
36
|
-
rej(
|
|
50
|
+
rej(null);
|
|
37
51
|
}
|
|
38
52
|
};
|
|
39
53
|
|
|
@@ -45,7 +59,7 @@ export const useDeleteRequest = <TResponse>(deleteOptions?: DefaultRequestOption
|
|
|
45
59
|
);
|
|
46
60
|
|
|
47
61
|
const updatedPathAsync = async (link: string) => {
|
|
48
|
-
return
|
|
62
|
+
return setRequestPath(link);
|
|
49
63
|
};
|
|
50
64
|
|
|
51
65
|
const setOptionsAsync = async (fetchOptions: any) => {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { InfiniteData, UseQueryOptions } from '@tanstack/react-query';
|
|
1
|
+
import type { InfiniteData, QueryKey, UseQueryOptions } from '@tanstack/react-query';
|
|
2
2
|
import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query';
|
|
3
3
|
import type { RawAxiosRequestHeaders } from 'axios';
|
|
4
4
|
import { startTransition, useEffect, useMemo, useState } from 'react';
|
|
5
|
-
import { useEnvironmentVariables, useQueryHeaders } from '../config';
|
|
5
|
+
import { useEnvironmentVariables, useQueryConfig, useQueryHeaders } from '../config';
|
|
6
6
|
|
|
7
7
|
import type { IRequestError, IRequestSuccess } from '../request';
|
|
8
8
|
import { makeRequest } from '../request';
|
|
@@ -32,9 +32,10 @@ export const useGetInfiniteRequest = <TResponse extends Record<string, any>>({
|
|
|
32
32
|
} & DefaultRequestOptions) => {
|
|
33
33
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
34
34
|
const { getHeaders } = useQueryHeaders();
|
|
35
|
-
const [requestPath,
|
|
35
|
+
const [requestPath, setRequestPath] = useState<string>(path);
|
|
36
36
|
|
|
37
37
|
const [options, setOptions] = useState<any>(queryOptions);
|
|
38
|
+
const { options: queryConfigOptions } = useQueryConfig();
|
|
38
39
|
|
|
39
40
|
let queryClient = useQueryClient();
|
|
40
41
|
|
|
@@ -49,23 +50,36 @@ export const useGetInfiniteRequest = <TResponse extends Record<string, any>>({
|
|
|
49
50
|
| PromiseLike<IRequestError | IRequestSuccess<TResponse & { pagination: Pagination }>>
|
|
50
51
|
) => void,
|
|
51
52
|
rej: (reason?: any) => void,
|
|
53
|
+
queryKey: QueryKey,
|
|
52
54
|
pageParam?: string
|
|
53
55
|
) => {
|
|
54
56
|
if (load) {
|
|
55
57
|
// get request headers
|
|
56
58
|
const globalHeaders: RawAxiosRequestHeaders = getHeaders();
|
|
57
59
|
|
|
58
|
-
const
|
|
60
|
+
const requestOptions = {
|
|
59
61
|
path: pageParam ?? requestPath,
|
|
60
62
|
headers: { ...globalHeaders, ...headers },
|
|
61
63
|
baseURL: baseUrl ?? API_URL,
|
|
62
64
|
timeout: TIMEOUT,
|
|
63
|
-
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
let shouldContinue = true;
|
|
68
|
+
|
|
69
|
+
if (queryConfigOptions?.queryMiddleware) {
|
|
70
|
+
shouldContinue = await queryConfigOptions.queryMiddleware({ queryKey, ...requestOptions });
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (shouldContinue) {
|
|
74
|
+
const getResponse = await makeRequest<TResponse>(requestOptions);
|
|
64
75
|
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
if (getResponse.status) {
|
|
77
|
+
res(getResponse as IRequestSuccess<TResponse & { pagination: Pagination }>);
|
|
78
|
+
} else {
|
|
79
|
+
rej(getResponse);
|
|
80
|
+
}
|
|
67
81
|
} else {
|
|
68
|
-
rej(
|
|
82
|
+
rej(null);
|
|
69
83
|
}
|
|
70
84
|
} else {
|
|
71
85
|
res(null as any);
|
|
@@ -96,9 +110,9 @@ export const useGetInfiniteRequest = <TResponse extends Record<string, any>>({
|
|
|
96
110
|
|
|
97
111
|
const query = useInfiniteQuery<any, any, IRequestSuccess<TResponse & { pagination: Pagination }>>(
|
|
98
112
|
[requestPath, {}],
|
|
99
|
-
({ pageParam = requestPath }) =>
|
|
113
|
+
({ pageParam = requestPath, queryKey }) =>
|
|
100
114
|
new Promise<IRequestSuccess<TResponse & { pagination: Pagination }> | IRequestError>((res, rej) =>
|
|
101
|
-
sendRequest(res, rej, pageParam)
|
|
115
|
+
sendRequest(res, rej, queryKey, pageParam)
|
|
102
116
|
),
|
|
103
117
|
{
|
|
104
118
|
enabled: load,
|
|
@@ -140,7 +154,7 @@ export const useGetInfiniteRequest = <TResponse extends Record<string, any>>({
|
|
|
140
154
|
|
|
141
155
|
const updatedPathAsync = async (link: string) => {
|
|
142
156
|
startTransition(() => {
|
|
143
|
-
|
|
157
|
+
setRequestPath(link);
|
|
144
158
|
});
|
|
145
159
|
};
|
|
146
160
|
|
|
@@ -2,7 +2,7 @@ import type { QueryKey, UseQueryOptions } from '@tanstack/react-query';
|
|
|
2
2
|
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
|
3
3
|
import { startTransition, useEffect, useMemo, useState } from 'react';
|
|
4
4
|
import type { RawAxiosRequestHeaders } from '../../node_modules/axios/index';
|
|
5
|
-
import { useEnvironmentVariables, useQueryHeaders } from '../config';
|
|
5
|
+
import { useEnvironmentVariables, useQueryConfig, useQueryHeaders } from '../config';
|
|
6
6
|
|
|
7
7
|
import type { IRequestError, IRequestSuccess } from '../request';
|
|
8
8
|
import { makeRequest } from '../request';
|
|
@@ -21,12 +21,13 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
21
21
|
queryOptions?: TanstackQueryOption<TResponse>;
|
|
22
22
|
keyTracker?: string;
|
|
23
23
|
} & DefaultRequestOptions) => {
|
|
24
|
-
const [requestPath,
|
|
24
|
+
const [requestPath, setRequestPath] = useState<string>(path);
|
|
25
25
|
const [options, setOptions] = useState<any>(queryOptions);
|
|
26
26
|
const [page, setPage] = useState<number>(1);
|
|
27
27
|
|
|
28
28
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
29
29
|
const { getHeaders } = useQueryHeaders();
|
|
30
|
+
const { options: queryConfigOptions } = useQueryConfig();
|
|
30
31
|
|
|
31
32
|
let queryClient = useQueryClient();
|
|
32
33
|
|
|
@@ -38,25 +39,38 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
38
39
|
value: IRequestError | IRequestSuccess<TResponse> | PromiseLike<IRequestError | IRequestSuccess<TResponse>>
|
|
39
40
|
) => void,
|
|
40
41
|
rej: (reason?: any) => void,
|
|
41
|
-
queryKey
|
|
42
|
+
queryKey: QueryKey
|
|
42
43
|
) => {
|
|
43
44
|
if (load) {
|
|
44
45
|
// get request headers
|
|
45
46
|
const globalHeaders: RawAxiosRequestHeaders = getHeaders();
|
|
46
47
|
|
|
47
|
-
const [url] =
|
|
48
|
+
const [url] = queryKey;
|
|
49
|
+
const requestUrl = (url ?? requestPath) as string;
|
|
48
50
|
|
|
49
|
-
const
|
|
50
|
-
path:
|
|
51
|
+
const requestOptions = {
|
|
52
|
+
path: requestUrl,
|
|
51
53
|
headers: { ...globalHeaders, ...headers },
|
|
52
54
|
baseURL: baseUrl ?? API_URL,
|
|
53
55
|
timeout: TIMEOUT,
|
|
54
|
-
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
let shouldContinue = true;
|
|
59
|
+
|
|
60
|
+
if (queryConfigOptions?.queryMiddleware) {
|
|
61
|
+
shouldContinue = await queryConfigOptions.queryMiddleware({ queryKey, ...requestOptions });
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (shouldContinue) {
|
|
65
|
+
const getResponse = await makeRequest<TResponse>(requestOptions);
|
|
55
66
|
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
if (getResponse.status) {
|
|
68
|
+
res(getResponse as IRequestSuccess<TResponse>);
|
|
69
|
+
} else {
|
|
70
|
+
rej(getResponse);
|
|
71
|
+
}
|
|
58
72
|
} else {
|
|
59
|
-
rej(
|
|
73
|
+
rej(null);
|
|
60
74
|
}
|
|
61
75
|
} else {
|
|
62
76
|
res(null as any);
|
|
@@ -75,7 +89,7 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
75
89
|
|
|
76
90
|
useEffect(() => {
|
|
77
91
|
if (path) {
|
|
78
|
-
|
|
92
|
+
setRequestPath(path);
|
|
79
93
|
}
|
|
80
94
|
}, [path]);
|
|
81
95
|
|
|
@@ -95,7 +109,7 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
95
109
|
if (query.data?.data.pagination) {
|
|
96
110
|
const pagination: IPagination = query.data.data.pagination;
|
|
97
111
|
if (pagination.next_page !== pagination.current_page && pagination.next_page > pagination.current_page) {
|
|
98
|
-
|
|
112
|
+
setRequestPath(constructPaginationLink(requestPath, pagination.next_page));
|
|
99
113
|
}
|
|
100
114
|
}
|
|
101
115
|
};
|
|
@@ -104,7 +118,7 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
104
118
|
if (query.data?.data.pagination) {
|
|
105
119
|
const pagination: IPagination = query.data.data.pagination;
|
|
106
120
|
if (pagination.previous_page !== pagination.current_page && pagination.previous_page < pagination.current_page) {
|
|
107
|
-
|
|
121
|
+
setRequestPath(constructPaginationLink(requestPath, pagination.previous_page));
|
|
108
122
|
}
|
|
109
123
|
}
|
|
110
124
|
};
|
|
@@ -127,12 +141,12 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
127
141
|
};
|
|
128
142
|
|
|
129
143
|
const gotoPage = (pageNumber: number) => {
|
|
130
|
-
|
|
144
|
+
setRequestPath(constructPaginationLink(requestPath, pageNumber));
|
|
131
145
|
};
|
|
132
146
|
|
|
133
147
|
const updatedPathAsync = async (link: string) => {
|
|
134
148
|
startTransition(() => {
|
|
135
|
-
|
|
149
|
+
setRequestPath(link);
|
|
136
150
|
});
|
|
137
151
|
};
|
|
138
152
|
|
|
@@ -159,7 +173,7 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
159
173
|
|
|
160
174
|
return {
|
|
161
175
|
...query,
|
|
162
|
-
|
|
176
|
+
setRequestPath,
|
|
163
177
|
nextPage,
|
|
164
178
|
prevPage,
|
|
165
179
|
get,
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { MutateOptions } from '@tanstack/react-query';
|
|
2
|
-
import { useMutation
|
|
2
|
+
import { useMutation } from '@tanstack/react-query';
|
|
3
3
|
import type { RawAxiosRequestHeaders } from 'axios';
|
|
4
|
-
import { useEnvironmentVariables, useQueryHeaders } from '../config';
|
|
4
|
+
import { useEnvironmentVariables, useQueryConfig, useQueryHeaders } from '../config';
|
|
5
5
|
import { scrollToTop } from '../helpers';
|
|
6
6
|
import { useUploadProgress } from '../hooks';
|
|
7
7
|
import { HttpMethod, makeRequest } from '../request';
|
|
8
8
|
import type { IRequestError, IRequestSuccess } from '../request/request.interface';
|
|
9
|
-
import type { TanstackQueryConfig } from '../types';
|
|
10
9
|
import type { DefaultRequestOptions } from './queries.interface';
|
|
11
10
|
|
|
12
11
|
export const usePatchRequest = <TResponse>({ path, baseUrl, headers }: { path: string } & DefaultRequestOptions) => {
|
|
@@ -14,15 +13,14 @@ export const usePatchRequest = <TResponse>({ path, baseUrl, headers }: { path: s
|
|
|
14
13
|
const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
|
|
15
14
|
|
|
16
15
|
const { getHeaders } = useQueryHeaders();
|
|
17
|
-
const queryClient = useQueryClient();
|
|
18
16
|
|
|
19
|
-
const config =
|
|
17
|
+
const config = useQueryConfig();
|
|
20
18
|
|
|
21
19
|
const sendRequest = async (res: (value: any) => void, rej: (reason?: any) => void, data: any) => {
|
|
22
20
|
// get request headers
|
|
23
21
|
const globalHeaders: RawAxiosRequestHeaders = getHeaders();
|
|
24
22
|
|
|
25
|
-
const
|
|
23
|
+
const requestOptions = {
|
|
26
24
|
path: path,
|
|
27
25
|
body: data,
|
|
28
26
|
method: HttpMethod.PATCH,
|
|
@@ -30,20 +28,34 @@ export const usePatchRequest = <TResponse>({ path, baseUrl, headers }: { path: s
|
|
|
30
28
|
baseURL: baseUrl ?? API_URL,
|
|
31
29
|
timeout: TIMEOUT,
|
|
32
30
|
onUploadProgress,
|
|
33
|
-
}
|
|
31
|
+
};
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
let shouldContinue = true;
|
|
34
|
+
|
|
35
|
+
if (config.options?.mutationMiddleware) {
|
|
36
|
+
shouldContinue = await config.options.mutationMiddleware({
|
|
37
|
+
mutationKey: [path, { type: 'mutation' }],
|
|
38
|
+
...requestOptions,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (shouldContinue) {
|
|
43
|
+
const patchResponse = await makeRequest<TResponse>(requestOptions);
|
|
44
|
+
if (patchResponse.status) {
|
|
45
|
+
// scroll to top after success
|
|
46
|
+
if (config.options?.context !== 'app') {
|
|
47
|
+
scrollToTop();
|
|
48
|
+
}
|
|
49
|
+
res(patchResponse as IRequestSuccess<TResponse>);
|
|
50
|
+
} else {
|
|
51
|
+
// scroll to top after error
|
|
52
|
+
if (config.options?.context !== 'app') {
|
|
53
|
+
scrollToTop();
|
|
54
|
+
}
|
|
55
|
+
rej(patchResponse);
|
|
39
56
|
}
|
|
40
|
-
res(patchResponse as IRequestSuccess<TResponse>);
|
|
41
57
|
} else {
|
|
42
|
-
|
|
43
|
-
if (config?.options?.context !== 'app') {
|
|
44
|
-
scrollToTop();
|
|
45
|
-
}
|
|
46
|
-
rej(patchResponse);
|
|
58
|
+
rej(null);
|
|
47
59
|
}
|
|
48
60
|
};
|
|
49
61
|
|
|
@@ -52,7 +64,8 @@ export const usePatchRequest = <TResponse>({ path, baseUrl, headers }: { path: s
|
|
|
52
64
|
(dataData: any) =>
|
|
53
65
|
new Promise<IRequestSuccess<TResponse>>((res, rej) => {
|
|
54
66
|
return sendRequest(res, rej, dataData);
|
|
55
|
-
})
|
|
67
|
+
}),
|
|
68
|
+
{ mutationKey: [path, { type: 'mutation' }] }
|
|
56
69
|
);
|
|
57
70
|
|
|
58
71
|
const patch = async (
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import type { MutateOptions } from '@tanstack/react-query';
|
|
2
|
-
import { useMutation
|
|
3
|
-
import { useEnvironmentVariables, useQueryHeaders, useReactNativeEnv } from '../config';
|
|
2
|
+
import { useMutation } from '@tanstack/react-query';
|
|
3
|
+
import { useEnvironmentVariables, useQueryConfig, useQueryHeaders, useReactNativeEnv } from '../config';
|
|
4
4
|
|
|
5
5
|
import type { RawAxiosRequestHeaders } from 'axios';
|
|
6
6
|
import { scrollToTop } from '../helpers';
|
|
7
7
|
import { useUploadProgress } from '../hooks';
|
|
8
8
|
import type { IMakeRequest, IRequestError, IRequestSuccess } from '../request';
|
|
9
9
|
import { HttpMethod, makeRequest } from '../request';
|
|
10
|
-
import type { TanstackQueryConfig } from '../types';
|
|
11
10
|
import type { DefaultRequestOptions } from './queries.interface';
|
|
12
11
|
|
|
13
12
|
export const usePostRequest = <TResponse>({
|
|
@@ -22,7 +21,9 @@ export const usePostRequest = <TResponse>({
|
|
|
22
21
|
fileSelectors?: string[];
|
|
23
22
|
} & DefaultRequestOptions) => {
|
|
24
23
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
25
|
-
|
|
24
|
+
|
|
25
|
+
const config = useQueryConfig();
|
|
26
|
+
|
|
26
27
|
const { getHeaders } = useQueryHeaders();
|
|
27
28
|
const { isApp } = useReactNativeEnv();
|
|
28
29
|
const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
|
|
@@ -34,12 +35,12 @@ export const usePostRequest = <TResponse>({
|
|
|
34
35
|
) => {
|
|
35
36
|
// get request headers
|
|
36
37
|
const globalHeaders: RawAxiosRequestHeaders = getHeaders();
|
|
37
|
-
|
|
38
|
+
|
|
38
39
|
const { data, requestConfig } = postData;
|
|
39
40
|
|
|
40
41
|
delete requestConfig?.body;
|
|
41
42
|
|
|
42
|
-
const
|
|
43
|
+
const requestOptions = {
|
|
43
44
|
path,
|
|
44
45
|
body: data,
|
|
45
46
|
method: HttpMethod.POST,
|
|
@@ -53,21 +54,36 @@ export const usePostRequest = <TResponse>({
|
|
|
53
54
|
},
|
|
54
55
|
onUploadProgress,
|
|
55
56
|
...requestConfig,
|
|
56
|
-
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
let shouldContinue = true;
|
|
57
60
|
|
|
58
|
-
if (
|
|
59
|
-
|
|
61
|
+
if (config.options?.mutationMiddleware) {
|
|
62
|
+
shouldContinue = await config.options.mutationMiddleware({
|
|
63
|
+
mutationKey: [path, { type: 'mutation' }],
|
|
64
|
+
...requestOptions,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (shouldContinue) {
|
|
69
|
+
const postResponse = await makeRequest<TResponse>(requestOptions);
|
|
60
70
|
|
|
61
|
-
if (
|
|
62
|
-
|
|
71
|
+
if (postResponse.status) {
|
|
72
|
+
// scroll to top after success
|
|
73
|
+
|
|
74
|
+
if (config.options?.context !== 'app') {
|
|
75
|
+
scrollToTop();
|
|
76
|
+
}
|
|
77
|
+
res(postResponse as IRequestSuccess<TResponse>);
|
|
78
|
+
} else {
|
|
79
|
+
// scroll to top after error
|
|
80
|
+
if (config.options?.context !== 'app') {
|
|
81
|
+
scrollToTop();
|
|
82
|
+
}
|
|
83
|
+
rej(postResponse);
|
|
63
84
|
}
|
|
64
|
-
res(postResponse as IRequestSuccess<TResponse>);
|
|
65
85
|
} else {
|
|
66
|
-
|
|
67
|
-
if (config?.options?.context !== 'app') {
|
|
68
|
-
scrollToTop();
|
|
69
|
-
}
|
|
70
|
-
rej(postResponse);
|
|
86
|
+
rej(null);
|
|
71
87
|
}
|
|
72
88
|
};
|
|
73
89
|
|
|
@@ -76,7 +92,9 @@ export const usePostRequest = <TResponse>({
|
|
|
76
92
|
IRequestSuccess<TResponse>,
|
|
77
93
|
IRequestError,
|
|
78
94
|
{ data: any; requestConfig?: Partial<Omit<IMakeRequest, 'body'>> }
|
|
79
|
-
>(async (postData) => new Promise<IRequestSuccess<TResponse>>((res, rej) => sendRequest(res, rej, postData))
|
|
95
|
+
>(async (postData) => new Promise<IRequestSuccess<TResponse>>((res, rej) => sendRequest(res, rej, postData)), {
|
|
96
|
+
mutationKey: [path, { type: 'mutation' }],
|
|
97
|
+
});
|
|
80
98
|
|
|
81
99
|
const post = async <T>(
|
|
82
100
|
data?: T,
|
package/src/types/index.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { QueryKey } from '@tanstack/react-query';
|
|
1
2
|
import type { RawAxiosRequestHeaders } from 'axios';
|
|
3
|
+
import type { IMakeRequest } from '../request';
|
|
2
4
|
|
|
3
5
|
export interface BootstrapConfig {
|
|
4
6
|
environments?: {
|
|
@@ -7,6 +9,8 @@ export interface BootstrapConfig {
|
|
|
7
9
|
};
|
|
8
10
|
context?: ContextType;
|
|
9
11
|
modelConfig?: BootstrapModelConfig;
|
|
12
|
+
mutationMiddleware?: (mutateRequestConfig?: IMakeRequest & { mutationKey: QueryKey }) => Promise<boolean>;
|
|
13
|
+
queryMiddleware?: (queryRequestConfig?: IMakeRequest & { queryKey: QueryKey }) => Promise<boolean>;
|
|
10
14
|
}
|
|
11
15
|
|
|
12
16
|
export interface BootstrapModelConfig {
|