@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.
Files changed (49) hide show
  1. package/dist/config/bootstrapQueryRequest.js +1 -1
  2. package/dist/config/useQueryConfig.js +1 -27
  3. package/dist/config/useQueryConfig.js.map +1 -1
  4. package/dist/config/useQueryHeaders.js +15 -4
  5. package/dist/config/useQueryHeaders.js.map +1 -1
  6. package/dist/config/useReactNativeEnv.js +3 -3
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.js +2 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.mjs +123 -120
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/model/useKeyTrackerModel.d.ts +1 -1
  13. package/dist/model/useKeyTrackerModel.js +1 -5
  14. package/dist/model/useKeyTrackerModel.js.map +1 -1
  15. package/dist/queries/useDeleteRequest.d.ts +4 -4
  16. package/dist/queries/useDeleteRequest.js +11 -10
  17. package/dist/queries/useDeleteRequest.js.map +1 -1
  18. package/dist/queries/useGetInfiniteRequest.d.ts +4 -4
  19. package/dist/queries/useGetInfiniteRequest.js +23 -17
  20. package/dist/queries/useGetInfiniteRequest.js.map +1 -1
  21. package/dist/queries/useGetRequest.d.ts +4 -4
  22. package/dist/queries/useGetRequest.js +20 -14
  23. package/dist/queries/useGetRequest.js.map +1 -1
  24. package/dist/queries/usePatchRequest.d.ts +4 -4
  25. package/dist/queries/usePatchRequest.js +13 -16
  26. package/dist/queries/usePatchRequest.js.map +1 -1
  27. package/dist/queries/usePostRequest.d.ts +4 -4
  28. package/dist/queries/usePostRequest.js +13 -11
  29. package/dist/queries/usePostRequest.js.map +1 -1
  30. package/dist/stores/index.d.ts +1 -0
  31. package/dist/stores/usePauseFutureRequests.d.ts +7 -0
  32. package/dist/stores/usePauseFutureRequests.js +19 -0
  33. package/dist/stores/usePauseFutureRequests.js.map +1 -0
  34. package/dist/types/index.d.ts +4 -7
  35. package/package.json +3 -2
  36. package/src/config/bootstrapQueryRequest.ts +1 -1
  37. package/src/config/useQueryConfig.ts +4 -41
  38. package/src/config/useQueryHeaders.ts +18 -6
  39. package/src/config/useReactNativeEnv.ts +3 -3
  40. package/src/index.ts +2 -0
  41. package/src/model/useKeyTrackerModel.ts +1 -5
  42. package/src/queries/useDeleteRequest.ts +14 -11
  43. package/src/queries/useGetInfiniteRequest.ts +27 -19
  44. package/src/queries/useGetRequest.ts +24 -16
  45. package/src/queries/usePatchRequest.ts +17 -17
  46. package/src/queries/usePostRequest.ts +16 -12
  47. package/src/stores/index.ts +1 -0
  48. package/src/stores/usePauseFutureRequests.ts +25 -0
  49. package/src/types/index.ts +4 -7
@@ -7,7 +7,7 @@ const bootstrapQueryRequest = (queryClient, options) => {
7
7
  headers: {
8
8
  Authorization: ``,
9
9
  },
10
- ...options,
10
+ options,
11
11
  };
12
12
  queryClient.setDefaultOptions({
13
13
  queries: {
@@ -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
- const options = { ...queryMeta, ...mutationMeta };
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 { setConfig, ...config } = useQueryConfig();
5
+ const queryClient = useQueryClient();
6
+ const { headers, options } = useQueryConfig();
5
7
  const getHeaders = () => {
6
- return config.options?.headers;
8
+ return headers;
7
9
  };
8
- const setQueryHeaders = (headers) => {
9
- setConfig({ headers });
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.environments?.appBaseUrl;
6
- const appTimeout = config.options.environments?.appTimeout;
7
- const isApp = config.options.context === 'app';
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
@@ -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, 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
- ...options,
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
- const options = { ...queryMeta, ...mutationMeta };
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.environments?.appBaseUrl;
61
- const appTimeout = config.options.environments?.appTimeout;
62
- const isApp = config.options.context === 'app';
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 { setConfig, ...config } = useQueryConfig();
52
+ const queryClient = useQueryClient();
53
+ const { headers, options } = useQueryConfig();
78
54
  const getHeaders = () => {
79
- return config.options?.headers;
55
+ return headers;
80
56
  };
81
- const setQueryHeaders = (headers) => {
82
- setConfig({ headers });
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 meta = {
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.queryMiddleware) {
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 (!queryConfigOptions.pauseFutureQueries) {
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
- // save delete config
468
- setDestroyConfig({ link, internalDeleteOptions });
474
+ setRequestPayload({ link, internalDeleteOptions });
469
475
  return undefined;
470
476
  }
471
477
  };
472
478
  useEffect(() => {
473
- if (!queryConfigOptions.pauseFutureQueries && destroyConfig) {
474
- destroy(destroyConfig.link, destroyConfig.internalDeleteOptions);
475
- setDestroyConfig(undefined);
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
- }, [queryConfigOptions.pauseFutureQueries]);
479
- return { destroy, ...query, isLoading: query.isLoading || queryConfigOptions.pauseFutureQueries };
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, setConfig } = useQueryConfig();
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.queryMiddleware) {
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 || !queryConfigOptions.pauseFutureQueries,
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 (!queryConfigOptions.pauseFutureQueries) {
553
+ if (!isFutureQueriesPaused) {
547
554
  await setOptionsAsync(fetchOptions);
548
555
  await updatedPathAsync(link);
549
556
  return query.data;
550
557
  }
551
558
  else {
552
- setQueryConfig({ link, fetchOptions });
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
- setConfig({ [keyTracker]: [requestPath, {}] });
564
- }
565
- // eslint-disable-next-line react-hooks/exhaustive-deps
566
- }, [keyTracker, requestPath]);
567
- useEffect(() => {
568
- if (!queryConfigOptions.pauseFutureQueries && queryConfig) {
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
- // eslint-disable-next-line react-hooks/exhaustive-deps
573
- }, [queryConfigOptions.pauseFutureQueries]);
584
+ }, [keyTracker, requestPath, queryClient, queryOptions?.staleTime]);
574
585
  return {
575
586
  get,
576
587
  ...query,
577
- isLoading: query.isLoading || queryConfigOptions.pauseFutureQueries,
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, setConfig } = useQueryConfig();
588
- const [queryConfig, setQueryConfig] = useState();
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.queryMiddleware) {
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
- setConfig({ [keyTracker]: [requestPath, {}] });
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
- // eslint-disable-next-line react-hooks/exhaustive-deps
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 (!queryConfigOptions.pauseFutureQueries) {
698
+ if (!isFutureQueriesPaused) {
683
699
  await setOptionsAsync(fetchOptions);
684
700
  await updatedPathAsync(link);
685
701
  return query.data;
686
702
  }
687
703
  else {
688
- setQueryConfig({ link, fetchOptions });
704
+ setRequestPayload({ link, fetchOptions });
689
705
  return undefined;
690
706
  }
691
707
  };
692
708
  useEffect(() => {
693
- if (!queryConfigOptions.pauseFutureQueries && queryConfig) {
694
- get(queryConfig.link, queryConfig.fetchOptions);
695
- setQueryConfig(undefined);
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
- }, [queryConfigOptions.pauseFutureQueries]);
714
+ }, [isFutureQueriesPaused]);
699
715
  return {
700
716
  ...query,
701
- isLoading: query.isLoading || queryConfigOptions.pauseFutureQueries,
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 [mutationConfig, setMutationConfig] = useState();
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.mutationMiddleware) {
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.context !== 'app') {
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.context !== 'app') {
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 (!config.options.pauseFutureMutations) {
780
+ if (!isFutureMutationsPaused) {
774
781
  return mutation.mutateAsync(data, options);
775
782
  }
776
783
  else {
777
- setMutationConfig({ data, options });
784
+ setRequestPayload({ data, options });
778
785
  return undefined;
779
786
  }
780
787
  };
781
788
  useEffect(() => {
782
- if (!config.options.pauseFutureMutations && mutationConfig) {
783
- patch(mutationConfig.data, mutationConfig.options);
784
- setMutationConfig(undefined);
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
- }, [config.options.pauseFutureMutations]);
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.mutationMiddleware) {
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.context !== 'app') {
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.context !== 'app') {
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 (!config.options.pauseFutureMutations) {
859
+ if (!isFutureMutationsPaused) {
857
860
  const { requestConfig, ...otherOptions } = options ?? {};
858
861
  return mutation.mutateAsync({ data, requestConfig }, otherOptions);
859
862
  }
860
863
  else {
861
- setMutationConfig({ data, options });
864
+ setRequestPayload({ data, options });
862
865
  return undefined;
863
866
  }
864
867
  };
865
868
  useEffect(() => {
866
- if (!config.options.pauseFutureMutations && mutationConfig) {
867
- post(mutationConfig.data, mutationConfig.options);
868
- setMutationConfig(undefined);
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
- }, [config.options.pauseFutureMutations]);
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
1
  export declare const useKeyTrackerModel: <T>(keyTracker: string) => {
2
2
  refetchQuery: (innerKeyTracker?: string) => Promise<void>;
3
- getQueryKey: (innerKeyTracker?: string) => any[];
3
+ getQueryKey: (innerKeyTracker?: string) => any[] | undefined;
4
4
  };