@ventlio/tanstack-query 0.2.76 → 0.2.77

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.
@@ -0,0 +1 @@
1
+ export * from './useUploadProgress';
@@ -0,0 +1,5 @@
1
+ import type { AxiosProgressEvent } from 'axios';
2
+ export declare const useUploadProgress: () => {
3
+ onUploadProgress: (progressEvent: AxiosProgressEvent) => void;
4
+ uploadProgressPercent: number;
5
+ };
@@ -0,0 +1,14 @@
1
+ import { useState } from 'react';
2
+
3
+ const useUploadProgress = () => {
4
+ const [uploadProgressPercent, setUploadProgressPercent] = useState(0);
5
+ const onUploadProgress = (progressEvent) => {
6
+ const { loaded, total } = progressEvent;
7
+ const percentage = Math.round((loaded / total) * 100);
8
+ setUploadProgressPercent(percentage);
9
+ };
10
+ return { onUploadProgress, uploadProgressPercent };
11
+ };
12
+
13
+ export { useUploadProgress };
14
+ //# sourceMappingURL=useUploadProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadProgress.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
package/dist/index.mjs CHANGED
@@ -313,7 +313,7 @@ const successTransformer = (data) => {
313
313
  };
314
314
  };
315
315
 
316
- async function makeRequest({ body, method = HttpMethod.GET, path, isFormData, headers = {}, baseURL, timeout, appFileConfig, }) {
316
+ async function makeRequest({ body, method = HttpMethod.GET, path, isFormData, headers = {}, baseURL, timeout, appFileConfig, onUploadProgress, }) {
317
317
  // check if file is included in mobile app environment and extract all file input to avoid
318
318
  // it being formatted to object using axios formData builder
319
319
  const isApp = appFileConfig?.isApp;
@@ -351,6 +351,7 @@ async function makeRequest({ body, method = HttpMethod.GET, path, isFormData, he
351
351
  url: path,
352
352
  method,
353
353
  data: body,
354
+ onUploadProgress,
354
355
  });
355
356
  // get response json
356
357
  const jsonResp = await resp.data;
@@ -599,8 +600,19 @@ const useGetRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl,
599
600
  };
600
601
  };
601
602
 
603
+ const useUploadProgress = () => {
604
+ const [uploadProgressPercent, setUploadProgressPercent] = useState(0);
605
+ const onUploadProgress = (progressEvent) => {
606
+ const { loaded, total } = progressEvent;
607
+ const percentage = Math.round((loaded / total) * 100);
608
+ setUploadProgressPercent(percentage);
609
+ };
610
+ return { onUploadProgress, uploadProgressPercent };
611
+ };
612
+
602
613
  const usePatchRequest = ({ path, baseUrl, headers }) => {
603
614
  const { API_URL, TIMEOUT } = useEnvironmentVariables();
615
+ const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
604
616
  const { getHeaders } = useQueryHeaders();
605
617
  const queryClient = useQueryClient();
606
618
  const config = queryClient.getQueryData(['config']);
@@ -614,6 +626,7 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
614
626
  headers: { ...globalHeaders, ...headers },
615
627
  baseURL: baseUrl ?? API_URL,
616
628
  timeout: TIMEOUT,
629
+ onUploadProgress,
617
630
  });
618
631
  if (patchResponse.status) {
619
632
  // scroll to top after success
@@ -637,7 +650,7 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
637
650
  const patch = async (data, options) => {
638
651
  return mutation.mutateAsync(data, options);
639
652
  };
640
- return { patch, ...mutation };
653
+ return { patch, uploadProgressPercent, ...mutation };
641
654
  };
642
655
 
643
656
  const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelectors, }) => {
@@ -645,6 +658,7 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
645
658
  const queryClient = useQueryClient();
646
659
  const { getHeaders } = useQueryHeaders();
647
660
  const { isApp } = useReactNativeEnv();
661
+ const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
648
662
  const sendRequest = async (res, rej, postData) => {
649
663
  // get request headers
650
664
  const globalHeaders = getHeaders();
@@ -661,6 +675,7 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
661
675
  isApp,
662
676
  fileSelectors,
663
677
  },
678
+ onUploadProgress,
664
679
  });
665
680
  if (postResponse.status) {
666
681
  // scroll to top after success
@@ -682,7 +697,7 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
682
697
  const post = async (data, options) => {
683
698
  return mutation.mutateAsync(data, options);
684
699
  };
685
- return { post, ...mutation };
700
+ return { post, uploadProgressPercent, ...mutation };
686
701
  };
687
702
 
688
703
  export { ContentType, HttpMethod, axiosInstance, bootstrapQueryRequest, buildFormData, errorTransformer, getDateInFuture, makeRequest, scrollToTop, successTransformer, useDeleteRequest, useEnvironmentVariables, useGetInfiniteRequest, useGetRequest, useKeyTrackerModel, usePatchRequest, usePostRequest, useQueryConfig, useQueryHeaders, useQueryModel, useReactNativeEnv, useRefetchQuery };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -20,6 +20,7 @@ export declare const usePatchRequest: <TResponse>({ path, baseUrl, headers }: {
20
20
  variables: void | undefined;
21
21
  mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<IRequestSuccess<TResponse>, IRequestError, void, unknown>;
22
22
  patch: (data: any, options?: MutateOptions<IRequestSuccess<TResponse>, IRequestError, void, unknown> | undefined) => Promise<IRequestSuccess<TResponse>>;
23
+ uploadProgressPercent: number;
23
24
  } | {
24
25
  data: undefined;
25
26
  error: null;
@@ -37,6 +38,7 @@ export declare const usePatchRequest: <TResponse>({ path, baseUrl, headers }: {
37
38
  variables: void | undefined;
38
39
  mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<IRequestSuccess<TResponse>, IRequestError, void, unknown>;
39
40
  patch: (data: any, options?: MutateOptions<IRequestSuccess<TResponse>, IRequestError, void, unknown> | undefined) => Promise<IRequestSuccess<TResponse>>;
41
+ uploadProgressPercent: number;
40
42
  } | {
41
43
  data: undefined;
42
44
  error: IRequestError;
@@ -54,6 +56,7 @@ export declare const usePatchRequest: <TResponse>({ path, baseUrl, headers }: {
54
56
  variables: void | undefined;
55
57
  mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<IRequestSuccess<TResponse>, IRequestError, void, unknown>;
56
58
  patch: (data: any, options?: MutateOptions<IRequestSuccess<TResponse>, IRequestError, void, unknown> | undefined) => Promise<IRequestSuccess<TResponse>>;
59
+ uploadProgressPercent: number;
57
60
  } | {
58
61
  data: IRequestSuccess<TResponse>;
59
62
  error: null;
@@ -71,4 +74,5 @@ export declare const usePatchRequest: <TResponse>({ path, baseUrl, headers }: {
71
74
  variables: void | undefined;
72
75
  mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<IRequestSuccess<TResponse>, IRequestError, void, unknown>;
73
76
  patch: (data: any, options?: MutateOptions<IRequestSuccess<TResponse>, IRequestError, void, unknown> | undefined) => Promise<IRequestSuccess<TResponse>>;
77
+ uploadProgressPercent: number;
74
78
  };
@@ -3,12 +3,14 @@ import 'url-search-params-polyfill';
3
3
  import { useEnvironmentVariables } from '../config/useEnvironmentVariables.js';
4
4
  import { useQueryHeaders } from '../config/useQueryHeaders.js';
5
5
  import { scrollToTop } from '../helpers/scrollToTop.js';
6
+ import { useUploadProgress } from '../hooks/useUploadProgress.js';
6
7
  import 'axios';
7
8
  import { makeRequest } from '../request/make-request.js';
8
9
  import { HttpMethod } from '../request/request.enum.js';
9
10
 
10
11
  const usePatchRequest = ({ path, baseUrl, headers }) => {
11
12
  const { API_URL, TIMEOUT } = useEnvironmentVariables();
13
+ const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
12
14
  const { getHeaders } = useQueryHeaders();
13
15
  const queryClient = useQueryClient();
14
16
  const config = queryClient.getQueryData(['config']);
@@ -22,6 +24,7 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
22
24
  headers: { ...globalHeaders, ...headers },
23
25
  baseURL: baseUrl ?? API_URL,
24
26
  timeout: TIMEOUT,
27
+ onUploadProgress,
25
28
  });
26
29
  if (patchResponse.status) {
27
30
  // scroll to top after success
@@ -45,7 +48,7 @@ const usePatchRequest = ({ path, baseUrl, headers }) => {
45
48
  const patch = async (data, options) => {
46
49
  return mutation.mutateAsync(data, options);
47
50
  };
48
- return { patch, ...mutation };
51
+ return { patch, uploadProgressPercent, ...mutation };
49
52
  };
50
53
 
51
54
  export { usePatchRequest };
@@ -1 +1 @@
1
- {"version":3,"file":"usePatchRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"usePatchRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -22,6 +22,7 @@ export declare const usePostRequest: <TResponse>({ path, isFormData, baseUrl, he
22
22
  variables: void | undefined;
23
23
  mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<IRequestSuccess<TResponse>, IRequestError, void, unknown>;
24
24
  post: (data: any, options?: MutateOptions<IRequestSuccess<TResponse>, IRequestError, void, unknown> | undefined) => Promise<IRequestSuccess<TResponse>>;
25
+ uploadProgressPercent: number;
25
26
  } | {
26
27
  data: undefined;
27
28
  error: null;
@@ -39,6 +40,7 @@ export declare const usePostRequest: <TResponse>({ path, isFormData, baseUrl, he
39
40
  variables: void | undefined;
40
41
  mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<IRequestSuccess<TResponse>, IRequestError, void, unknown>;
41
42
  post: (data: any, options?: MutateOptions<IRequestSuccess<TResponse>, IRequestError, void, unknown> | undefined) => Promise<IRequestSuccess<TResponse>>;
43
+ uploadProgressPercent: number;
42
44
  } | {
43
45
  data: undefined;
44
46
  error: IRequestError;
@@ -56,6 +58,7 @@ export declare const usePostRequest: <TResponse>({ path, isFormData, baseUrl, he
56
58
  variables: void | undefined;
57
59
  mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<IRequestSuccess<TResponse>, IRequestError, void, unknown>;
58
60
  post: (data: any, options?: MutateOptions<IRequestSuccess<TResponse>, IRequestError, void, unknown> | undefined) => Promise<IRequestSuccess<TResponse>>;
61
+ uploadProgressPercent: number;
59
62
  } | {
60
63
  data: IRequestSuccess<TResponse>;
61
64
  error: null;
@@ -73,4 +76,5 @@ export declare const usePostRequest: <TResponse>({ path, isFormData, baseUrl, he
73
76
  variables: void | undefined;
74
77
  mutateAsync: import("@tanstack/react-query").UseMutateAsyncFunction<IRequestSuccess<TResponse>, IRequestError, void, unknown>;
75
78
  post: (data: any, options?: MutateOptions<IRequestSuccess<TResponse>, IRequestError, void, unknown> | undefined) => Promise<IRequestSuccess<TResponse>>;
79
+ uploadProgressPercent: number;
76
80
  };
@@ -4,6 +4,7 @@ import { useEnvironmentVariables } from '../config/useEnvironmentVariables.js';
4
4
  import { useQueryHeaders } from '../config/useQueryHeaders.js';
5
5
  import { useReactNativeEnv } from '../config/useReactNativeEnv.js';
6
6
  import { scrollToTop } from '../helpers/scrollToTop.js';
7
+ import { useUploadProgress } from '../hooks/useUploadProgress.js';
7
8
  import 'axios';
8
9
  import { makeRequest } from '../request/make-request.js';
9
10
  import { HttpMethod } from '../request/request.enum.js';
@@ -13,6 +14,7 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
13
14
  const queryClient = useQueryClient();
14
15
  const { getHeaders } = useQueryHeaders();
15
16
  const { isApp } = useReactNativeEnv();
17
+ const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
16
18
  const sendRequest = async (res, rej, postData) => {
17
19
  // get request headers
18
20
  const globalHeaders = getHeaders();
@@ -29,6 +31,7 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
29
31
  isApp,
30
32
  fileSelectors,
31
33
  },
34
+ onUploadProgress,
32
35
  });
33
36
  if (postResponse.status) {
34
37
  // scroll to top after success
@@ -50,7 +53,7 @@ const usePostRequest = ({ path, isFormData = false, baseUrl, headers, fileSelect
50
53
  const post = async (data, options) => {
51
54
  return mutation.mutateAsync(data, options);
52
55
  };
53
- return { post, ...mutation };
56
+ return { post, uploadProgressPercent, ...mutation };
54
57
  };
55
58
 
56
59
  export { usePostRequest };
@@ -1 +1 @@
1
- {"version":3,"file":"usePostRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"usePostRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
1
  import type { IMakeRequest } from './request.interface';
2
- export declare function makeRequest<TResponse>({ body, method, path, isFormData, headers, baseURL, timeout, appFileConfig, }: IMakeRequest): Promise<import("./request.interface").IRequestError>;
2
+ export declare function makeRequest<TResponse>({ body, method, path, isFormData, headers, baseURL, timeout, appFileConfig, onUploadProgress, }: IMakeRequest): Promise<import("./request.interface").IRequestError>;
@@ -3,7 +3,7 @@ import { axiosInstance } from './axios-instance.js';
3
3
  import { ContentType, HttpMethod } from './request.enum.js';
4
4
  import { errorTransformer, successTransformer } from './transformer.js';
5
5
 
6
- async function makeRequest({ body, method = HttpMethod.GET, path, isFormData, headers = {}, baseURL, timeout, appFileConfig, }) {
6
+ async function makeRequest({ body, method = HttpMethod.GET, path, isFormData, headers = {}, baseURL, timeout, appFileConfig, onUploadProgress, }) {
7
7
  // check if file is included in mobile app environment and extract all file input to avoid
8
8
  // it being formatted to object using axios formData builder
9
9
  const isApp = appFileConfig?.isApp;
@@ -41,6 +41,7 @@ async function makeRequest({ body, method = HttpMethod.GET, path, isFormData, he
41
41
  url: path,
42
42
  method,
43
43
  data: body,
44
+ onUploadProgress,
44
45
  });
45
46
  // get response json
46
47
  const jsonResp = await resp.data;
@@ -1 +1 @@
1
- {"version":3,"file":"make-request.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"make-request.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import type { RawAxiosRequestHeaders } from 'axios';
1
+ import type { AxiosProgressEvent, RawAxiosRequestHeaders } from 'axios';
2
2
  import type { HttpMethod } from './request.enum';
3
3
  export interface IMakeRequest {
4
4
  baseURL: string;
@@ -9,6 +9,7 @@ export interface IMakeRequest {
9
9
  isFormData?: boolean;
10
10
  headers: RawAxiosRequestHeaders;
11
11
  appFileConfig?: AppFileConfig;
12
+ onUploadProgress?: (progressEvent: AxiosProgressEvent) => void;
12
13
  }
13
14
  export interface AppFileConfig {
14
15
  fileSelectors?: string[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ventlio/tanstack-query",
3
- "version": "0.2.76",
3
+ "version": "0.2.77",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "contributors": [
@@ -0,0 +1 @@
1
+ export * from './useUploadProgress';
@@ -0,0 +1,15 @@
1
+ import type { AxiosProgressEvent } from 'axios';
2
+ import { useState } from 'react';
3
+
4
+ export const useUploadProgress = () => {
5
+ const [uploadProgressPercent, setUploadProgressPercent] = useState<number>(0);
6
+
7
+ const onUploadProgress = (progressEvent: AxiosProgressEvent) => {
8
+ const { loaded, total } = progressEvent;
9
+ const percentage = Math.round((loaded / (total as number)) * 100);
10
+
11
+ setUploadProgressPercent(percentage);
12
+ };
13
+
14
+ return { onUploadProgress, uploadProgressPercent };
15
+ };
@@ -3,6 +3,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query';
3
3
  import type { RawAxiosRequestHeaders } from 'axios';
4
4
  import { useEnvironmentVariables, useQueryHeaders } from '../config';
5
5
  import { scrollToTop } from '../helpers';
6
+ import { useUploadProgress } from '../hooks';
6
7
  import { HttpMethod, makeRequest } from '../request';
7
8
  import type { IRequestError, IRequestSuccess } from '../request/request.interface';
8
9
  import type { TanstackQueryConfig } from '../types';
@@ -10,6 +11,7 @@ import type { DefaultRequestOptions } from './queries.interface';
10
11
 
11
12
  export const usePatchRequest = <TResponse>({ path, baseUrl, headers }: { path: string } & DefaultRequestOptions) => {
12
13
  const { API_URL, TIMEOUT } = useEnvironmentVariables();
14
+ const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
13
15
 
14
16
  const { getHeaders } = useQueryHeaders();
15
17
  const queryClient = useQueryClient();
@@ -27,6 +29,7 @@ export const usePatchRequest = <TResponse>({ path, baseUrl, headers }: { path: s
27
29
  headers: { ...globalHeaders, ...headers },
28
30
  baseURL: baseUrl ?? API_URL,
29
31
  timeout: TIMEOUT,
32
+ onUploadProgress,
30
33
  });
31
34
 
32
35
  if (patchResponse.status) {
@@ -59,5 +62,5 @@ export const usePatchRequest = <TResponse>({ path, baseUrl, headers }: { path: s
59
62
  return mutation.mutateAsync(data, options);
60
63
  };
61
64
 
62
- return { patch, ...mutation };
65
+ return { patch, uploadProgressPercent, ...mutation };
63
66
  };
@@ -4,6 +4,7 @@ import { useEnvironmentVariables, useQueryHeaders, useReactNativeEnv } from '../
4
4
 
5
5
  import type { RawAxiosRequestHeaders } from 'axios';
6
6
  import { scrollToTop } from '../helpers';
7
+ import { useUploadProgress } from '../hooks';
7
8
  import type { IRequestError, IRequestSuccess } from '../request';
8
9
  import { HttpMethod, makeRequest } from '../request';
9
10
  import type { TanstackQueryConfig } from '../types';
@@ -24,6 +25,8 @@ export const usePostRequest = <TResponse>({
24
25
  const queryClient = useQueryClient();
25
26
  const { getHeaders } = useQueryHeaders();
26
27
  const { isApp } = useReactNativeEnv();
28
+ const { uploadProgressPercent, onUploadProgress } = useUploadProgress();
29
+
27
30
  const sendRequest = async (res: (value: any) => void, rej: (reason?: any) => void, postData: any) => {
28
31
  // get request headers
29
32
  const globalHeaders: RawAxiosRequestHeaders = getHeaders();
@@ -41,6 +44,7 @@ export const usePostRequest = <TResponse>({
41
44
  isApp,
42
45
  fileSelectors,
43
46
  },
47
+ onUploadProgress,
44
48
  });
45
49
 
46
50
  if (postResponse.status) {
@@ -70,5 +74,5 @@ export const usePostRequest = <TResponse>({
70
74
  return mutation.mutateAsync(data, options);
71
75
  };
72
76
 
73
- return { post, ...mutation };
77
+ return { post, uploadProgressPercent, ...mutation };
74
78
  };
@@ -14,6 +14,7 @@ export async function makeRequest<TResponse>({
14
14
  baseURL,
15
15
  timeout,
16
16
  appFileConfig,
17
+ onUploadProgress,
17
18
  }: IMakeRequest) {
18
19
  // check if file is included in mobile app environment and extract all file input to avoid
19
20
  // it being formatted to object using axios formData builder
@@ -53,6 +54,7 @@ export async function makeRequest<TResponse>({
53
54
  url: path,
54
55
  method,
55
56
  data: body,
57
+ onUploadProgress,
56
58
  });
57
59
 
58
60
  // get response json
@@ -1,4 +1,4 @@
1
- import type { RawAxiosRequestHeaders } from 'axios';
1
+ import type { AxiosProgressEvent, RawAxiosRequestHeaders } from 'axios';
2
2
  import type { HttpMethod } from './request.enum';
3
3
 
4
4
  export interface IMakeRequest {
@@ -10,12 +10,14 @@ export interface IMakeRequest {
10
10
  isFormData?: boolean;
11
11
  headers: RawAxiosRequestHeaders;
12
12
  appFileConfig?: AppFileConfig;
13
+ onUploadProgress?: (progressEvent: AxiosProgressEvent) => void;
13
14
  }
14
15
 
15
16
  export interface AppFileConfig {
16
17
  fileSelectors?: string[];
17
18
  isApp: boolean;
18
19
  }
20
+
19
21
  export interface AxiosInstanceOption {
20
22
  bearerToken?: string;
21
23
  contentType?: string;