@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,35 +2,9 @@ import { useQueryClient } from '@tanstack/react-query';
|
|
|
2
2
|
|
|
3
3
|
const useQueryConfig = () => {
|
|
4
4
|
const queryClient = useQueryClient();
|
|
5
|
-
const setConfig = (options) => {
|
|
6
|
-
let mutationMeta = queryClient.getMutationDefaults()?.meta ?? {};
|
|
7
|
-
let queryMeta = queryClient.getQueryDefaults()?.meta ?? {};
|
|
8
|
-
const { pauseFutureMutations, pauseFutureQueries, mutationMiddleware, queryMiddleware, ...otherOptions } = options;
|
|
9
|
-
if (pauseFutureMutations) {
|
|
10
|
-
mutationMeta.pauseFutureMutations = pauseFutureMutations;
|
|
11
|
-
}
|
|
12
|
-
if (mutationMiddleware) {
|
|
13
|
-
mutationMeta.mutationMiddleware = mutationMiddleware;
|
|
14
|
-
}
|
|
15
|
-
mutationMeta = { meta: { ...mutationMeta, ...otherOptions } };
|
|
16
|
-
if (pauseFutureQueries) {
|
|
17
|
-
queryMeta.pauseFutureQueries = pauseFutureQueries;
|
|
18
|
-
}
|
|
19
|
-
if (queryMiddleware) {
|
|
20
|
-
queryMeta.mutationMiddleware = queryMiddleware;
|
|
21
|
-
}
|
|
22
|
-
queryMeta = { meta: { ...queryMeta, ...otherOptions } };
|
|
23
|
-
const defaultMutationOptions = queryClient.defaultMutationOptions();
|
|
24
|
-
const defaultQueryOptions = queryClient.defaultQueryOptions();
|
|
25
|
-
queryClient.setDefaultOptions({
|
|
26
|
-
queries: { ...defaultQueryOptions, meta: queryMeta },
|
|
27
|
-
mutations: { ...defaultMutationOptions, meta: mutationMeta },
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
5
|
const mutationMeta = (queryClient.getDefaultOptions().mutations?.meta ?? {});
|
|
31
6
|
const queryMeta = (queryClient.getDefaultOptions().queries?.meta ?? {});
|
|
32
|
-
|
|
33
|
-
return { options, setConfig };
|
|
7
|
+
return { ...queryMeta, ...mutationMeta };
|
|
34
8
|
};
|
|
35
9
|
|
|
36
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,12 +1,23 @@
|
|
|
1
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
1
2
|
import { useQueryConfig } from './useQueryConfig.js';
|
|
2
3
|
|
|
3
4
|
const useQueryHeaders = () => {
|
|
4
|
-
const
|
|
5
|
+
const queryClient = useQueryClient();
|
|
6
|
+
const { headers, options } = useQueryConfig();
|
|
5
7
|
const getHeaders = () => {
|
|
6
|
-
return
|
|
8
|
+
return headers;
|
|
7
9
|
};
|
|
8
|
-
const setQueryHeaders = (
|
|
9
|
-
|
|
10
|
+
const setQueryHeaders = (newHeaders) => {
|
|
11
|
+
const defaultMeta = {
|
|
12
|
+
headers: { ...headers, ...newHeaders },
|
|
13
|
+
options,
|
|
14
|
+
};
|
|
15
|
+
queryClient.setDefaultOptions({
|
|
16
|
+
queries: {
|
|
17
|
+
meta: defaultMeta,
|
|
18
|
+
},
|
|
19
|
+
mutations: { meta: defaultMeta },
|
|
20
|
+
});
|
|
10
21
|
};
|
|
11
22
|
return { setQueryHeaders, getHeaders };
|
|
12
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryHeaders.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useQueryHeaders.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -2,9 +2,9 @@ import { useQueryConfig } from './useQueryConfig.js';
|
|
|
2
2
|
|
|
3
3
|
const useReactNativeEnv = () => {
|
|
4
4
|
const config = useQueryConfig();
|
|
5
|
-
const appUrl = config.options
|
|
6
|
-
const appTimeout = config.options
|
|
7
|
-
const isApp = config.options
|
|
5
|
+
const appUrl = config.options?.environments?.appBaseUrl;
|
|
6
|
+
const appTimeout = config.options?.environments?.appTimeout;
|
|
7
|
+
const isApp = config.options?.context === 'app';
|
|
8
8
|
return { appUrl, appTimeout, isApp };
|
|
9
9
|
};
|
|
10
10
|
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ export { useQueryHeaders } from './config/useQueryHeaders.js';
|
|
|
5
5
|
export { useReactNativeEnv } from './config/useReactNativeEnv.js';
|
|
6
6
|
export { scrollToTop } from './helpers/scrollToTop.js';
|
|
7
7
|
export { getDateInFuture } from './helpers/timeFuncs.js';
|
|
8
|
+
export { useUploadProgress } from './hooks/useUploadProgress.js';
|
|
8
9
|
export { useKeyTrackerModel } from './model/useKeyTrackerModel.js';
|
|
9
10
|
export { useQueryModel } from './model/useQueryModel.js';
|
|
10
11
|
export { useRefetchQuery } from './model/useRefetchQuery.js';
|
|
@@ -18,4 +19,5 @@ export { buildFormData } from './request/buildFormData.js';
|
|
|
18
19
|
export { makeRequest } from './request/make-request.js';
|
|
19
20
|
export { ContentType, HttpMethod } from './request/request.enum.js';
|
|
20
21
|
export { errorTransformer, successTransformer } from './request/transformer.js';
|
|
22
|
+
export { usePauseFutureRequests } from './stores/usePauseFutureRequests.js';
|
|
21
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import 'url-search-params-polyfill';
|
|
2
2
|
import { useQueryClient, useQuery, useInfiniteQuery, useMutation } from '@tanstack/react-query';
|
|
3
|
+
import { useState, useEffect, useMemo, startTransition } from 'react';
|
|
3
4
|
import result from 'lodash.result';
|
|
4
5
|
import lodashSet from 'lodash.set';
|
|
5
|
-
import { useState, useEffect, useMemo, startTransition } from 'react';
|
|
6
6
|
import axios from 'axios';
|
|
7
|
+
import { create } from 'zustand';
|
|
7
8
|
|
|
8
9
|
const bootstrapQueryRequest = (queryClient, options) => {
|
|
9
10
|
// make query config doesn't expire
|
|
@@ -12,7 +13,7 @@ const bootstrapQueryRequest = (queryClient, options) => {
|
|
|
12
13
|
headers: {
|
|
13
14
|
Authorization: ``,
|
|
14
15
|
},
|
|
15
|
-
|
|
16
|
+
options,
|
|
16
17
|
};
|
|
17
18
|
queryClient.setDefaultOptions({
|
|
18
19
|
queries: {
|
|
@@ -24,42 +25,16 @@ const bootstrapQueryRequest = (queryClient, options) => {
|
|
|
24
25
|
|
|
25
26
|
const useQueryConfig = () => {
|
|
26
27
|
const queryClient = useQueryClient();
|
|
27
|
-
const setConfig = (options) => {
|
|
28
|
-
let mutationMeta = queryClient.getMutationDefaults()?.meta ?? {};
|
|
29
|
-
let queryMeta = queryClient.getQueryDefaults()?.meta ?? {};
|
|
30
|
-
const { pauseFutureMutations, pauseFutureQueries, mutationMiddleware, queryMiddleware, ...otherOptions } = options;
|
|
31
|
-
if (pauseFutureMutations) {
|
|
32
|
-
mutationMeta.pauseFutureMutations = pauseFutureMutations;
|
|
33
|
-
}
|
|
34
|
-
if (mutationMiddleware) {
|
|
35
|
-
mutationMeta.mutationMiddleware = mutationMiddleware;
|
|
36
|
-
}
|
|
37
|
-
mutationMeta = { meta: { ...mutationMeta, ...otherOptions } };
|
|
38
|
-
if (pauseFutureQueries) {
|
|
39
|
-
queryMeta.pauseFutureQueries = pauseFutureQueries;
|
|
40
|
-
}
|
|
41
|
-
if (queryMiddleware) {
|
|
42
|
-
queryMeta.mutationMiddleware = queryMiddleware;
|
|
43
|
-
}
|
|
44
|
-
queryMeta = { meta: { ...queryMeta, ...otherOptions } };
|
|
45
|
-
const defaultMutationOptions = queryClient.defaultMutationOptions();
|
|
46
|
-
const defaultQueryOptions = queryClient.defaultQueryOptions();
|
|
47
|
-
queryClient.setDefaultOptions({
|
|
48
|
-
queries: { ...defaultQueryOptions, meta: queryMeta },
|
|
49
|
-
mutations: { ...defaultMutationOptions, meta: mutationMeta },
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
28
|
const mutationMeta = (queryClient.getDefaultOptions().mutations?.meta ?? {});
|
|
53
29
|
const queryMeta = (queryClient.getDefaultOptions().queries?.meta ?? {});
|
|
54
|
-
|
|
55
|
-
return { options, setConfig };
|
|
30
|
+
return { ...queryMeta, ...mutationMeta };
|
|
56
31
|
};
|
|
57
32
|
|
|
58
33
|
const useReactNativeEnv = () => {
|
|
59
34
|
const config = useQueryConfig();
|
|
60
|
-
const appUrl = config.options
|
|
61
|
-
const appTimeout = config.options
|
|
62
|
-
const isApp = config.options
|
|
35
|
+
const appUrl = config.options?.environments?.appBaseUrl;
|
|
36
|
+
const appTimeout = config.options?.environments?.appTimeout;
|
|
37
|
+
const isApp = config.options?.context === 'app';
|
|
63
38
|
return { appUrl, appTimeout, isApp };
|
|
64
39
|
};
|
|
65
40
|
|
|
@@ -74,12 +49,22 @@ const useEnvironmentVariables = () => {
|
|
|
74
49
|
};
|
|
75
50
|
|
|
76
51
|
const useQueryHeaders = () => {
|
|
77
|
-
const
|
|
52
|
+
const queryClient = useQueryClient();
|
|
53
|
+
const { headers, options } = useQueryConfig();
|
|
78
54
|
const getHeaders = () => {
|
|
79
|
-
return
|
|
55
|
+
return headers;
|
|
80
56
|
};
|
|
81
|
-
const setQueryHeaders = (
|
|
82
|
-
|
|
57
|
+
const setQueryHeaders = (newHeaders) => {
|
|
58
|
+
const defaultMeta = {
|
|
59
|
+
headers: { ...headers, ...newHeaders },
|
|
60
|
+
options,
|
|
61
|
+
};
|
|
62
|
+
queryClient.setDefaultOptions({
|
|
63
|
+
queries: {
|
|
64
|
+
meta: defaultMeta,
|
|
65
|
+
},
|
|
66
|
+
mutations: { meta: defaultMeta },
|
|
67
|
+
});
|
|
83
68
|
};
|
|
84
69
|
return { setQueryHeaders, getHeaders };
|
|
85
70
|
};
|
|
@@ -100,14 +85,20 @@ function getDateInFuture(days) {
|
|
|
100
85
|
return date.getTime();
|
|
101
86
|
}
|
|
102
87
|
|
|
88
|
+
const useUploadProgress = () => {
|
|
89
|
+
const [uploadProgressPercent, setUploadProgressPercent] = useState(0);
|
|
90
|
+
const onUploadProgress = (progressEvent) => {
|
|
91
|
+
const { loaded, total } = progressEvent;
|
|
92
|
+
const percentage = Math.round((loaded / total) * 100);
|
|
93
|
+
setUploadProgressPercent(percentage);
|
|
94
|
+
};
|
|
95
|
+
return { onUploadProgress, uploadProgressPercent };
|
|
96
|
+
};
|
|
97
|
+
|
|
103
98
|
const useKeyTrackerModel = (keyTracker) => {
|
|
104
99
|
const queryClient = useQueryClient();
|
|
105
100
|
const getQueryKey = (innerKeyTracker) => {
|
|
106
|
-
const
|
|
107
|
-
...queryClient.getDefaultOptions().mutations?.meta,
|
|
108
|
-
...queryClient.getDefaultOptions().queries?.meta,
|
|
109
|
-
};
|
|
110
|
-
const queryKey = meta[innerKeyTracker ?? keyTracker];
|
|
101
|
+
const queryKey = queryClient.getQueryData([innerKeyTracker ?? keyTracker]);
|
|
111
102
|
return queryKey;
|
|
112
103
|
};
|
|
113
104
|
const refetchQuery = async (innerKeyTracker) => {
|
|
@@ -411,12 +402,28 @@ function getAppFiles(body, fileSelectors = []) {
|
|
|
411
402
|
return files;
|
|
412
403
|
}
|
|
413
404
|
|
|
405
|
+
const usePauseFutureRequests = create((set) => {
|
|
406
|
+
const pauseFutureQueries = (status) => {
|
|
407
|
+
return set({ isFutureQueriesPaused: status });
|
|
408
|
+
};
|
|
409
|
+
const pauseFutureMutation = (status) => {
|
|
410
|
+
return set({ isFutureQueriesPaused: status });
|
|
411
|
+
};
|
|
412
|
+
return {
|
|
413
|
+
isFutureMutationsPaused: false,
|
|
414
|
+
isFutureQueriesPaused: false,
|
|
415
|
+
pauseFutureQueries,
|
|
416
|
+
pauseFutureMutation,
|
|
417
|
+
};
|
|
418
|
+
});
|
|
419
|
+
|
|
414
420
|
const useDeleteRequest = (deleteOptions) => {
|
|
415
421
|
const { baseUrl, headers } = deleteOptions ?? {};
|
|
416
422
|
const [requestPath, setRequestPath] = useState('');
|
|
417
423
|
const [options, setOptions] = useState();
|
|
418
|
-
const [destroyConfig, setDestroyConfig] = useState();
|
|
419
424
|
const { options: queryConfigOptions } = useQueryConfig();
|
|
425
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
426
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
420
427
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
421
428
|
const { getHeaders } = useQueryHeaders();
|
|
422
429
|
const sendRequest = async (res, rej, queryKey) => {
|
|
@@ -431,7 +438,7 @@ const useDeleteRequest = (deleteOptions) => {
|
|
|
431
438
|
timeout: TIMEOUT,
|
|
432
439
|
};
|
|
433
440
|
let shouldContinue = true;
|
|
434
|
-
if (queryConfigOptions
|
|
441
|
+
if (queryConfigOptions?.queryMiddleware) {
|
|
435
442
|
shouldContinue = await queryConfigOptions.queryMiddleware({ queryKey, ...requestOptions });
|
|
436
443
|
}
|
|
437
444
|
if (shouldContinue) {
|
|
@@ -455,7 +462,7 @@ const useDeleteRequest = (deleteOptions) => {
|
|
|
455
462
|
return setOptions(fetchOptions);
|
|
456
463
|
};
|
|
457
464
|
const destroy = async (link, internalDeleteOptions) => {
|
|
458
|
-
if (!
|
|
465
|
+
if (!isFutureQueriesPaused) {
|
|
459
466
|
// set enabled to be true for every delete
|
|
460
467
|
internalDeleteOptions = internalDeleteOptions ?? {};
|
|
461
468
|
internalDeleteOptions.enabled = true;
|
|
@@ -464,28 +471,28 @@ const useDeleteRequest = (deleteOptions) => {
|
|
|
464
471
|
return query.data;
|
|
465
472
|
}
|
|
466
473
|
else {
|
|
467
|
-
|
|
468
|
-
setDestroyConfig({ link, internalDeleteOptions });
|
|
474
|
+
setRequestPayload({ link, internalDeleteOptions });
|
|
469
475
|
return undefined;
|
|
470
476
|
}
|
|
471
477
|
};
|
|
472
478
|
useEffect(() => {
|
|
473
|
-
if (!
|
|
474
|
-
destroy(
|
|
475
|
-
|
|
479
|
+
if (!isFutureQueriesPaused && requestPayload) {
|
|
480
|
+
destroy(requestPayload.link, requestPayload.internalDeleteOptions);
|
|
481
|
+
setRequestPayload(undefined);
|
|
476
482
|
}
|
|
477
483
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
478
|
-
}, [
|
|
479
|
-
return { destroy, ...query, isLoading: query.isLoading ||
|
|
484
|
+
}, [isFutureQueriesPaused]);
|
|
485
|
+
return { destroy, ...query, isLoading: query.isLoading || isFutureQueriesPaused };
|
|
480
486
|
};
|
|
481
487
|
|
|
482
488
|
const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl, headers, }) => {
|
|
483
489
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
484
490
|
const { getHeaders } = useQueryHeaders();
|
|
485
491
|
const [requestPath, setRequestPath] = useState(path);
|
|
486
|
-
const [queryConfig, setQueryConfig] = useState();
|
|
487
492
|
const [options, setOptions] = useState(queryOptions);
|
|
488
|
-
const { options: queryConfigOptions
|
|
493
|
+
const { options: queryConfigOptions } = useQueryConfig();
|
|
494
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
495
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
489
496
|
let queryClient = useQueryClient();
|
|
490
497
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
491
498
|
queryClient = useMemo(() => queryClient, []);
|
|
@@ -500,7 +507,7 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
500
507
|
timeout: TIMEOUT,
|
|
501
508
|
};
|
|
502
509
|
let shouldContinue = true;
|
|
503
|
-
if (queryConfigOptions
|
|
510
|
+
if (queryConfigOptions?.queryMiddleware) {
|
|
504
511
|
shouldContinue = await queryConfigOptions.queryMiddleware({ queryKey, ...requestOptions });
|
|
505
512
|
}
|
|
506
513
|
if (shouldContinue) {
|
|
@@ -532,7 +539,7 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
532
539
|
return pathname + '?' + queryParams.toString();
|
|
533
540
|
};
|
|
534
541
|
const query = useInfiniteQuery([requestPath, {}], ({ pageParam = requestPath, queryKey }) => new Promise((res, rej) => sendRequest(res, rej, queryKey, pageParam)), {
|
|
535
|
-
enabled: load
|
|
542
|
+
enabled: load && !isFutureQueriesPaused,
|
|
536
543
|
getNextPageParam: (lastPage) => constructPaginationLink('next_page', lastPage),
|
|
537
544
|
getPreviousPageParam: (lastPage) => constructPaginationLink('previous_page', lastPage),
|
|
538
545
|
...options,
|
|
@@ -543,16 +550,23 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
543
550
|
});
|
|
544
551
|
};
|
|
545
552
|
const get = async (link, fetchOptions) => {
|
|
546
|
-
if (!
|
|
553
|
+
if (!isFutureQueriesPaused) {
|
|
547
554
|
await setOptionsAsync(fetchOptions);
|
|
548
555
|
await updatedPathAsync(link);
|
|
549
556
|
return query.data;
|
|
550
557
|
}
|
|
551
558
|
else {
|
|
552
|
-
|
|
559
|
+
setRequestPayload({ link, fetchOptions });
|
|
553
560
|
return undefined;
|
|
554
561
|
}
|
|
555
562
|
};
|
|
563
|
+
useEffect(() => {
|
|
564
|
+
if (!isFutureQueriesPaused && requestPayload) {
|
|
565
|
+
get(requestPayload.link, requestPayload.fetchOptions);
|
|
566
|
+
setRequestPayload(undefined);
|
|
567
|
+
}
|
|
568
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
569
|
+
}, [isFutureQueriesPaused]);
|
|
556
570
|
const updatedPathAsync = async (link) => {
|
|
557
571
|
startTransition(() => {
|
|
558
572
|
setRequestPath(link);
|
|
@@ -560,21 +574,18 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
560
574
|
};
|
|
561
575
|
useEffect(() => {
|
|
562
576
|
if (keyTracker) {
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
get(queryConfig.link, queryConfig.fetchOptions);
|
|
570
|
-
setQueryConfig(undefined);
|
|
577
|
+
// set expiration time for the tracker
|
|
578
|
+
queryClient.setQueryDefaults([keyTracker], {
|
|
579
|
+
cacheTime: Infinity,
|
|
580
|
+
staleTime: Infinity,
|
|
581
|
+
});
|
|
582
|
+
queryClient.setQueryData([keyTracker], [requestPath, {}]);
|
|
571
583
|
}
|
|
572
|
-
|
|
573
|
-
}, [queryConfigOptions.pauseFutureQueries]);
|
|
584
|
+
}, [keyTracker, requestPath, queryClient, queryOptions?.staleTime]);
|
|
574
585
|
return {
|
|
575
586
|
get,
|
|
576
587
|
...query,
|
|
577
|
-
isLoading: query.isLoading ||
|
|
588
|
+
isLoading: query.isLoading || isFutureQueriesPaused,
|
|
578
589
|
};
|
|
579
590
|
};
|
|
580
591
|
|
|
@@ -584,8 +595,9 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
584
595
|
const [page, setPage] = useState(1);
|
|
585
596
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
586
597
|
const { getHeaders } = useQueryHeaders();
|
|
587
|
-
const { options: queryConfigOptions
|
|
588
|
-
const [
|
|
598
|
+
const { options: queryConfigOptions } = useQueryConfig();
|
|
599
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
600
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
589
601
|
let queryClient = useQueryClient();
|
|
590
602
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
591
603
|
queryClient = useMemo(() => queryClient, []);
|
|
@@ -602,7 +614,7 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
602
614
|
timeout: TIMEOUT,
|
|
603
615
|
};
|
|
604
616
|
let shouldContinue = true;
|
|
605
|
-
if (queryConfigOptions
|
|
617
|
+
if (queryConfigOptions?.queryMiddleware) {
|
|
606
618
|
shouldContinue = await queryConfigOptions.queryMiddleware({ queryKey, ...requestOptions });
|
|
607
619
|
}
|
|
608
620
|
if (shouldContinue) {
|
|
@@ -623,7 +635,7 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
623
635
|
}
|
|
624
636
|
};
|
|
625
637
|
const query = useQuery([requestPath, {}], ({ queryKey }) => new Promise((res, rej) => sendRequest(res, rej, queryKey)), {
|
|
626
|
-
enabled: load,
|
|
638
|
+
enabled: load && !isFutureQueriesPaused,
|
|
627
639
|
...options,
|
|
628
640
|
});
|
|
629
641
|
useEffect(() => {
|
|
@@ -633,10 +645,14 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
633
645
|
}, [path]);
|
|
634
646
|
useEffect(() => {
|
|
635
647
|
if (keyTracker) {
|
|
636
|
-
|
|
648
|
+
// set expiration time for the tracker
|
|
649
|
+
queryClient.setQueryDefaults([keyTracker], {
|
|
650
|
+
cacheTime: Infinity,
|
|
651
|
+
staleTime: Infinity,
|
|
652
|
+
});
|
|
653
|
+
queryClient.setQueryData([keyTracker], [requestPath, {}]);
|
|
637
654
|
}
|
|
638
|
-
|
|
639
|
-
}, [keyTracker, requestPath]);
|
|
655
|
+
}, [keyTracker, requestPath, queryClient, queryOptions?.staleTime]);
|
|
640
656
|
const nextPage = () => {
|
|
641
657
|
if (query.data?.data.pagination) {
|
|
642
658
|
const pagination = query.data.data.pagination;
|
|
@@ -679,26 +695,26 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
679
695
|
});
|
|
680
696
|
};
|
|
681
697
|
const get = async (link, fetchOptions) => {
|
|
682
|
-
if (!
|
|
698
|
+
if (!isFutureQueriesPaused) {
|
|
683
699
|
await setOptionsAsync(fetchOptions);
|
|
684
700
|
await updatedPathAsync(link);
|
|
685
701
|
return query.data;
|
|
686
702
|
}
|
|
687
703
|
else {
|
|
688
|
-
|
|
704
|
+
setRequestPayload({ link, fetchOptions });
|
|
689
705
|
return undefined;
|
|
690
706
|
}
|
|
691
707
|
};
|
|
692
708
|
useEffect(() => {
|
|
693
|
-
if (!
|
|
694
|
-
get(
|
|
695
|
-
|
|
709
|
+
if (!isFutureQueriesPaused && requestPayload) {
|
|
710
|
+
get(requestPayload.link, requestPayload.fetchOptions);
|
|
711
|
+
setRequestPayload(undefined);
|
|
696
712
|
}
|
|
697
713
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
698
|
-
}, [
|
|
714
|
+
}, [isFutureQueriesPaused]);
|
|
699
715
|
return {
|
|
700
716
|
...query,
|
|
701
|
-
isLoading: query.isLoading ||
|
|
717
|
+
isLoading: query.isLoading || isFutureQueriesPaused,
|
|
702
718
|
setRequestPath,
|
|
703
719
|
nextPage,
|
|
704
720
|
prevPage,
|
|
@@ -709,20 +725,11 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
709
725
|
};
|
|
710
726
|
};
|
|
711
727
|
|
|
712
|
-
const useUploadProgress = () => {
|
|
713
|
-
const [uploadProgressPercent, setUploadProgressPercent] = useState(0);
|
|
714
|
-
const onUploadProgress = (progressEvent) => {
|
|
715
|
-
const { loaded, total } = progressEvent;
|
|
716
|
-
const percentage = Math.round((loaded / total) * 100);
|
|
717
|
-
setUploadProgressPercent(percentage);
|
|
718
|
-
};
|
|
719
|
-
return { onUploadProgress, uploadProgressPercent };
|
|
720
|
-
};
|
|
721
|
-
|
|
722
728
|
const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
723
729
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
724
730
|
const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
|
|
725
|
-
const [
|
|
731
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
732
|
+
const isFutureMutationsPaused = usePauseFutureRequests((state) => state.isFutureMutationsPaused);
|
|
726
733
|
const { getHeaders } = useQueryHeaders();
|
|
727
734
|
const config = useQueryConfig();
|
|
728
735
|
const sendRequest = async (res, rej, data) => {
|
|
@@ -738,7 +745,7 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
|
738
745
|
onUploadProgress,
|
|
739
746
|
};
|
|
740
747
|
let shouldContinue = true;
|
|
741
|
-
if (config.options
|
|
748
|
+
if (config.options?.mutationMiddleware) {
|
|
742
749
|
shouldContinue = await config.options.mutationMiddleware({
|
|
743
750
|
mutationKey: [path, { type: 'mutation' }],
|
|
744
751
|
...requestOptions,
|
|
@@ -748,14 +755,14 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
|
748
755
|
const patchResponse = await makeRequest(requestOptions);
|
|
749
756
|
if (patchResponse.status) {
|
|
750
757
|
// scroll to top after success
|
|
751
|
-
if (config.options
|
|
758
|
+
if (config.options?.context !== 'app') {
|
|
752
759
|
scrollToTop();
|
|
753
760
|
}
|
|
754
761
|
res(patchResponse);
|
|
755
762
|
}
|
|
756
763
|
else {
|
|
757
764
|
// scroll to top after error
|
|
758
|
-
if (config.options
|
|
765
|
+
if (config.options?.context !== 'app') {
|
|
759
766
|
scrollToTop();
|
|
760
767
|
}
|
|
761
768
|
rej(patchResponse);
|
|
@@ -770,36 +777,32 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
|
770
777
|
return sendRequest(res, rej, dataData);
|
|
771
778
|
}), { mutationKey: [path, { type: 'mutation' }] });
|
|
772
779
|
const patch = async (data, options) => {
|
|
773
|
-
if (!
|
|
780
|
+
if (!isFutureMutationsPaused) {
|
|
774
781
|
return mutation.mutateAsync(data, options);
|
|
775
782
|
}
|
|
776
783
|
else {
|
|
777
|
-
|
|
784
|
+
setRequestPayload({ data, options });
|
|
778
785
|
return undefined;
|
|
779
786
|
}
|
|
780
787
|
};
|
|
781
788
|
useEffect(() => {
|
|
782
|
-
if (!
|
|
783
|
-
patch(
|
|
784
|
-
|
|
789
|
+
if (!isFutureMutationsPaused && requestPayload) {
|
|
790
|
+
patch(requestPayload.data, requestPayload.options);
|
|
791
|
+
setRequestPayload(undefined);
|
|
785
792
|
}
|
|
786
793
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
787
|
-
}, [
|
|
788
|
-
return {
|
|
789
|
-
patch,
|
|
790
|
-
uploadProgressPercent,
|
|
791
|
-
...mutation,
|
|
792
|
-
isLoading: mutation.isLoading || config.options.pauseFutureMutations,
|
|
793
|
-
};
|
|
794
|
+
}, [isFutureMutationsPaused]);
|
|
795
|
+
return { patch, uploadProgressPercent, ...mutation, isLoading: mutation.isLoading || isFutureMutationsPaused };
|
|
794
796
|
};
|
|
795
797
|
|
|
796
798
|
const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelectors, }) => {
|
|
797
799
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
798
800
|
const config = useQueryConfig();
|
|
799
|
-
const [mutationConfig, setMutationConfig] = useState();
|
|
800
801
|
const { getHeaders } = useQueryHeaders();
|
|
801
802
|
const { isApp } = useReactNativeEnv();
|
|
802
803
|
const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
|
|
804
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
805
|
+
const isFutureMutationsPaused = usePauseFutureRequests((state) => state.isFutureMutationsPaused);
|
|
803
806
|
const sendRequest = async (res, rej, postData) => {
|
|
804
807
|
// get request headers
|
|
805
808
|
const globalHeaders = getHeaders();
|
|
@@ -821,7 +824,7 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
|
|
|
821
824
|
...requestConfig,
|
|
822
825
|
};
|
|
823
826
|
let shouldContinue = true;
|
|
824
|
-
if (config.options
|
|
827
|
+
if (config.options?.mutationMiddleware) {
|
|
825
828
|
shouldContinue = await config.options.mutationMiddleware({
|
|
826
829
|
mutationKey: [path, { type: 'mutation' }],
|
|
827
830
|
...requestOptions,
|
|
@@ -831,14 +834,14 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
|
|
|
831
834
|
const postResponse = await makeRequest(requestOptions);
|
|
832
835
|
if (postResponse.status) {
|
|
833
836
|
// scroll to top after success
|
|
834
|
-
if (config.options
|
|
837
|
+
if (config.options?.context !== 'app') {
|
|
835
838
|
scrollToTop();
|
|
836
839
|
}
|
|
837
840
|
res(postResponse);
|
|
838
841
|
}
|
|
839
842
|
else {
|
|
840
843
|
// scroll to top after error
|
|
841
|
-
if (config.options
|
|
844
|
+
if (config.options?.context !== 'app') {
|
|
842
845
|
scrollToTop();
|
|
843
846
|
}
|
|
844
847
|
rej(postResponse);
|
|
@@ -853,24 +856,24 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
|
|
|
853
856
|
mutationKey: [path, { type: 'mutation' }],
|
|
854
857
|
});
|
|
855
858
|
const post = async (data, options) => {
|
|
856
|
-
if (!
|
|
859
|
+
if (!isFutureMutationsPaused) {
|
|
857
860
|
const { requestConfig, ...otherOptions } = options ?? {};
|
|
858
861
|
return mutation.mutateAsync({ data, requestConfig }, otherOptions);
|
|
859
862
|
}
|
|
860
863
|
else {
|
|
861
|
-
|
|
864
|
+
setRequestPayload({ data, options });
|
|
862
865
|
return undefined;
|
|
863
866
|
}
|
|
864
867
|
};
|
|
865
868
|
useEffect(() => {
|
|
866
|
-
if (!
|
|
867
|
-
post(
|
|
868
|
-
|
|
869
|
+
if (!isFutureMutationsPaused && requestPayload) {
|
|
870
|
+
post(requestPayload.data, requestPayload.options);
|
|
871
|
+
setRequestPayload(undefined);
|
|
869
872
|
}
|
|
870
873
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
871
|
-
}, [
|
|
872
|
-
return { post, uploadProgressPercent, ...mutation };
|
|
874
|
+
}, [isFutureMutationsPaused]);
|
|
875
|
+
return { post, uploadProgressPercent, ...mutation, isLoading: mutation.isLoading || isFutureMutationsPaused };
|
|
873
876
|
};
|
|
874
877
|
|
|
875
|
-
export { ContentType, HttpMethod, axiosInstance, bootstrapQueryRequest, buildFormData, errorTransformer, getDateInFuture, makeRequest, scrollToTop, successTransformer, useDeleteRequest, useEnvironmentVariables, useGetInfiniteRequest, useGetRequest, useKeyTrackerModel, usePatchRequest, usePostRequest, useQueryConfig, useQueryHeaders, useQueryModel, useReactNativeEnv, useRefetchQuery };
|
|
878
|
+
export { ContentType, HttpMethod, axiosInstance, bootstrapQueryRequest, buildFormData, errorTransformer, getDateInFuture, makeRequest, scrollToTop, successTransformer, useDeleteRequest, useEnvironmentVariables, useGetInfiniteRequest, useGetRequest, useKeyTrackerModel, usePatchRequest, usePauseFutureRequests, usePostRequest, useQueryConfig, useQueryHeaders, useQueryModel, useReactNativeEnv, useRefetchQuery, useUploadProgress };
|
|
876
879
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|