@ventlio/tanstack-query 0.5.4 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/bootstrapQueryRequest.d.ts +4 -4
- package/dist/config/bootstrapQueryRequest.js +15 -15
- package/dist/config/config.interface.d.ts +4 -4
- package/dist/config/index.d.ts +6 -6
- package/dist/config/useEnvironmentVariables.d.ts +2 -2
- package/dist/config/useEnvironmentVariables.js +8 -8
- package/dist/config/useQueryConfig.d.ts +2 -2
- package/dist/config/useQueryConfig.js +5 -5
- package/dist/config/useQueryHeaders.d.ts +2 -2
- package/dist/config/useQueryHeaders.js +9 -9
- package/dist/config/useReactNativeEnv.d.ts +5 -5
- package/dist/config/useReactNativeEnv.js +6 -6
- package/dist/helpers/index.d.ts +2 -2
- package/dist/helpers/scrollToTop.d.ts +1 -1
- package/dist/helpers/scrollToTop.js +5 -5
- package/dist/helpers/timeFuncs.d.ts +1 -1
- package/dist/helpers/timeFuncs.js +7 -7
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/useUploadProgress.d.ts +5 -5
- package/dist/hooks/useUploadProgress.js +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.mjs +827 -830
- package/dist/index.mjs.map +1 -1
- package/dist/model/index.d.ts +4 -4
- package/dist/model/model.interface.d.ts +11 -11
- package/dist/model/useKeyTrackerModel.d.ts +4 -4
- package/dist/model/useKeyTrackerModel.js +14 -14
- package/dist/model/useQueryModel.d.ts +2 -2
- package/dist/model/useQueryModel.js +115 -115
- package/dist/model/useRefetchQuery.d.ts +3 -3
- package/dist/model/useRefetchQuery.js +10 -10
- package/dist/queries/index.d.ts +6 -6
- package/dist/queries/queries.interface.d.ts +17 -17
- package/dist/queries/useDeleteRequest.d.ts +60 -60
- package/dist/queries/useDeleteRequest.js +72 -71
- package/dist/queries/useDeleteRequest.js.map +1 -1
- package/dist/queries/useGetInfiniteRequest.d.ts +108 -110
- package/dist/queries/useGetInfiniteRequest.js +103 -102
- package/dist/queries/useGetInfiniteRequest.js.map +1 -1
- package/dist/queries/useGetRequest.d.ts +73 -74
- package/dist/queries/useGetRequest.js +129 -133
- package/dist/queries/useGetRequest.js.map +1 -1
- package/dist/queries/usePatchRequest.d.ts +86 -86
- package/dist/queries/usePatchRequest.js +70 -70
- package/dist/queries/usePostRequest.d.ts +149 -157
- package/dist/queries/usePostRequest.js +77 -78
- package/dist/queries/usePostRequest.js.map +1 -1
- package/dist/queries/usePutRequest.d.ts +86 -86
- package/dist/request/axios-instance.d.ts +3 -3
- package/dist/request/axios-instance.js +6 -6
- package/dist/request/buildFormData.d.ts +1 -1
- package/dist/request/buildFormData.js +40 -40
- package/dist/request/index.d.ts +6 -6
- package/dist/request/make-request.d.ts +2 -2
- package/dist/request/make-request.js +80 -80
- package/dist/request/request.enum.d.ts +11 -11
- package/dist/request/request.enum.js +12 -12
- package/dist/request/request.interface.d.ts +48 -48
- package/dist/request/transformer.d.ts +7 -7
- package/dist/request/transformer.js +18 -18
- package/dist/stores/index.d.ts +2 -2
- package/dist/stores/useHeaderStore.d.ts +7 -7
- package/dist/stores/useHeaderStore.js +5 -5
- package/dist/stores/usePauseFutureRequests.d.ts +7 -7
- package/dist/stores/usePauseFutureRequests.js +13 -13
- package/dist/types/index.d.ts +27 -29
- package/package.json +2 -2
- package/src/queries/useDeleteRequest.ts +13 -14
- package/src/queries/useGetInfiniteRequest.ts +17 -19
- package/src/queries/useGetRequest.ts +29 -36
- package/src/queries/usePatchRequest.ts +24 -22
- package/src/queries/usePostRequest.ts +20 -23
- package/src/queries/usePutRequest.ts +19 -22
- package/src/request/make-request.ts +2 -2
- package/src/request/transformer.ts +1 -1
- package/src/types/index.ts +5 -4
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
//
|
|
2
|
-
const errorTransformer = (data) => {
|
|
3
|
-
return {
|
|
4
|
-
timeStamp: new Date(),
|
|
5
|
-
|
|
6
|
-
data
|
|
7
|
-
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
//
|
|
11
|
-
const successTransformer = (data) => {
|
|
12
|
-
return {
|
|
13
|
-
message: data.message ?? 'Request successful',
|
|
14
|
-
statusCode: data.statusCode,
|
|
15
|
-
timeStamp: new Date(),
|
|
16
|
-
status: true,
|
|
17
|
-
data: data.data,
|
|
18
|
-
};
|
|
1
|
+
//
|
|
2
|
+
const errorTransformer = (data) => {
|
|
3
|
+
return {
|
|
4
|
+
timeStamp: new Date(),
|
|
5
|
+
data: data.data,
|
|
6
|
+
...data,
|
|
7
|
+
status: false,
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
//
|
|
11
|
+
const successTransformer = (data) => {
|
|
12
|
+
return {
|
|
13
|
+
message: data.message ?? 'Request successful',
|
|
14
|
+
statusCode: data.statusCode,
|
|
15
|
+
timeStamp: new Date(),
|
|
16
|
+
status: true,
|
|
17
|
+
data: data.data,
|
|
18
|
+
};
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
export { errorTransformer, successTransformer };
|
package/dist/stores/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './useHeaderStore';
|
|
2
|
-
export * from './usePauseFutureRequests';
|
|
1
|
+
export * from './useHeaderStore';
|
|
2
|
+
export * from './usePauseFutureRequests';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { QueryHeaders } from '../types';
|
|
2
|
-
interface IUserHeaders {
|
|
3
|
-
headers: QueryHeaders | undefined;
|
|
4
|
-
setHeader: (headers: QueryHeaders) => void;
|
|
5
|
-
}
|
|
6
|
-
export declare const useHeaderStore: import("zustand").UseBoundStore<import("zustand").StoreApi<IUserHeaders>>;
|
|
7
|
-
export {};
|
|
1
|
+
import type { QueryHeaders } from '../types';
|
|
2
|
+
interface IUserHeaders {
|
|
3
|
+
headers: QueryHeaders | undefined;
|
|
4
|
+
setHeader: (headers: QueryHeaders) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare const useHeaderStore: import("zustand").UseBoundStore<import("zustand").StoreApi<IUserHeaders>>;
|
|
7
|
+
export {};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { create } from 'zustand';
|
|
2
2
|
|
|
3
|
-
const useHeaderStore = create((set) => ({
|
|
4
|
-
headers: undefined,
|
|
5
|
-
setHeader(headers) {
|
|
6
|
-
set({ headers });
|
|
7
|
-
},
|
|
3
|
+
const useHeaderStore = create((set) => ({
|
|
4
|
+
headers: undefined,
|
|
5
|
+
setHeader(headers) {
|
|
6
|
+
set({ headers });
|
|
7
|
+
},
|
|
8
8
|
}));
|
|
9
9
|
|
|
10
10
|
export { useHeaderStore };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export interface PauseFutureRequest {
|
|
2
|
-
isFutureQueriesPaused: boolean;
|
|
3
|
-
isFutureMutationsPaused: boolean;
|
|
4
|
-
pauseFutureMutation: (status: boolean) => void;
|
|
5
|
-
pauseFutureQueries: (status: boolean) => void;
|
|
6
|
-
}
|
|
7
|
-
export declare const usePauseFutureRequests: import("zustand").UseBoundStore<import("zustand").StoreApi<PauseFutureRequest>>;
|
|
1
|
+
export interface PauseFutureRequest {
|
|
2
|
+
isFutureQueriesPaused: boolean;
|
|
3
|
+
isFutureMutationsPaused: boolean;
|
|
4
|
+
pauseFutureMutation: (status: boolean) => void;
|
|
5
|
+
pauseFutureQueries: (status: boolean) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const usePauseFutureRequests: import("zustand").UseBoundStore<import("zustand").StoreApi<PauseFutureRequest>>;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { create } from 'zustand';
|
|
2
2
|
|
|
3
|
-
const usePauseFutureRequests = create((set) => {
|
|
4
|
-
const pauseFutureQueries = (status) => {
|
|
5
|
-
return set({ isFutureQueriesPaused: status });
|
|
6
|
-
};
|
|
7
|
-
const pauseFutureMutation = (status) => {
|
|
8
|
-
return set({ isFutureQueriesPaused: status });
|
|
9
|
-
};
|
|
10
|
-
return {
|
|
11
|
-
isFutureMutationsPaused: false,
|
|
12
|
-
isFutureQueriesPaused: false,
|
|
13
|
-
pauseFutureQueries,
|
|
14
|
-
pauseFutureMutation,
|
|
15
|
-
};
|
|
3
|
+
const usePauseFutureRequests = create((set) => {
|
|
4
|
+
const pauseFutureQueries = (status) => {
|
|
5
|
+
return set({ isFutureQueriesPaused: status });
|
|
6
|
+
};
|
|
7
|
+
const pauseFutureMutation = (status) => {
|
|
8
|
+
return set({ isFutureQueriesPaused: status });
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
isFutureMutationsPaused: false,
|
|
12
|
+
isFutureQueriesPaused: false,
|
|
13
|
+
pauseFutureQueries,
|
|
14
|
+
pauseFutureMutation,
|
|
15
|
+
};
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
export { usePauseFutureRequests };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,29 +1,27 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
export type QueryHeaders = RawAxiosRequestHeaders | undefined;
|
|
1
|
+
import type { RawAxiosRequestHeaders } from 'axios';
|
|
2
|
+
import type { IRequestError, IRequestSuccess } from '../request';
|
|
3
|
+
export interface BootstrapConfig {
|
|
4
|
+
environments?: {
|
|
5
|
+
appBaseUrl: string;
|
|
6
|
+
appTimeout: number;
|
|
7
|
+
};
|
|
8
|
+
context?: ContextType;
|
|
9
|
+
modelConfig?: BootstrapModelConfig;
|
|
10
|
+
middleware?: <T = any>(next: () => Promise<IRequestSuccess<T> | IRequestError>, configs?: {
|
|
11
|
+
baseUrl: string;
|
|
12
|
+
path: string;
|
|
13
|
+
body?: Record<string, any>;
|
|
14
|
+
}) => Promise<IRequestError | IRequestSuccess<T>>;
|
|
15
|
+
}
|
|
16
|
+
export interface BootstrapModelConfig {
|
|
17
|
+
idColumn: string;
|
|
18
|
+
}
|
|
19
|
+
export type ContextType = 'app' | 'web' | 'electronjs';
|
|
20
|
+
export interface TanstackQueryConfig {
|
|
21
|
+
options?: BootstrapConfig;
|
|
22
|
+
}
|
|
23
|
+
export interface IUseQueryHeaders {
|
|
24
|
+
getHeaders: () => QueryHeaders;
|
|
25
|
+
setQueryHeaders: (header: QueryHeaders) => void;
|
|
26
|
+
}
|
|
27
|
+
export type QueryHeaders = RawAxiosRequestHeaders | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ventlio/tanstack-query",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.6",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"contributors": [
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"ts-jest": "^29.1.0",
|
|
81
81
|
"ts-node": "^10.9.1",
|
|
82
82
|
"tslib": "^2.5.0",
|
|
83
|
-
"typescript": "^
|
|
83
|
+
"typescript": "^5.5.4"
|
|
84
84
|
},
|
|
85
85
|
"files": [
|
|
86
86
|
"dist/**/*",
|
|
@@ -33,22 +33,21 @@ export const useDeleteRequest = <TResponse>(deleteOptions?: DefaultRequestOption
|
|
|
33
33
|
timeout: TIMEOUT,
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
-
let
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
let deleteResponse: IRequestError | IRequestSuccess<TResponse>;
|
|
37
|
+
if (queryConfigOptions?.middleware) {
|
|
38
|
+
// perform global middleware
|
|
39
|
+
deleteResponse = await queryConfigOptions.middleware(async () => await makeRequest<TResponse>(requestOptions), {
|
|
40
|
+
path: requestUrl,
|
|
41
|
+
baseUrl: baseUrl ?? API_URL,
|
|
42
|
+
});
|
|
43
|
+
} else {
|
|
44
|
+
deleteResponse = await makeRequest<TResponse>(requestOptions);
|
|
40
45
|
}
|
|
41
46
|
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (postResponse.status) {
|
|
46
|
-
res(postResponse as IRequestSuccess<TResponse>);
|
|
47
|
-
} else {
|
|
48
|
-
rej(postResponse);
|
|
49
|
-
}
|
|
47
|
+
if (deleteResponse.status) {
|
|
48
|
+
res(deleteResponse as IRequestSuccess<TResponse>);
|
|
50
49
|
} else {
|
|
51
|
-
rej(
|
|
50
|
+
rej(deleteResponse);
|
|
52
51
|
}
|
|
53
52
|
};
|
|
54
53
|
|
|
@@ -101,5 +100,5 @@ export const useDeleteRequest = <TResponse>(deleteOptions?: DefaultRequestOption
|
|
|
101
100
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
102
101
|
}, [isFutureQueriesPaused]);
|
|
103
102
|
|
|
104
|
-
return { destroy, ...query, isLoading: query.isLoading || isFutureQueriesPaused };
|
|
103
|
+
return { destroy, ...query, isLoading: (query.isLoading as boolean) || isFutureQueriesPaused };
|
|
105
104
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { InfiniteData,
|
|
1
|
+
import type { InfiniteData, UseQueryOptions } from '@tanstack/react-query';
|
|
2
2
|
import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query';
|
|
3
3
|
import { startTransition, useEffect, useMemo, useState } from 'react';
|
|
4
4
|
import { useEnvironmentVariables, useQueryConfig } from '../config';
|
|
@@ -53,7 +53,6 @@ export const useGetInfiniteRequest = <TResponse extends Record<string, any>>({
|
|
|
53
53
|
| PromiseLike<IRequestError | IRequestSuccess<TResponse & { pagination: Pagination }>>
|
|
54
54
|
) => void,
|
|
55
55
|
rej: (reason?: any) => void,
|
|
56
|
-
queryKey: QueryKey,
|
|
57
56
|
pageParam?: string
|
|
58
57
|
) => {
|
|
59
58
|
if (load) {
|
|
@@ -66,25 +65,24 @@ export const useGetInfiniteRequest = <TResponse extends Record<string, any>>({
|
|
|
66
65
|
timeout: TIMEOUT,
|
|
67
66
|
};
|
|
68
67
|
|
|
69
|
-
let
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
let getResponse: IRequestError | IRequestSuccess<TResponse>;
|
|
69
|
+
if (queryConfigOptions?.middleware) {
|
|
70
|
+
// perform global middleware
|
|
71
|
+
getResponse = await queryConfigOptions.middleware(async () => await makeRequest<TResponse>(requestOptions), {
|
|
72
|
+
path,
|
|
73
|
+
baseUrl: baseUrl ?? API_URL,
|
|
74
|
+
});
|
|
75
|
+
} else {
|
|
76
|
+
getResponse = await makeRequest<TResponse>(requestOptions);
|
|
73
77
|
}
|
|
74
78
|
|
|
75
|
-
if (
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (getResponse.status) {
|
|
79
|
-
res(getResponse as IRequestSuccess<TResponse & { pagination: Pagination }>);
|
|
80
|
-
} else {
|
|
81
|
-
rej(getResponse);
|
|
82
|
-
}
|
|
79
|
+
if (getResponse.status) {
|
|
80
|
+
res(getResponse as IRequestSuccess<TResponse & { pagination: Pagination }>);
|
|
83
81
|
} else {
|
|
84
|
-
rej(
|
|
82
|
+
rej(getResponse);
|
|
85
83
|
}
|
|
86
84
|
} else {
|
|
87
|
-
|
|
85
|
+
rej(null);
|
|
88
86
|
}
|
|
89
87
|
};
|
|
90
88
|
|
|
@@ -112,9 +110,9 @@ export const useGetInfiniteRequest = <TResponse extends Record<string, any>>({
|
|
|
112
110
|
|
|
113
111
|
const query = useInfiniteQuery<any, any, InfiniteData<IRequestSuccess<TResponse & { pagination: Pagination }>>>({
|
|
114
112
|
queryKey: [requestPath, {}],
|
|
115
|
-
queryFn: ({ pageParam = requestPath
|
|
113
|
+
queryFn: ({ pageParam = requestPath }) =>
|
|
116
114
|
new Promise<IRequestSuccess<TResponse & { pagination: Pagination }> | IRequestError>((res, rej) =>
|
|
117
|
-
sendRequest(res, rej,
|
|
115
|
+
sendRequest(res, rej, pageParam as string)
|
|
118
116
|
),
|
|
119
117
|
enabled: load && !isFutureQueriesPaused,
|
|
120
118
|
getNextPageParam: (lastPage) => constructPaginationLink('next_page', lastPage),
|
|
@@ -185,6 +183,6 @@ export const useGetInfiniteRequest = <TResponse extends Record<string, any>>({
|
|
|
185
183
|
return {
|
|
186
184
|
get,
|
|
187
185
|
...query,
|
|
188
|
-
isLoading: query.isLoading || isFutureQueriesPaused,
|
|
186
|
+
isLoading: (query.isLoading as boolean) || isFutureQueriesPaused,
|
|
189
187
|
};
|
|
190
188
|
};
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
|
1
|
+
import { QueryKey, useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query';
|
|
3
2
|
import { startTransition, useEffect, useMemo, useState } from 'react';
|
|
4
3
|
import { useEnvironmentVariables, useQueryConfig } from '../config';
|
|
5
4
|
|
|
6
|
-
import
|
|
7
|
-
import { makeRequest } from '../request';
|
|
5
|
+
import { IRequestError, IRequestSuccess, makeRequest } from '../request';
|
|
8
6
|
import { useHeaderStore, usePauseFutureRequests } from '../stores';
|
|
9
|
-
import
|
|
7
|
+
import { DefaultRequestOptions, IPagination, TanstackQueryOption } from './queries.interface';
|
|
10
8
|
|
|
11
9
|
export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
12
10
|
path,
|
|
@@ -45,36 +43,31 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
45
43
|
rej: (reason?: any) => void,
|
|
46
44
|
queryKey: QueryKey
|
|
47
45
|
) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
46
|
+
const [url] = queryKey;
|
|
47
|
+
const requestUrl = (url ?? requestPath) as string;
|
|
48
|
+
|
|
49
|
+
const requestOptions = {
|
|
50
|
+
path: requestUrl,
|
|
51
|
+
headers: { ...globalHeaders, ...headers },
|
|
52
|
+
baseURL: baseUrl ?? API_URL,
|
|
53
|
+
timeout: TIMEOUT,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
let getResponse: IRequestError | IRequestSuccess<TResponse>;
|
|
57
|
+
if (queryConfigOptions?.middleware) {
|
|
58
|
+
// perform global middleware
|
|
59
|
+
getResponse = await queryConfigOptions.middleware(async () => await makeRequest<TResponse>(requestOptions), {
|
|
60
|
+
path,
|
|
61
|
+
baseUrl: baseUrl ?? API_URL,
|
|
62
|
+
});
|
|
63
|
+
} else {
|
|
64
|
+
getResponse = await makeRequest<TResponse>(requestOptions);
|
|
65
|
+
}
|
|
67
66
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
} else {
|
|
71
|
-
rej(getResponse);
|
|
72
|
-
}
|
|
73
|
-
} else {
|
|
74
|
-
rej(null);
|
|
75
|
-
}
|
|
67
|
+
if (getResponse.status) {
|
|
68
|
+
res(getResponse as IRequestSuccess<TResponse>);
|
|
76
69
|
} else {
|
|
77
|
-
|
|
70
|
+
rej(getResponse);
|
|
78
71
|
}
|
|
79
72
|
};
|
|
80
73
|
|
|
@@ -104,7 +97,7 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
104
97
|
}, [keyTracker, requestPath, queryClient, queryOptions?.staleTime]);
|
|
105
98
|
|
|
106
99
|
const nextPage = () => {
|
|
107
|
-
if (query.data
|
|
100
|
+
if (query.data.data.pagination) {
|
|
108
101
|
const pagination: IPagination = query.data.data.pagination;
|
|
109
102
|
if (pagination.next_page !== pagination.current_page && pagination.next_page > pagination.current_page) {
|
|
110
103
|
setRequestPath(constructPaginationLink(requestPath, pagination.next_page));
|
|
@@ -113,7 +106,7 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
113
106
|
};
|
|
114
107
|
|
|
115
108
|
const prevPage = () => {
|
|
116
|
-
if (query.data
|
|
109
|
+
if (query.data.data.pagination) {
|
|
117
110
|
const pagination: IPagination = query.data.data.pagination;
|
|
118
111
|
if (pagination.previous_page !== pagination.current_page && pagination.previous_page < pagination.current_page) {
|
|
119
112
|
setRequestPath(constructPaginationLink(requestPath, pagination.previous_page));
|
|
@@ -184,7 +177,7 @@ export const useGetRequest = <TResponse extends Record<string, any>>({
|
|
|
184
177
|
|
|
185
178
|
return {
|
|
186
179
|
...query,
|
|
187
|
-
isLoading: query.isLoading || isFutureQueriesPaused,
|
|
180
|
+
isLoading: (query.isLoading as boolean) || isFutureQueriesPaused,
|
|
188
181
|
setRequestPath,
|
|
189
182
|
nextPage,
|
|
190
183
|
prevPage,
|
|
@@ -33,32 +33,34 @@ export const usePatchRequest = <TResponse>({ path, baseUrl, headers }: { path: s
|
|
|
33
33
|
onUploadProgress,
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
-
let
|
|
36
|
+
let patchResponse: IRequestError | IRequestSuccess<TResponse>;
|
|
37
|
+
if (config.options?.middleware) {
|
|
38
|
+
// perform global middleware
|
|
39
|
+
const middlewareResponse = await config.options.middleware(
|
|
40
|
+
async () => await makeRequest<TResponse>(requestOptions),
|
|
41
|
+
{
|
|
42
|
+
path,
|
|
43
|
+
baseUrl: baseUrl ?? API_URL,
|
|
44
|
+
body: data,
|
|
45
|
+
}
|
|
46
|
+
);
|
|
37
47
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
...requestOptions,
|
|
42
|
-
});
|
|
48
|
+
patchResponse = middlewareResponse;
|
|
49
|
+
} else {
|
|
50
|
+
patchResponse = await makeRequest<TResponse>(requestOptions);
|
|
43
51
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// scroll to top after success
|
|
49
|
-
if (config.options?.context !== 'app') {
|
|
50
|
-
scrollToTop();
|
|
51
|
-
}
|
|
52
|
-
res(patchResponse as IRequestSuccess<TResponse>);
|
|
53
|
-
} else {
|
|
54
|
-
// scroll to top after error
|
|
55
|
-
if (config.options?.context !== 'app') {
|
|
56
|
-
scrollToTop();
|
|
57
|
-
}
|
|
58
|
-
rej(patchResponse);
|
|
52
|
+
if (patchResponse.status) {
|
|
53
|
+
// scroll to top after success
|
|
54
|
+
if (config.options?.context !== 'app') {
|
|
55
|
+
scrollToTop();
|
|
59
56
|
}
|
|
57
|
+
res(patchResponse as IRequestSuccess<TResponse>);
|
|
60
58
|
} else {
|
|
61
|
-
|
|
59
|
+
// scroll to top after error
|
|
60
|
+
if (config.options?.context !== 'app') {
|
|
61
|
+
scrollToTop();
|
|
62
|
+
}
|
|
63
|
+
rej(patchResponse);
|
|
62
64
|
}
|
|
63
65
|
};
|
|
64
66
|
|
|
@@ -59,34 +59,31 @@ export const usePostRequest = <TResponse>({
|
|
|
59
59
|
...requestConfig,
|
|
60
60
|
};
|
|
61
61
|
|
|
62
|
-
let
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
let postResponse: IRequestError | IRequestSuccess<TResponse>;
|
|
63
|
+
if (config.options?.middleware) {
|
|
64
|
+
// perform global middleware
|
|
65
|
+
postResponse = await config.options.middleware(async () => await makeRequest<TResponse>(requestOptions), {
|
|
66
|
+
path,
|
|
67
|
+
baseUrl: baseUrl ?? API_URL,
|
|
68
|
+
body: data,
|
|
68
69
|
});
|
|
70
|
+
} else {
|
|
71
|
+
postResponse = await makeRequest<TResponse>(requestOptions);
|
|
69
72
|
}
|
|
70
73
|
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (config.options?.context !== 'app') {
|
|
78
|
-
scrollToTop();
|
|
79
|
-
}
|
|
80
|
-
res(postResponse as IRequestSuccess<TResponse>);
|
|
81
|
-
} else {
|
|
82
|
-
// scroll to top after error
|
|
83
|
-
if (config.options?.context !== 'app') {
|
|
84
|
-
scrollToTop();
|
|
85
|
-
}
|
|
86
|
-
rej(postResponse);
|
|
74
|
+
if (postResponse.status) {
|
|
75
|
+
// scroll to top after success
|
|
76
|
+
|
|
77
|
+
if (config.options?.context !== 'app') {
|
|
78
|
+
scrollToTop();
|
|
87
79
|
}
|
|
80
|
+
res(postResponse as IRequestSuccess<TResponse>);
|
|
88
81
|
} else {
|
|
89
|
-
|
|
82
|
+
// scroll to top after error
|
|
83
|
+
if (config.options?.context !== 'app') {
|
|
84
|
+
scrollToTop();
|
|
85
|
+
}
|
|
86
|
+
rej(postResponse);
|
|
90
87
|
}
|
|
91
88
|
};
|
|
92
89
|
|
|
@@ -33,32 +33,29 @@ export const usePutRequest = <TResponse>({ path, baseUrl, headers }: { path: str
|
|
|
33
33
|
onUploadProgress,
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
-
let
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
let putResponse: IRequestError | IRequestSuccess<TResponse>;
|
|
37
|
+
if (config.options?.middleware) {
|
|
38
|
+
// perform global middleware
|
|
39
|
+
putResponse = await config.options.middleware(async () => await makeRequest<TResponse>(requestOptions), {
|
|
40
|
+
path,
|
|
41
|
+
baseUrl: baseUrl ?? API_URL,
|
|
42
|
+
body: data,
|
|
42
43
|
});
|
|
44
|
+
} else {
|
|
45
|
+
putResponse = await makeRequest<TResponse>(requestOptions);
|
|
43
46
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// scroll to top after success
|
|
49
|
-
if (config.options?.context !== 'app') {
|
|
50
|
-
scrollToTop();
|
|
51
|
-
}
|
|
52
|
-
res(putResponse as IRequestSuccess<TResponse>);
|
|
53
|
-
} else {
|
|
54
|
-
// scroll to top after error
|
|
55
|
-
if (config.options?.context !== 'app') {
|
|
56
|
-
scrollToTop();
|
|
57
|
-
}
|
|
58
|
-
rej(putResponse);
|
|
47
|
+
if (putResponse.status) {
|
|
48
|
+
// scroll to top after success
|
|
49
|
+
if (config.options?.context !== 'app') {
|
|
50
|
+
scrollToTop();
|
|
59
51
|
}
|
|
52
|
+
res(putResponse as IRequestSuccess<TResponse>);
|
|
60
53
|
} else {
|
|
61
|
-
|
|
54
|
+
// scroll to top after error
|
|
55
|
+
if (config.options?.context !== 'app') {
|
|
56
|
+
scrollToTop();
|
|
57
|
+
}
|
|
58
|
+
rej(putResponse);
|
|
62
59
|
}
|
|
63
60
|
};
|
|
64
61
|
|
|
@@ -3,7 +3,7 @@ import axios from 'axios';
|
|
|
3
3
|
import { axiosInstance } from './axios-instance';
|
|
4
4
|
|
|
5
5
|
import { ContentType, HttpMethod } from './request.enum';
|
|
6
|
-
import type { IMakeRequest } from './request.interface';
|
|
6
|
+
import type { IMakeRequest, IRequestError, IRequestSuccess } from './request.interface';
|
|
7
7
|
import { errorTransformer, successTransformer } from './transformer';
|
|
8
8
|
|
|
9
9
|
export async function makeRequest<TResponse>({
|
|
@@ -16,7 +16,7 @@ export async function makeRequest<TResponse>({
|
|
|
16
16
|
timeout,
|
|
17
17
|
appFileConfig,
|
|
18
18
|
onUploadProgress,
|
|
19
|
-
}: IMakeRequest) {
|
|
19
|
+
}: IMakeRequest): Promise<IRequestSuccess<TResponse> | IRequestError> {
|
|
20
20
|
// check if file is included in mobile app environment and extract all file input to avoid
|
|
21
21
|
// it being formatted to object using axios formData builder
|
|
22
22
|
const isApp = appFileConfig?.isApp;
|
|
@@ -4,9 +4,9 @@ import type { IRequestError, IRequestSuccess, IServerRequestError, IServerReques
|
|
|
4
4
|
export const errorTransformer = (data: IServerRequestError & { statusCode: number }): IRequestError => {
|
|
5
5
|
return {
|
|
6
6
|
timeStamp: new Date(),
|
|
7
|
-
status: false,
|
|
8
7
|
data: data.data,
|
|
9
8
|
...data,
|
|
9
|
+
status: false,
|
|
10
10
|
};
|
|
11
11
|
};
|
|
12
12
|
|
package/src/types/index.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { QueryKey } from '@tanstack/react-query';
|
|
2
1
|
import type { RawAxiosRequestHeaders } from 'axios';
|
|
3
|
-
import type {
|
|
2
|
+
import type { IRequestError, IRequestSuccess } from '../request';
|
|
4
3
|
|
|
5
4
|
export interface BootstrapConfig {
|
|
6
5
|
environments?: {
|
|
@@ -9,8 +8,10 @@ export interface BootstrapConfig {
|
|
|
9
8
|
};
|
|
10
9
|
context?: ContextType;
|
|
11
10
|
modelConfig?: BootstrapModelConfig;
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
middleware?: <T = any>(
|
|
12
|
+
next: () => Promise<IRequestSuccess<T> | IRequestError>,
|
|
13
|
+
configs?: { baseUrl: string; path: string; body?: Record<string, any> }
|
|
14
|
+
) => Promise<IRequestError | IRequestSuccess<T>>;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export interface BootstrapModelConfig {
|