@ventlio/tanstack-query 0.3.1 → 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/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +126 -33
- package/dist/index.mjs.map +1 -1
- package/dist/queries/useDeleteRequest.d.ts +4 -4
- package/dist/queries/useDeleteRequest.js +24 -8
- package/dist/queries/useDeleteRequest.js.map +1 -1
- package/dist/queries/useGetInfiniteRequest.d.ts +4 -4
- package/dist/queries/useGetInfiniteRequest.js +21 -4
- package/dist/queries/useGetInfiniteRequest.js.map +1 -1
- package/dist/queries/useGetRequest.d.ts +4 -4
- package/dist/queries/useGetRequest.js +21 -4
- package/dist/queries/useGetRequest.js.map +1 -1
- package/dist/queries/usePatchRequest.d.ts +8 -8
- package/dist/queries/usePatchRequest.js +19 -2
- package/dist/queries/usePatchRequest.js.map +1 -1
- package/dist/queries/usePostRequest.d.ts +8 -8
- package/dist/queries/usePostRequest.js +20 -3
- 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/package.json +3 -2
- package/src/index.ts +2 -0
- package/src/queries/useDeleteRequest.ts +25 -8
- package/src/queries/useGetInfiniteRequest.ts +22 -4
- package/src/queries/useGetRequest.ts +22 -4
- package/src/queries/usePatchRequest.ts +22 -3
- package/src/queries/usePostRequest.ts +22 -4
- package/src/stores/index.ts +1 -0
- package/src/stores/usePauseFutureRequests.ts +25 -0
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, useMemo, useEffect, 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
|
|
@@ -84,6 +85,16 @@ function getDateInFuture(days) {
|
|
|
84
85
|
return date.getTime();
|
|
85
86
|
}
|
|
86
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
|
+
|
|
87
98
|
const useKeyTrackerModel = (keyTracker) => {
|
|
88
99
|
const queryClient = useQueryClient();
|
|
89
100
|
const getQueryKey = (innerKeyTracker) => {
|
|
@@ -391,11 +402,28 @@ function getAppFiles(body, fileSelectors = []) {
|
|
|
391
402
|
return files;
|
|
392
403
|
}
|
|
393
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
|
+
|
|
394
420
|
const useDeleteRequest = (deleteOptions) => {
|
|
395
421
|
const { baseUrl, headers } = deleteOptions ?? {};
|
|
396
422
|
const [requestPath, setRequestPath] = useState('');
|
|
397
423
|
const [options, setOptions] = useState();
|
|
398
424
|
const { options: queryConfigOptions } = useQueryConfig();
|
|
425
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
426
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
399
427
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
400
428
|
const { getHeaders } = useQueryHeaders();
|
|
401
429
|
const sendRequest = async (res, rej, queryKey) => {
|
|
@@ -434,14 +462,27 @@ const useDeleteRequest = (deleteOptions) => {
|
|
|
434
462
|
return setOptions(fetchOptions);
|
|
435
463
|
};
|
|
436
464
|
const destroy = async (link, internalDeleteOptions) => {
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
465
|
+
if (!isFutureQueriesPaused) {
|
|
466
|
+
// set enabled to be true for every delete
|
|
467
|
+
internalDeleteOptions = internalDeleteOptions ?? {};
|
|
468
|
+
internalDeleteOptions.enabled = true;
|
|
469
|
+
await setOptionsAsync(internalDeleteOptions);
|
|
470
|
+
await updatedPathAsync(link);
|
|
471
|
+
return query.data;
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
setRequestPayload({ link, internalDeleteOptions });
|
|
475
|
+
return undefined;
|
|
476
|
+
}
|
|
477
|
+
};
|
|
478
|
+
useEffect(() => {
|
|
479
|
+
if (!isFutureQueriesPaused && requestPayload) {
|
|
480
|
+
destroy(requestPayload.link, requestPayload.internalDeleteOptions);
|
|
481
|
+
setRequestPayload(undefined);
|
|
482
|
+
}
|
|
483
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
484
|
+
}, [isFutureQueriesPaused]);
|
|
485
|
+
return { destroy, ...query, isLoading: query.isLoading || isFutureQueriesPaused };
|
|
445
486
|
};
|
|
446
487
|
|
|
447
488
|
const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl, headers, }) => {
|
|
@@ -450,6 +491,8 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
450
491
|
const [requestPath, setRequestPath] = useState(path);
|
|
451
492
|
const [options, setOptions] = useState(queryOptions);
|
|
452
493
|
const { options: queryConfigOptions } = useQueryConfig();
|
|
494
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
495
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
453
496
|
let queryClient = useQueryClient();
|
|
454
497
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
455
498
|
queryClient = useMemo(() => queryClient, []);
|
|
@@ -496,7 +539,7 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
496
539
|
return pathname + '?' + queryParams.toString();
|
|
497
540
|
};
|
|
498
541
|
const query = useInfiniteQuery([requestPath, {}], ({ pageParam = requestPath, queryKey }) => new Promise((res, rej) => sendRequest(res, rej, queryKey, pageParam)), {
|
|
499
|
-
enabled: load,
|
|
542
|
+
enabled: load && !isFutureQueriesPaused,
|
|
500
543
|
getNextPageParam: (lastPage) => constructPaginationLink('next_page', lastPage),
|
|
501
544
|
getPreviousPageParam: (lastPage) => constructPaginationLink('previous_page', lastPage),
|
|
502
545
|
...options,
|
|
@@ -507,10 +550,23 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
507
550
|
});
|
|
508
551
|
};
|
|
509
552
|
const get = async (link, fetchOptions) => {
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
553
|
+
if (!isFutureQueriesPaused) {
|
|
554
|
+
await setOptionsAsync(fetchOptions);
|
|
555
|
+
await updatedPathAsync(link);
|
|
556
|
+
return query.data;
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
setRequestPayload({ link, fetchOptions });
|
|
560
|
+
return undefined;
|
|
561
|
+
}
|
|
513
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]);
|
|
514
570
|
const updatedPathAsync = async (link) => {
|
|
515
571
|
startTransition(() => {
|
|
516
572
|
setRequestPath(link);
|
|
@@ -529,6 +585,7 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
529
585
|
return {
|
|
530
586
|
get,
|
|
531
587
|
...query,
|
|
588
|
+
isLoading: query.isLoading || isFutureQueriesPaused,
|
|
532
589
|
};
|
|
533
590
|
};
|
|
534
591
|
|
|
@@ -539,6 +596,8 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
539
596
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
540
597
|
const { getHeaders } = useQueryHeaders();
|
|
541
598
|
const { options: queryConfigOptions } = useQueryConfig();
|
|
599
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
600
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
542
601
|
let queryClient = useQueryClient();
|
|
543
602
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
544
603
|
queryClient = useMemo(() => queryClient, []);
|
|
@@ -576,7 +635,7 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
576
635
|
}
|
|
577
636
|
};
|
|
578
637
|
const query = useQuery([requestPath, {}], ({ queryKey }) => new Promise((res, rej) => sendRequest(res, rej, queryKey)), {
|
|
579
|
-
enabled: load,
|
|
638
|
+
enabled: load && !isFutureQueriesPaused,
|
|
580
639
|
...options,
|
|
581
640
|
});
|
|
582
641
|
useEffect(() => {
|
|
@@ -636,12 +695,26 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
636
695
|
});
|
|
637
696
|
};
|
|
638
697
|
const get = async (link, fetchOptions) => {
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
698
|
+
if (!isFutureQueriesPaused) {
|
|
699
|
+
await setOptionsAsync(fetchOptions);
|
|
700
|
+
await updatedPathAsync(link);
|
|
701
|
+
return query.data;
|
|
702
|
+
}
|
|
703
|
+
else {
|
|
704
|
+
setRequestPayload({ link, fetchOptions });
|
|
705
|
+
return undefined;
|
|
706
|
+
}
|
|
642
707
|
};
|
|
708
|
+
useEffect(() => {
|
|
709
|
+
if (!isFutureQueriesPaused && requestPayload) {
|
|
710
|
+
get(requestPayload.link, requestPayload.fetchOptions);
|
|
711
|
+
setRequestPayload(undefined);
|
|
712
|
+
}
|
|
713
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
714
|
+
}, [isFutureQueriesPaused]);
|
|
643
715
|
return {
|
|
644
716
|
...query,
|
|
717
|
+
isLoading: query.isLoading || isFutureQueriesPaused,
|
|
645
718
|
setRequestPath,
|
|
646
719
|
nextPage,
|
|
647
720
|
prevPage,
|
|
@@ -652,19 +725,11 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
652
725
|
};
|
|
653
726
|
};
|
|
654
727
|
|
|
655
|
-
const useUploadProgress = () => {
|
|
656
|
-
const [uploadProgressPercent, setUploadProgressPercent] = useState(0);
|
|
657
|
-
const onUploadProgress = (progressEvent) => {
|
|
658
|
-
const { loaded, total } = progressEvent;
|
|
659
|
-
const percentage = Math.round((loaded / total) * 100);
|
|
660
|
-
setUploadProgressPercent(percentage);
|
|
661
|
-
};
|
|
662
|
-
return { onUploadProgress, uploadProgressPercent };
|
|
663
|
-
};
|
|
664
|
-
|
|
665
728
|
const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
666
729
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
667
730
|
const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
|
|
731
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
732
|
+
const isFutureMutationsPaused = usePauseFutureRequests((state) => state.isFutureMutationsPaused);
|
|
668
733
|
const { getHeaders } = useQueryHeaders();
|
|
669
734
|
const config = useQueryConfig();
|
|
670
735
|
const sendRequest = async (res, rej, data) => {
|
|
@@ -712,9 +777,22 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
|
|
|
712
777
|
return sendRequest(res, rej, dataData);
|
|
713
778
|
}), { mutationKey: [path, { type: 'mutation' }] });
|
|
714
779
|
const patch = async (data, options) => {
|
|
715
|
-
|
|
780
|
+
if (!isFutureMutationsPaused) {
|
|
781
|
+
return mutation.mutateAsync(data, options);
|
|
782
|
+
}
|
|
783
|
+
else {
|
|
784
|
+
setRequestPayload({ data, options });
|
|
785
|
+
return undefined;
|
|
786
|
+
}
|
|
716
787
|
};
|
|
717
|
-
|
|
788
|
+
useEffect(() => {
|
|
789
|
+
if (!isFutureMutationsPaused && requestPayload) {
|
|
790
|
+
patch(requestPayload.data, requestPayload.options);
|
|
791
|
+
setRequestPayload(undefined);
|
|
792
|
+
}
|
|
793
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
794
|
+
}, [isFutureMutationsPaused]);
|
|
795
|
+
return { patch, uploadProgressPercent, ...mutation, isLoading: mutation.isLoading || isFutureMutationsPaused };
|
|
718
796
|
};
|
|
719
797
|
|
|
720
798
|
const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelectors, }) => {
|
|
@@ -723,6 +801,8 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
|
|
|
723
801
|
const { getHeaders } = useQueryHeaders();
|
|
724
802
|
const { isApp } = useReactNativeEnv();
|
|
725
803
|
const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
|
|
804
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
805
|
+
const isFutureMutationsPaused = usePauseFutureRequests((state) => state.isFutureMutationsPaused);
|
|
726
806
|
const sendRequest = async (res, rej, postData) => {
|
|
727
807
|
// get request headers
|
|
728
808
|
const globalHeaders = getHeaders();
|
|
@@ -776,11 +856,24 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
|
|
|
776
856
|
mutationKey: [path, { type: 'mutation' }],
|
|
777
857
|
});
|
|
778
858
|
const post = async (data, options) => {
|
|
779
|
-
|
|
780
|
-
|
|
859
|
+
if (!isFutureMutationsPaused) {
|
|
860
|
+
const { requestConfig, ...otherOptions } = options ?? {};
|
|
861
|
+
return mutation.mutateAsync({ data, requestConfig }, otherOptions);
|
|
862
|
+
}
|
|
863
|
+
else {
|
|
864
|
+
setRequestPayload({ data, options });
|
|
865
|
+
return undefined;
|
|
866
|
+
}
|
|
781
867
|
};
|
|
782
|
-
|
|
868
|
+
useEffect(() => {
|
|
869
|
+
if (!isFutureMutationsPaused && requestPayload) {
|
|
870
|
+
post(requestPayload.data, requestPayload.options);
|
|
871
|
+
setRequestPayload(undefined);
|
|
872
|
+
}
|
|
873
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
874
|
+
}, [isFutureMutationsPaused]);
|
|
875
|
+
return { post, uploadProgressPercent, ...mutation, isLoading: mutation.isLoading || isFutureMutationsPaused };
|
|
783
876
|
};
|
|
784
877
|
|
|
785
|
-
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 };
|
|
786
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -2,10 +2,10 @@ import type { UseQueryOptions } from '@tanstack/react-query';
|
|
|
2
2
|
import type { IRequestError, IRequestSuccess } from '../request';
|
|
3
3
|
import type { DefaultRequestOptions } from './queries.interface';
|
|
4
4
|
export declare const useDeleteRequest: <TResponse>(deleteOptions?: DefaultRequestOptions) => {
|
|
5
|
+
isLoading: boolean;
|
|
5
6
|
data: IRequestSuccess<TResponse>;
|
|
6
7
|
error: any;
|
|
7
8
|
isError: true;
|
|
8
|
-
isLoading: false;
|
|
9
9
|
isLoadingError: false;
|
|
10
10
|
isRefetchError: true;
|
|
11
11
|
isSuccess: false;
|
|
@@ -31,10 +31,10 @@ export declare const useDeleteRequest: <TResponse>(deleteOptions?: DefaultReques
|
|
|
31
31
|
cached?: boolean | undefined;
|
|
32
32
|
}) | undefined) => Promise<IRequestSuccess<TResponse> | undefined>;
|
|
33
33
|
} | {
|
|
34
|
+
isLoading: boolean;
|
|
34
35
|
data: IRequestSuccess<TResponse>;
|
|
35
36
|
error: null;
|
|
36
37
|
isError: false;
|
|
37
|
-
isLoading: false;
|
|
38
38
|
isLoadingError: false;
|
|
39
39
|
isRefetchError: false;
|
|
40
40
|
isSuccess: true;
|
|
@@ -60,10 +60,10 @@ export declare const useDeleteRequest: <TResponse>(deleteOptions?: DefaultReques
|
|
|
60
60
|
cached?: boolean | undefined;
|
|
61
61
|
}) | undefined) => Promise<IRequestSuccess<TResponse> | undefined>;
|
|
62
62
|
} | {
|
|
63
|
+
isLoading: boolean;
|
|
63
64
|
data: undefined;
|
|
64
65
|
error: any;
|
|
65
66
|
isError: true;
|
|
66
|
-
isLoading: false;
|
|
67
67
|
isLoadingError: true;
|
|
68
68
|
isRefetchError: false;
|
|
69
69
|
isSuccess: false;
|
|
@@ -89,10 +89,10 @@ export declare const useDeleteRequest: <TResponse>(deleteOptions?: DefaultReques
|
|
|
89
89
|
cached?: boolean | undefined;
|
|
90
90
|
}) | undefined) => Promise<IRequestSuccess<TResponse> | undefined>;
|
|
91
91
|
} | {
|
|
92
|
+
isLoading: boolean;
|
|
92
93
|
data: undefined;
|
|
93
94
|
error: null;
|
|
94
95
|
isError: false;
|
|
95
|
-
isLoading: true;
|
|
96
96
|
isLoadingError: false;
|
|
97
97
|
isRefetchError: false;
|
|
98
98
|
isSuccess: false;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useQuery } from '@tanstack/react-query';
|
|
2
|
-
import { useState } from 'react';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
3
|
import 'url-search-params-polyfill';
|
|
4
4
|
import { useEnvironmentVariables } from '../config/useEnvironmentVariables.js';
|
|
5
5
|
import { useQueryConfig } from '../config/useQueryConfig.js';
|
|
@@ -7,12 +7,15 @@ import { useQueryHeaders } from '../config/useQueryHeaders.js';
|
|
|
7
7
|
import 'axios';
|
|
8
8
|
import { makeRequest } from '../request/make-request.js';
|
|
9
9
|
import '../request/request.enum.js';
|
|
10
|
+
import { usePauseFutureRequests } from '../stores/usePauseFutureRequests.js';
|
|
10
11
|
|
|
11
12
|
const useDeleteRequest = (deleteOptions) => {
|
|
12
13
|
const { baseUrl, headers } = deleteOptions ?? {};
|
|
13
14
|
const [requestPath, setRequestPath] = useState('');
|
|
14
15
|
const [options, setOptions] = useState();
|
|
15
16
|
const { options: queryConfigOptions } = useQueryConfig();
|
|
17
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
18
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
16
19
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
17
20
|
const { getHeaders } = useQueryHeaders();
|
|
18
21
|
const sendRequest = async (res, rej, queryKey) => {
|
|
@@ -51,14 +54,27 @@ const useDeleteRequest = (deleteOptions) => {
|
|
|
51
54
|
return setOptions(fetchOptions);
|
|
52
55
|
};
|
|
53
56
|
const destroy = async (link, internalDeleteOptions) => {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
if (!isFutureQueriesPaused) {
|
|
58
|
+
// set enabled to be true for every delete
|
|
59
|
+
internalDeleteOptions = internalDeleteOptions ?? {};
|
|
60
|
+
internalDeleteOptions.enabled = true;
|
|
61
|
+
await setOptionsAsync(internalDeleteOptions);
|
|
62
|
+
await updatedPathAsync(link);
|
|
63
|
+
return query.data;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
setRequestPayload({ link, internalDeleteOptions });
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
60
69
|
};
|
|
61
|
-
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (!isFutureQueriesPaused && requestPayload) {
|
|
72
|
+
destroy(requestPayload.link, requestPayload.internalDeleteOptions);
|
|
73
|
+
setRequestPayload(undefined);
|
|
74
|
+
}
|
|
75
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
76
|
+
}, [isFutureQueriesPaused]);
|
|
77
|
+
return { destroy, ...query, isLoading: query.isLoading || isFutureQueriesPaused };
|
|
62
78
|
};
|
|
63
79
|
|
|
64
80
|
export { useDeleteRequest };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDeleteRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDeleteRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -17,10 +17,10 @@ export declare const useGetInfiniteRequest: <TResponse extends Record<string, an
|
|
|
17
17
|
}> | undefined;
|
|
18
18
|
keyTracker?: string | undefined;
|
|
19
19
|
} & DefaultRequestOptions) => {
|
|
20
|
+
isLoading: boolean;
|
|
20
21
|
data: undefined;
|
|
21
22
|
error: any;
|
|
22
23
|
isError: true;
|
|
23
|
-
isLoading: false;
|
|
24
24
|
isLoadingError: true;
|
|
25
25
|
isRefetchError: false;
|
|
26
26
|
isSuccess: false;
|
|
@@ -58,10 +58,10 @@ export declare const useGetInfiniteRequest: <TResponse extends Record<string, an
|
|
|
58
58
|
pagination: Pagination;
|
|
59
59
|
}>> | undefined>;
|
|
60
60
|
} | {
|
|
61
|
+
isLoading: boolean;
|
|
61
62
|
data: undefined;
|
|
62
63
|
error: null;
|
|
63
64
|
isError: false;
|
|
64
|
-
isLoading: true;
|
|
65
65
|
isLoadingError: false;
|
|
66
66
|
isRefetchError: false;
|
|
67
67
|
isSuccess: false;
|
|
@@ -99,12 +99,12 @@ export declare const useGetInfiniteRequest: <TResponse extends Record<string, an
|
|
|
99
99
|
pagination: Pagination;
|
|
100
100
|
}>> | undefined>;
|
|
101
101
|
} | {
|
|
102
|
+
isLoading: boolean;
|
|
102
103
|
data: InfiniteData<IRequestSuccess<TResponse & {
|
|
103
104
|
pagination: Pagination;
|
|
104
105
|
}>>;
|
|
105
106
|
error: any;
|
|
106
107
|
isError: true;
|
|
107
|
-
isLoading: false;
|
|
108
108
|
isLoadingError: false;
|
|
109
109
|
isRefetchError: true;
|
|
110
110
|
isSuccess: false;
|
|
@@ -142,12 +142,12 @@ export declare const useGetInfiniteRequest: <TResponse extends Record<string, an
|
|
|
142
142
|
pagination: Pagination;
|
|
143
143
|
}>> | undefined>;
|
|
144
144
|
} | {
|
|
145
|
+
isLoading: boolean;
|
|
145
146
|
data: InfiniteData<IRequestSuccess<TResponse & {
|
|
146
147
|
pagination: Pagination;
|
|
147
148
|
}>>;
|
|
148
149
|
error: null;
|
|
149
150
|
isError: false;
|
|
150
|
-
isLoading: false;
|
|
151
151
|
isLoadingError: false;
|
|
152
152
|
isRefetchError: false;
|
|
153
153
|
isSuccess: true;
|
|
@@ -7,6 +7,7 @@ import { useQueryHeaders } from '../config/useQueryHeaders.js';
|
|
|
7
7
|
import 'axios';
|
|
8
8
|
import { makeRequest } from '../request/make-request.js';
|
|
9
9
|
import '../request/request.enum.js';
|
|
10
|
+
import { usePauseFutureRequests } from '../stores/usePauseFutureRequests.js';
|
|
10
11
|
|
|
11
12
|
const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl, headers, }) => {
|
|
12
13
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
@@ -14,6 +15,8 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
14
15
|
const [requestPath, setRequestPath] = useState(path);
|
|
15
16
|
const [options, setOptions] = useState(queryOptions);
|
|
16
17
|
const { options: queryConfigOptions } = useQueryConfig();
|
|
18
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
19
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
17
20
|
let queryClient = useQueryClient();
|
|
18
21
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
19
22
|
queryClient = useMemo(() => queryClient, []);
|
|
@@ -60,7 +63,7 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
60
63
|
return pathname + '?' + queryParams.toString();
|
|
61
64
|
};
|
|
62
65
|
const query = useInfiniteQuery([requestPath, {}], ({ pageParam = requestPath, queryKey }) => new Promise((res, rej) => sendRequest(res, rej, queryKey, pageParam)), {
|
|
63
|
-
enabled: load,
|
|
66
|
+
enabled: load && !isFutureQueriesPaused,
|
|
64
67
|
getNextPageParam: (lastPage) => constructPaginationLink('next_page', lastPage),
|
|
65
68
|
getPreviousPageParam: (lastPage) => constructPaginationLink('previous_page', lastPage),
|
|
66
69
|
...options,
|
|
@@ -71,10 +74,23 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
71
74
|
});
|
|
72
75
|
};
|
|
73
76
|
const get = async (link, fetchOptions) => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
if (!isFutureQueriesPaused) {
|
|
78
|
+
await setOptionsAsync(fetchOptions);
|
|
79
|
+
await updatedPathAsync(link);
|
|
80
|
+
return query.data;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
setRequestPayload({ link, fetchOptions });
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
77
86
|
};
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
if (!isFutureQueriesPaused && requestPayload) {
|
|
89
|
+
get(requestPayload.link, requestPayload.fetchOptions);
|
|
90
|
+
setRequestPayload(undefined);
|
|
91
|
+
}
|
|
92
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
93
|
+
}, [isFutureQueriesPaused]);
|
|
78
94
|
const updatedPathAsync = async (link) => {
|
|
79
95
|
startTransition(() => {
|
|
80
96
|
setRequestPath(link);
|
|
@@ -93,6 +109,7 @@ const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, b
|
|
|
93
109
|
return {
|
|
94
110
|
get,
|
|
95
111
|
...query,
|
|
112
|
+
isLoading: query.isLoading || isFutureQueriesPaused,
|
|
96
113
|
};
|
|
97
114
|
};
|
|
98
115
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetInfiniteRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useGetInfiniteRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -8,6 +8,7 @@ export declare const useGetRequest: <TResponse extends Record<string, any>>({ pa
|
|
|
8
8
|
queryOptions?: TanstackQueryOption<TResponse> | undefined;
|
|
9
9
|
keyTracker?: string | undefined;
|
|
10
10
|
} & DefaultRequestOptions) => {
|
|
11
|
+
isLoading: boolean;
|
|
11
12
|
setRequestPath: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
12
13
|
nextPage: () => void;
|
|
13
14
|
prevPage: () => void;
|
|
@@ -18,7 +19,6 @@ export declare const useGetRequest: <TResponse extends Record<string, any>>({ pa
|
|
|
18
19
|
data: IRequestSuccess<TResponse>;
|
|
19
20
|
error: any;
|
|
20
21
|
isError: true;
|
|
21
|
-
isLoading: false;
|
|
22
22
|
isLoadingError: false;
|
|
23
23
|
isRefetchError: true;
|
|
24
24
|
isSuccess: false;
|
|
@@ -41,6 +41,7 @@ export declare const useGetRequest: <TResponse extends Record<string, any>>({ pa
|
|
|
41
41
|
remove: () => void;
|
|
42
42
|
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
43
43
|
} | {
|
|
44
|
+
isLoading: boolean;
|
|
44
45
|
setRequestPath: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
45
46
|
nextPage: () => void;
|
|
46
47
|
prevPage: () => void;
|
|
@@ -51,7 +52,6 @@ export declare const useGetRequest: <TResponse extends Record<string, any>>({ pa
|
|
|
51
52
|
data: IRequestSuccess<TResponse>;
|
|
52
53
|
error: null;
|
|
53
54
|
isError: false;
|
|
54
|
-
isLoading: false;
|
|
55
55
|
isLoadingError: false;
|
|
56
56
|
isRefetchError: false;
|
|
57
57
|
isSuccess: true;
|
|
@@ -74,6 +74,7 @@ export declare const useGetRequest: <TResponse extends Record<string, any>>({ pa
|
|
|
74
74
|
remove: () => void;
|
|
75
75
|
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
76
76
|
} | {
|
|
77
|
+
isLoading: boolean;
|
|
77
78
|
setRequestPath: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
78
79
|
nextPage: () => void;
|
|
79
80
|
prevPage: () => void;
|
|
@@ -84,7 +85,6 @@ export declare const useGetRequest: <TResponse extends Record<string, any>>({ pa
|
|
|
84
85
|
data: undefined;
|
|
85
86
|
error: any;
|
|
86
87
|
isError: true;
|
|
87
|
-
isLoading: false;
|
|
88
88
|
isLoadingError: true;
|
|
89
89
|
isRefetchError: false;
|
|
90
90
|
isSuccess: false;
|
|
@@ -107,6 +107,7 @@ export declare const useGetRequest: <TResponse extends Record<string, any>>({ pa
|
|
|
107
107
|
remove: () => void;
|
|
108
108
|
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
109
109
|
} | {
|
|
110
|
+
isLoading: boolean;
|
|
110
111
|
setRequestPath: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
111
112
|
nextPage: () => void;
|
|
112
113
|
prevPage: () => void;
|
|
@@ -117,7 +118,6 @@ export declare const useGetRequest: <TResponse extends Record<string, any>>({ pa
|
|
|
117
118
|
data: undefined;
|
|
118
119
|
error: null;
|
|
119
120
|
isError: false;
|
|
120
|
-
isLoading: true;
|
|
121
121
|
isLoadingError: false;
|
|
122
122
|
isRefetchError: false;
|
|
123
123
|
isSuccess: false;
|
|
@@ -7,6 +7,7 @@ import { useQueryHeaders } from '../config/useQueryHeaders.js';
|
|
|
7
7
|
import 'axios';
|
|
8
8
|
import { makeRequest } from '../request/make-request.js';
|
|
9
9
|
import '../request/request.enum.js';
|
|
10
|
+
import { usePauseFutureRequests } from '../stores/usePauseFutureRequests.js';
|
|
10
11
|
|
|
11
12
|
const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl, headers, }) => {
|
|
12
13
|
const [requestPath, setRequestPath] = useState(path);
|
|
@@ -15,6 +16,8 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
15
16
|
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
16
17
|
const { getHeaders } = useQueryHeaders();
|
|
17
18
|
const { options: queryConfigOptions } = useQueryConfig();
|
|
19
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
20
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
18
21
|
let queryClient = useQueryClient();
|
|
19
22
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
20
23
|
queryClient = useMemo(() => queryClient, []);
|
|
@@ -52,7 +55,7 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
52
55
|
}
|
|
53
56
|
};
|
|
54
57
|
const query = useQuery([requestPath, {}], ({ queryKey }) => new Promise((res, rej) => sendRequest(res, rej, queryKey)), {
|
|
55
|
-
enabled: load,
|
|
58
|
+
enabled: load && !isFutureQueriesPaused,
|
|
56
59
|
...options,
|
|
57
60
|
});
|
|
58
61
|
useEffect(() => {
|
|
@@ -112,12 +115,26 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
|
|
|
112
115
|
});
|
|
113
116
|
};
|
|
114
117
|
const get = async (link, fetchOptions) => {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
+
if (!isFutureQueriesPaused) {
|
|
119
|
+
await setOptionsAsync(fetchOptions);
|
|
120
|
+
await updatedPathAsync(link);
|
|
121
|
+
return query.data;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
setRequestPayload({ link, fetchOptions });
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
118
127
|
};
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
if (!isFutureQueriesPaused && requestPayload) {
|
|
130
|
+
get(requestPayload.link, requestPayload.fetchOptions);
|
|
131
|
+
setRequestPayload(undefined);
|
|
132
|
+
}
|
|
133
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
134
|
+
}, [isFutureQueriesPaused]);
|
|
119
135
|
return {
|
|
120
136
|
...query,
|
|
137
|
+
isLoading: query.isLoading || isFutureQueriesPaused,
|
|
121
138
|
setRequestPath,
|
|
122
139
|
nextPage,
|
|
123
140
|
prevPage,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useGetRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|