@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 CHANGED
@@ -1,6 +1,8 @@
1
1
  export * from './config';
2
2
  export * from './helpers';
3
+ export * from './hooks';
3
4
  export * from './model';
4
5
  export * from './queries';
5
6
  export * from './request';
7
+ export * from './stores';
6
8
  export * from './types';
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
- // set enabled to be true for every delete
438
- internalDeleteOptions = internalDeleteOptions ?? {};
439
- internalDeleteOptions.enabled = true;
440
- await setOptionsAsync(internalDeleteOptions);
441
- await updatedPathAsync(link);
442
- return query.data;
443
- };
444
- return { destroy, ...query };
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
- await setOptionsAsync(fetchOptions);
511
- await updatedPathAsync(link);
512
- return query.data;
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
- await setOptionsAsync(fetchOptions);
640
- await updatedPathAsync(link);
641
- return query.data;
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
- return mutation.mutateAsync(data, options);
780
+ if (!isFutureMutationsPaused) {
781
+ return mutation.mutateAsync(data, options);
782
+ }
783
+ else {
784
+ setRequestPayload({ data, options });
785
+ return undefined;
786
+ }
716
787
  };
717
- return { patch, uploadProgressPercent, ...mutation };
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
- const { requestConfig, ...otherOptions } = options ?? {};
780
- return mutation.mutateAsync({ data, requestConfig }, otherOptions);
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
- return { post, uploadProgressPercent, ...mutation };
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
@@ -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
- // set enabled to be true for every delete
55
- internalDeleteOptions = internalDeleteOptions ?? {};
56
- internalDeleteOptions.enabled = true;
57
- await setOptionsAsync(internalDeleteOptions);
58
- await updatedPathAsync(link);
59
- return query.data;
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
- return { destroy, ...query };
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
- await setOptionsAsync(fetchOptions);
75
- await updatedPathAsync(link);
76
- return query.data;
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
- await setOptionsAsync(fetchOptions);
116
- await updatedPathAsync(link);
117
- return query.data;
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}