@ventlio/tanstack-query 0.2.84 → 0.2.86
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 +48 -48
- package/dist/model/useQueryModel.js +4 -1
- package/dist/model/useQueryModel.js.map +1 -1
- package/dist/queries/usePatchRequest.js +5 -5
- package/dist/queries/usePostRequest.js +8 -6
- package/dist/queries/usePostRequest.js.map +1 -1
- package/dist/request/transformer.js +1 -2
- package/dist/request/transformer.js.map +1 -1
- package/dist/types/index.d.ts +2 -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/usePatchRequest.ts +5 -7
- package/src/queries/usePostRequest.ts +11 -8
- package/src/request/transformer.ts +1 -2
- package/src/types/index.ts +2 -0
|
@@ -2,16 +2,18 @@ import 'url-search-params-polyfill';
|
|
|
2
2
|
|
|
3
3
|
const bootstrapQueryRequest = (queryClient, options) => {
|
|
4
4
|
// make query config doesn't expire
|
|
5
|
-
queryClient.setQueryDefaults(['config'], {
|
|
6
|
-
staleTime: Infinity,
|
|
7
|
-
cacheTime: Infinity,
|
|
8
|
-
});
|
|
9
5
|
// set default query config
|
|
10
|
-
|
|
6
|
+
const defaultMeta = {
|
|
11
7
|
headers: {
|
|
12
8
|
Authorization: ``,
|
|
13
9
|
},
|
|
14
10
|
options,
|
|
11
|
+
};
|
|
12
|
+
queryClient.setDefaultOptions({
|
|
13
|
+
queries: {
|
|
14
|
+
meta: defaultMeta,
|
|
15
|
+
},
|
|
16
|
+
mutations: { meta: defaultMeta },
|
|
15
17
|
});
|
|
16
18
|
};
|
|
17
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapQueryRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bootstrapQueryRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -2,8 +2,9 @@ import { useQueryClient } from '@tanstack/react-query';
|
|
|
2
2
|
|
|
3
3
|
const useQueryConfig = () => {
|
|
4
4
|
const queryClient = useQueryClient();
|
|
5
|
-
const
|
|
6
|
-
|
|
5
|
+
const mutationMeta = (queryClient.getDefaultOptions().mutations?.meta ?? {});
|
|
6
|
+
const queryMeta = (queryClient.getDefaultOptions().queries?.meta ?? {});
|
|
7
|
+
return { ...queryMeta, ...mutationMeta };
|
|
7
8
|
};
|
|
8
9
|
|
|
9
10
|
export { useQueryConfig };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryConfig.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useQueryConfig.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
|
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
import { useQueryClient } from '@tanstack/react-query';
|
|
2
|
-
import {
|
|
2
|
+
import { useQueryConfig } from './useQueryConfig.js';
|
|
3
3
|
|
|
4
4
|
const useQueryHeaders = () => {
|
|
5
5
|
const queryClient = useQueryClient();
|
|
6
|
+
const { headers, options } = useQueryConfig();
|
|
6
7
|
const getHeaders = () => {
|
|
7
|
-
|
|
8
|
-
return config.headers;
|
|
8
|
+
return headers;
|
|
9
9
|
};
|
|
10
10
|
const setQueryHeaders = (newHeaders) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}, {
|
|
21
|
-
updatedAt: getDateInFuture(2),
|
|
11
|
+
const defaultMeta = {
|
|
12
|
+
headers: { ...headers, ...newHeaders },
|
|
13
|
+
options,
|
|
14
|
+
};
|
|
15
|
+
queryClient.setDefaultOptions({
|
|
16
|
+
queries: {
|
|
17
|
+
meta: defaultMeta,
|
|
18
|
+
},
|
|
19
|
+
mutations: { meta: defaultMeta },
|
|
22
20
|
});
|
|
23
21
|
};
|
|
24
22
|
return { setQueryHeaders, getHeaders };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryHeaders.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useQueryHeaders.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useQueryConfig } from './useQueryConfig.js';
|
|
2
2
|
|
|
3
3
|
const useReactNativeEnv = () => {
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const isApp = config?.options?.context === 'app';
|
|
4
|
+
const config = useQueryConfig();
|
|
5
|
+
const appUrl = config.options?.environments?.appBaseUrl;
|
|
6
|
+
const appTimeout = config.options?.environments?.appTimeout;
|
|
7
|
+
const isApp = config.options?.context === 'app';
|
|
9
8
|
return { appUrl, appTimeout, isApp };
|
|
10
9
|
};
|
|
11
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useReactNativeEnv.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useReactNativeEnv.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
package/dist/index.mjs
CHANGED
|
@@ -7,25 +7,33 @@ import axios from 'axios';
|
|
|
7
7
|
|
|
8
8
|
const bootstrapQueryRequest = (queryClient, options) => {
|
|
9
9
|
// make query config doesn't expire
|
|
10
|
-
queryClient.setQueryDefaults(['config'], {
|
|
11
|
-
staleTime: Infinity,
|
|
12
|
-
cacheTime: Infinity,
|
|
13
|
-
});
|
|
14
10
|
// set default query config
|
|
15
|
-
|
|
11
|
+
const defaultMeta = {
|
|
16
12
|
headers: {
|
|
17
13
|
Authorization: ``,
|
|
18
14
|
},
|
|
19
15
|
options,
|
|
16
|
+
};
|
|
17
|
+
queryClient.setDefaultOptions({
|
|
18
|
+
queries: {
|
|
19
|
+
meta: defaultMeta,
|
|
20
|
+
},
|
|
21
|
+
mutations: { meta: defaultMeta },
|
|
20
22
|
});
|
|
21
23
|
};
|
|
22
24
|
|
|
23
|
-
const
|
|
25
|
+
const useQueryConfig = () => {
|
|
24
26
|
const queryClient = useQueryClient();
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const mutationMeta = (queryClient.getDefaultOptions().mutations?.meta ?? {});
|
|
28
|
+
const queryMeta = (queryClient.getDefaultOptions().queries?.meta ?? {});
|
|
29
|
+
return { ...queryMeta, ...mutationMeta };
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const useReactNativeEnv = () => {
|
|
33
|
+
const config = useQueryConfig();
|
|
34
|
+
const appUrl = config.options?.environments?.appBaseUrl;
|
|
35
|
+
const appTimeout = config.options?.environments?.appTimeout;
|
|
36
|
+
const isApp = config.options?.context === 'app';
|
|
29
37
|
return { appUrl, appTimeout, isApp };
|
|
30
38
|
};
|
|
31
39
|
|
|
@@ -39,10 +47,25 @@ const useEnvironmentVariables = () => {
|
|
|
39
47
|
};
|
|
40
48
|
};
|
|
41
49
|
|
|
42
|
-
const
|
|
50
|
+
const useQueryHeaders = () => {
|
|
43
51
|
const queryClient = useQueryClient();
|
|
44
|
-
const { headers
|
|
45
|
-
|
|
52
|
+
const { headers, options } = useQueryConfig();
|
|
53
|
+
const getHeaders = () => {
|
|
54
|
+
return headers;
|
|
55
|
+
};
|
|
56
|
+
const setQueryHeaders = (newHeaders) => {
|
|
57
|
+
const defaultMeta = {
|
|
58
|
+
headers: { ...headers, ...newHeaders },
|
|
59
|
+
options,
|
|
60
|
+
};
|
|
61
|
+
queryClient.setDefaultOptions({
|
|
62
|
+
queries: {
|
|
63
|
+
meta: defaultMeta,
|
|
64
|
+
},
|
|
65
|
+
mutations: { meta: defaultMeta },
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
return { setQueryHeaders, getHeaders };
|
|
46
69
|
};
|
|
47
70
|
|
|
48
71
|
const scrollToTop = () => {
|
|
@@ -61,29 +84,6 @@ function getDateInFuture(days) {
|
|
|
61
84
|
return date.getTime();
|
|
62
85
|
}
|
|
63
86
|
|
|
64
|
-
const useQueryHeaders = () => {
|
|
65
|
-
const queryClient = useQueryClient();
|
|
66
|
-
const getHeaders = () => {
|
|
67
|
-
const config = queryClient.getQueryData(['config']);
|
|
68
|
-
return config.headers;
|
|
69
|
-
};
|
|
70
|
-
const setQueryHeaders = (newHeaders) => {
|
|
71
|
-
// make sure the config does not expire
|
|
72
|
-
queryClient.setQueryDefaults(['config'], {
|
|
73
|
-
staleTime: Infinity,
|
|
74
|
-
cacheTime: Infinity,
|
|
75
|
-
});
|
|
76
|
-
// set the config
|
|
77
|
-
queryClient.setQueryData(['config'], (config) => {
|
|
78
|
-
const newConfig = { ...config, headers: newHeaders };
|
|
79
|
-
return newConfig;
|
|
80
|
-
}, {
|
|
81
|
-
updatedAt: getDateInFuture(2),
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
return { setQueryHeaders, getHeaders };
|
|
85
|
-
};
|
|
86
|
-
|
|
87
87
|
const useKeyTrackerModel = (keyTracker) => {
|
|
88
88
|
const queryClient = useQueryClient();
|
|
89
89
|
const getQueryKey = (innerKeyTracker) => {
|
|
@@ -104,6 +104,7 @@ const useQueryModel = (keyTracker, exact = true) => {
|
|
|
104
104
|
const queryClient = useQueryClient();
|
|
105
105
|
const { getQueryKey } = useKeyTrackerModel(keyTracker);
|
|
106
106
|
const queryKey = getQueryKey();
|
|
107
|
+
const config = useQueryConfig();
|
|
107
108
|
const add = (data, position, path) => {
|
|
108
109
|
let records = (findAll(path) ?? []);
|
|
109
110
|
if (!position || position === 'end') {
|
|
@@ -159,7 +160,7 @@ const useQueryModel = (keyTracker, exact = true) => {
|
|
|
159
160
|
return queryClient.setQueryData(queryKey, newData);
|
|
160
161
|
};
|
|
161
162
|
const getModelConfig = () => {
|
|
162
|
-
const { options } =
|
|
163
|
+
const { options } = config;
|
|
163
164
|
const { modelConfig } = options ?? {};
|
|
164
165
|
return modelConfig;
|
|
165
166
|
};
|
|
@@ -295,11 +296,10 @@ var ContentType;
|
|
|
295
296
|
//
|
|
296
297
|
const errorTransformer = (data) => {
|
|
297
298
|
return {
|
|
298
|
-
message: data.message,
|
|
299
|
-
statusCode: data.statusCode,
|
|
300
299
|
timeStamp: new Date(),
|
|
301
300
|
status: false,
|
|
302
301
|
data: data.data,
|
|
302
|
+
...data,
|
|
303
303
|
};
|
|
304
304
|
};
|
|
305
305
|
//
|
|
@@ -632,8 +632,7 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
|
632
632
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
633
633
|
const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
|
|
634
634
|
const { getHeaders } = useQueryHeaders();
|
|
635
|
-
const
|
|
636
|
-
const config = queryClient.getQueryData(['config']);
|
|
635
|
+
const config = useQueryConfig();
|
|
637
636
|
const sendRequest = async (res, rej, data) => {
|
|
638
637
|
// get request headers
|
|
639
638
|
const globalHeaders = getHeaders();
|
|
@@ -648,14 +647,14 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
|
648
647
|
});
|
|
649
648
|
if (patchResponse.status) {
|
|
650
649
|
// scroll to top after success
|
|
651
|
-
if (config
|
|
650
|
+
if (config.options?.context !== 'app') {
|
|
652
651
|
scrollToTop();
|
|
653
652
|
}
|
|
654
653
|
res(patchResponse);
|
|
655
654
|
}
|
|
656
655
|
else {
|
|
657
656
|
// scroll to top after error
|
|
658
|
-
if (config
|
|
657
|
+
if (config.options?.context !== 'app') {
|
|
659
658
|
scrollToTop();
|
|
660
659
|
}
|
|
661
660
|
rej(patchResponse);
|
|
@@ -673,14 +672,13 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
|
673
672
|
|
|
674
673
|
const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelectors, }) => {
|
|
675
674
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
676
|
-
const
|
|
675
|
+
const config = useQueryConfig();
|
|
677
676
|
const { getHeaders } = useQueryHeaders();
|
|
678
677
|
const { isApp } = useReactNativeEnv();
|
|
679
678
|
const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
|
|
680
679
|
const sendRequest = async (res, rej, postData) => {
|
|
681
680
|
// get request headers
|
|
682
681
|
const globalHeaders = getHeaders();
|
|
683
|
-
const config = queryClient.getQueryData(['config']);
|
|
684
682
|
const { data, requestConfig } = postData;
|
|
685
683
|
delete requestConfig?.body;
|
|
686
684
|
const postResponse = await makeRequest({
|
|
@@ -700,21 +698,23 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
|
|
|
700
698
|
});
|
|
701
699
|
if (postResponse.status) {
|
|
702
700
|
// scroll to top after success
|
|
703
|
-
if (config
|
|
701
|
+
if (config.options?.context !== 'app') {
|
|
704
702
|
scrollToTop();
|
|
705
703
|
}
|
|
706
704
|
res(postResponse);
|
|
707
705
|
}
|
|
708
706
|
else {
|
|
709
707
|
// scroll to top after error
|
|
710
|
-
if (config
|
|
708
|
+
if (config.options?.context !== 'app') {
|
|
711
709
|
scrollToTop();
|
|
712
710
|
}
|
|
713
711
|
rej(postResponse);
|
|
714
712
|
}
|
|
715
713
|
};
|
|
716
714
|
// register post mutation
|
|
717
|
-
const mutation = useMutation(async (postData) => new Promise((res, rej) => sendRequest(res, rej, postData))
|
|
715
|
+
const mutation = useMutation(async (postData) => new Promise((res, rej) => sendRequest(res, rej, postData)), {
|
|
716
|
+
mutationKey: [path, { type: 'mutation' }],
|
|
717
|
+
});
|
|
718
718
|
const post = async (data, options) => {
|
|
719
719
|
const { requestConfig, ...otherOptions } = options ?? {};
|
|
720
720
|
return mutation.mutateAsync({ data, requestConfig }, otherOptions);
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { useQueryClient } from '@tanstack/react-query';
|
|
2
2
|
import result from 'lodash.result';
|
|
3
3
|
import lodashSet from 'lodash.set';
|
|
4
|
+
import 'url-search-params-polyfill';
|
|
5
|
+
import { useQueryConfig } from '../config/useQueryConfig.js';
|
|
4
6
|
import { useKeyTrackerModel } from './useKeyTrackerModel.js';
|
|
5
7
|
|
|
6
8
|
const useQueryModel = (keyTracker, exact = true) => {
|
|
7
9
|
const queryClient = useQueryClient();
|
|
8
10
|
const { getQueryKey } = useKeyTrackerModel(keyTracker);
|
|
9
11
|
const queryKey = getQueryKey();
|
|
12
|
+
const config = useQueryConfig();
|
|
10
13
|
const add = (data, position, path) => {
|
|
11
14
|
let records = (findAll(path) ?? []);
|
|
12
15
|
if (!position || position === 'end') {
|
|
@@ -62,7 +65,7 @@ const useQueryModel = (keyTracker, exact = true) => {
|
|
|
62
65
|
return queryClient.setQueryData(queryKey, newData);
|
|
63
66
|
};
|
|
64
67
|
const getModelConfig = () => {
|
|
65
|
-
const { options } =
|
|
68
|
+
const { options } = config;
|
|
66
69
|
const { modelConfig } = options ?? {};
|
|
67
70
|
return modelConfig;
|
|
68
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryModel.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useQueryModel.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useMutation } from '@tanstack/react-query';
|
|
2
2
|
import 'url-search-params-polyfill';
|
|
3
3
|
import { useEnvironmentVariables } from '../config/useEnvironmentVariables.js';
|
|
4
|
+
import { useQueryConfig } from '../config/useQueryConfig.js';
|
|
4
5
|
import { useQueryHeaders } from '../config/useQueryHeaders.js';
|
|
5
6
|
import { scrollToTop } from '../helpers/scrollToTop.js';
|
|
6
7
|
import { useUploadProgress } from '../hooks/useUploadProgress.js';
|
|
@@ -12,8 +13,7 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
|
12
13
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
13
14
|
const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
|
|
14
15
|
const { getHeaders } = useQueryHeaders();
|
|
15
|
-
const
|
|
16
|
-
const config = queryClient.getQueryData(['config']);
|
|
16
|
+
const config = useQueryConfig();
|
|
17
17
|
const sendRequest = async (res, rej, data) => {
|
|
18
18
|
// get request headers
|
|
19
19
|
const globalHeaders = getHeaders();
|
|
@@ -28,14 +28,14 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
|
28
28
|
});
|
|
29
29
|
if (patchResponse.status) {
|
|
30
30
|
// scroll to top after success
|
|
31
|
-
if (config
|
|
31
|
+
if (config.options?.context !== 'app') {
|
|
32
32
|
scrollToTop();
|
|
33
33
|
}
|
|
34
34
|
res(patchResponse);
|
|
35
35
|
}
|
|
36
36
|
else {
|
|
37
37
|
// scroll to top after error
|
|
38
|
-
if (config
|
|
38
|
+
if (config.options?.context !== 'app') {
|
|
39
39
|
scrollToTop();
|
|
40
40
|
}
|
|
41
41
|
rej(patchResponse);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useMutation } from '@tanstack/react-query';
|
|
2
2
|
import 'url-search-params-polyfill';
|
|
3
3
|
import { useEnvironmentVariables } from '../config/useEnvironmentVariables.js';
|
|
4
|
+
import { useQueryConfig } from '../config/useQueryConfig.js';
|
|
4
5
|
import { useQueryHeaders } from '../config/useQueryHeaders.js';
|
|
5
6
|
import { useReactNativeEnv } from '../config/useReactNativeEnv.js';
|
|
6
7
|
import { scrollToTop } from '../helpers/scrollToTop.js';
|
|
@@ -11,14 +12,13 @@ import { HttpMethod } from '../request/request.enum.js';
|
|
|
11
12
|
|
|
12
13
|
const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelectors, }) => {
|
|
13
14
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
14
|
-
const
|
|
15
|
+
const config = useQueryConfig();
|
|
15
16
|
const { getHeaders } = useQueryHeaders();
|
|
16
17
|
const { isApp } = useReactNativeEnv();
|
|
17
18
|
const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
|
|
18
19
|
const sendRequest = async (res, rej, postData) => {
|
|
19
20
|
// get request headers
|
|
20
21
|
const globalHeaders = getHeaders();
|
|
21
|
-
const config = queryClient.getQueryData(['config']);
|
|
22
22
|
const { data, requestConfig } = postData;
|
|
23
23
|
delete requestConfig?.body;
|
|
24
24
|
const postResponse = await makeRequest({
|
|
@@ -38,21 +38,23 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
|
|
|
38
38
|
});
|
|
39
39
|
if (postResponse.status) {
|
|
40
40
|
// scroll to top after success
|
|
41
|
-
if (config
|
|
41
|
+
if (config.options?.context !== 'app') {
|
|
42
42
|
scrollToTop();
|
|
43
43
|
}
|
|
44
44
|
res(postResponse);
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
47
47
|
// scroll to top after error
|
|
48
|
-
if (config
|
|
48
|
+
if (config.options?.context !== 'app') {
|
|
49
49
|
scrollToTop();
|
|
50
50
|
}
|
|
51
51
|
rej(postResponse);
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
54
|
// register post mutation
|
|
55
|
-
const mutation = useMutation(async (postData) => new Promise((res, rej) => sendRequest(res, rej, postData))
|
|
55
|
+
const mutation = useMutation(async (postData) => new Promise((res, rej) => sendRequest(res, rej, postData)), {
|
|
56
|
+
mutationKey: [path, { type: 'mutation' }],
|
|
57
|
+
});
|
|
56
58
|
const post = async (data, options) => {
|
|
57
59
|
const { requestConfig, ...otherOptions } = options ?? {};
|
|
58
60
|
return mutation.mutateAsync({ data, requestConfig }, otherOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePostRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usePostRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transformer.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface BootstrapConfig {
|
|
|
6
6
|
};
|
|
7
7
|
context?: ContextType;
|
|
8
8
|
modelConfig?: BootstrapModelConfig;
|
|
9
|
+
mutationMiddleware?: (mutateRequest?: any, mutateResponse?: any) => Promise<boolean>;
|
|
10
|
+
queryMiddleware?: (queryRequest?: any, queryResponse?: any) => Promise<boolean>;
|
|
9
11
|
}
|
|
10
12
|
export interface BootstrapModelConfig {
|
|
11
13
|
idColumn: string;
|
package/package.json
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import type { QueryClient } from '@tanstack/react-query';
|
|
2
2
|
import 'url-search-params-polyfill';
|
|
3
|
-
import type { BootstrapConfig
|
|
3
|
+
import type { BootstrapConfig } from '../types';
|
|
4
4
|
|
|
5
5
|
export const bootstrapQueryRequest = (queryClient: QueryClient, options?: BootstrapConfig): void => {
|
|
6
6
|
// make query config doesn't expire
|
|
7
|
-
queryClient.setQueryDefaults(['config'], {
|
|
8
|
-
staleTime: Infinity,
|
|
9
|
-
cacheTime: Infinity,
|
|
10
|
-
});
|
|
11
7
|
|
|
12
8
|
// set default query config
|
|
13
|
-
|
|
9
|
+
const defaultMeta = {
|
|
14
10
|
headers: {
|
|
15
11
|
Authorization: ``,
|
|
16
12
|
},
|
|
17
13
|
options,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
queryClient.setDefaultOptions({
|
|
17
|
+
queries: {
|
|
18
|
+
meta: defaultMeta,
|
|
19
|
+
},
|
|
20
|
+
mutations: { meta: defaultMeta },
|
|
18
21
|
});
|
|
19
22
|
};
|
|
@@ -4,7 +4,8 @@ import type { TanstackQueryConfig } from '../types';
|
|
|
4
4
|
export const useQueryConfig = (): TanstackQueryConfig => {
|
|
5
5
|
const queryClient = useQueryClient();
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
const mutationMeta = (queryClient.getDefaultOptions().mutations?.meta ?? {}) as unknown as TanstackQueryConfig;
|
|
8
|
+
const queryMeta = (queryClient.getDefaultOptions().queries?.meta ?? {}) as unknown as TanstackQueryConfig;
|
|
8
9
|
|
|
9
|
-
return {
|
|
10
|
+
return { ...queryMeta, ...mutationMeta };
|
|
10
11
|
};
|
|
@@ -1,33 +1,27 @@
|
|
|
1
1
|
import { useQueryClient } from '@tanstack/react-query';
|
|
2
|
-
import { getDateInFuture } from '../helpers';
|
|
3
2
|
import type { IUseQueryHeaders, TanstackQueryConfig } from '../types';
|
|
3
|
+
import { useQueryConfig } from './useQueryConfig';
|
|
4
4
|
|
|
5
5
|
export const useQueryHeaders = (): IUseQueryHeaders => {
|
|
6
6
|
const queryClient = useQueryClient();
|
|
7
|
+
const { headers, options } = useQueryConfig();
|
|
7
8
|
|
|
8
9
|
const getHeaders = (): TanstackQueryConfig['headers'] => {
|
|
9
|
-
|
|
10
|
-
return config.headers;
|
|
10
|
+
return headers;
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
const setQueryHeaders = (newHeaders: TanstackQueryConfig['headers']) => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
});
|
|
14
|
+
const defaultMeta = {
|
|
15
|
+
headers: { ...headers, ...newHeaders },
|
|
16
|
+
options,
|
|
17
|
+
};
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
(config): TanstackQueryConfig => {
|
|
24
|
-
const newConfig = { ...config, headers: newHeaders };
|
|
25
|
-
return newConfig;
|
|
19
|
+
queryClient.setDefaultOptions({
|
|
20
|
+
queries: {
|
|
21
|
+
meta: defaultMeta,
|
|
26
22
|
},
|
|
27
|
-
{
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
);
|
|
23
|
+
mutations: { meta: defaultMeta },
|
|
24
|
+
});
|
|
31
25
|
};
|
|
32
26
|
|
|
33
27
|
return { setQueryHeaders, getHeaders };
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { TanstackQueryConfig } from '../types';
|
|
1
|
+
import { useQueryConfig } from './useQueryConfig';
|
|
3
2
|
|
|
4
3
|
export const useReactNativeEnv = () => {
|
|
5
|
-
const
|
|
6
|
-
const config = queryClient.getQueryData<TanstackQueryConfig>(['config']);
|
|
4
|
+
const config = useQueryConfig();
|
|
7
5
|
|
|
8
|
-
const appUrl: string | undefined = config
|
|
9
|
-
const appTimeout: number | undefined = config
|
|
10
|
-
const isApp = config
|
|
6
|
+
const appUrl: string | undefined = config.options?.environments?.appBaseUrl;
|
|
7
|
+
const appTimeout: number | undefined = config.options?.environments?.appTimeout;
|
|
8
|
+
const isApp = config.options?.context === 'app';
|
|
11
9
|
|
|
12
10
|
return { appUrl, appTimeout, isApp };
|
|
13
11
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useQueryClient } from '@tanstack/react-query';
|
|
2
2
|
import result from 'lodash.result';
|
|
3
3
|
import { default as lodashSet } from 'lodash.set';
|
|
4
|
-
import
|
|
4
|
+
import { useQueryConfig } from '../config';
|
|
5
5
|
import type { QueryModelAddPosition, QueryModelBuilder } from './model.interface';
|
|
6
6
|
import { useKeyTrackerModel } from './useKeyTrackerModel';
|
|
7
7
|
|
|
@@ -9,6 +9,7 @@ export const useQueryModel = <T>(keyTracker: string, exact: boolean = true): Que
|
|
|
9
9
|
const queryClient = useQueryClient();
|
|
10
10
|
const { getQueryKey } = useKeyTrackerModel(keyTracker);
|
|
11
11
|
const queryKey = getQueryKey() as any[];
|
|
12
|
+
const config = useQueryConfig();
|
|
12
13
|
|
|
13
14
|
const add = (data: T, position?: QueryModelAddPosition, path?: string): T | undefined => {
|
|
14
15
|
let records = (findAll(path) ?? []) as T[];
|
|
@@ -78,7 +79,7 @@ export const useQueryModel = <T>(keyTracker: string, exact: boolean = true): Que
|
|
|
78
79
|
};
|
|
79
80
|
|
|
80
81
|
const getModelConfig = () => {
|
|
81
|
-
const { options } =
|
|
82
|
+
const { options } = config;
|
|
82
83
|
const { modelConfig } = options ?? {};
|
|
83
84
|
|
|
84
85
|
return modelConfig;
|
|
@@ -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,9 +13,8 @@ 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
|
|
@@ -34,13 +32,13 @@ export const usePatchRequest = <TResponse>({ path, baseUrl, headers }: { path: s
|
|
|
34
32
|
|
|
35
33
|
if (patchResponse.status) {
|
|
36
34
|
// scroll to top after success
|
|
37
|
-
if (config
|
|
35
|
+
if (config.options?.context !== 'app') {
|
|
38
36
|
scrollToTop();
|
|
39
37
|
}
|
|
40
38
|
res(patchResponse as IRequestSuccess<TResponse>);
|
|
41
39
|
} else {
|
|
42
40
|
// scroll to top after error
|
|
43
|
-
if (config
|
|
41
|
+
if (config.options?.context !== 'app') {
|
|
44
42
|
scrollToTop();
|
|
45
43
|
}
|
|
46
44
|
rej(patchResponse);
|
|
@@ -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,7 +35,7 @@ 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;
|
|
@@ -58,13 +59,13 @@ export const usePostRequest = <TResponse>({
|
|
|
58
59
|
if (postResponse.status) {
|
|
59
60
|
// scroll to top after success
|
|
60
61
|
|
|
61
|
-
if (config
|
|
62
|
+
if (config.options?.context !== 'app') {
|
|
62
63
|
scrollToTop();
|
|
63
64
|
}
|
|
64
65
|
res(postResponse as IRequestSuccess<TResponse>);
|
|
65
66
|
} else {
|
|
66
67
|
// scroll to top after error
|
|
67
|
-
if (config
|
|
68
|
+
if (config.options?.context !== 'app') {
|
|
68
69
|
scrollToTop();
|
|
69
70
|
}
|
|
70
71
|
rej(postResponse);
|
|
@@ -76,7 +77,9 @@ export const usePostRequest = <TResponse>({
|
|
|
76
77
|
IRequestSuccess<TResponse>,
|
|
77
78
|
IRequestError,
|
|
78
79
|
{ data: any; requestConfig?: Partial<Omit<IMakeRequest, 'body'>> }
|
|
79
|
-
>(async (postData) => new Promise<IRequestSuccess<TResponse>>((res, rej) => sendRequest(res, rej, postData))
|
|
80
|
+
>(async (postData) => new Promise<IRequestSuccess<TResponse>>((res, rej) => sendRequest(res, rej, postData)), {
|
|
81
|
+
mutationKey: [path, { type: 'mutation' }],
|
|
82
|
+
});
|
|
80
83
|
|
|
81
84
|
const post = async <T>(
|
|
82
85
|
data?: T,
|
|
@@ -3,11 +3,10 @@ import type { IRequestError, IRequestSuccess, IServerRequestError, IServerReques
|
|
|
3
3
|
//
|
|
4
4
|
export const errorTransformer = (data: IServerRequestError & { statusCode: number }): IRequestError => {
|
|
5
5
|
return {
|
|
6
|
-
message: data.message,
|
|
7
|
-
statusCode: data.statusCode,
|
|
8
6
|
timeStamp: new Date(),
|
|
9
7
|
status: false,
|
|
10
8
|
data: data.data,
|
|
9
|
+
...data,
|
|
11
10
|
};
|
|
12
11
|
};
|
|
13
12
|
|
package/src/types/index.ts
CHANGED
|
@@ -7,6 +7,8 @@ export interface BootstrapConfig {
|
|
|
7
7
|
};
|
|
8
8
|
context?: ContextType;
|
|
9
9
|
modelConfig?: BootstrapModelConfig;
|
|
10
|
+
mutationMiddleware?: (mutateRequest?: any, mutateResponse?: any) => Promise<boolean>;
|
|
11
|
+
queryMiddleware?: (queryRequest?: any, queryResponse?: any) => Promise<boolean>;
|
|
10
12
|
}
|
|
11
13
|
|
|
12
14
|
export interface BootstrapModelConfig {
|