@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
|
@@ -9,77 +9,78 @@ import 'axios';
|
|
|
9
9
|
import { makeRequest } from '../request/make-request.js';
|
|
10
10
|
import { HttpMethod } from '../request/request.enum.js';
|
|
11
11
|
|
|
12
|
-
const useDeleteRequest = (deleteOptions) => {
|
|
13
|
-
const { baseUrl, headers } = deleteOptions ?? {};
|
|
14
|
-
const [requestPath, setRequestPath] = useState('');
|
|
15
|
-
const [options, setOptions] = useState();
|
|
16
|
-
const { options: queryConfigOptions } = useQueryConfig();
|
|
17
|
-
const [requestPayload, setRequestPayload] = useState();
|
|
18
|
-
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
19
|
-
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
20
|
-
const globalHeaders = useHeaderStore((state) => state.headers);
|
|
21
|
-
const sendRequest = async (res, rej, queryKey) => {
|
|
22
|
-
const [url] = queryKey;
|
|
23
|
-
const requestUrl = (url ?? requestPath);
|
|
24
|
-
const requestOptions = {
|
|
25
|
-
path: requestUrl,
|
|
26
|
-
headers: { ...globalHeaders, ...headers },
|
|
27
|
-
baseURL: baseUrl ?? API_URL,
|
|
28
|
-
method: HttpMethod.DELETE,
|
|
29
|
-
timeout: TIMEOUT,
|
|
30
|
-
};
|
|
31
|
-
let
|
|
32
|
-
if (queryConfigOptions?.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
await
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
12
|
+
const useDeleteRequest = (deleteOptions) => {
|
|
13
|
+
const { baseUrl, headers } = deleteOptions ?? {};
|
|
14
|
+
const [requestPath, setRequestPath] = useState('');
|
|
15
|
+
const [options, setOptions] = useState();
|
|
16
|
+
const { options: queryConfigOptions } = useQueryConfig();
|
|
17
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
18
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
19
|
+
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
20
|
+
const globalHeaders = useHeaderStore((state) => state.headers);
|
|
21
|
+
const sendRequest = async (res, rej, queryKey) => {
|
|
22
|
+
const [url] = queryKey;
|
|
23
|
+
const requestUrl = (url ?? requestPath);
|
|
24
|
+
const requestOptions = {
|
|
25
|
+
path: requestUrl,
|
|
26
|
+
headers: { ...globalHeaders, ...headers },
|
|
27
|
+
baseURL: baseUrl ?? API_URL,
|
|
28
|
+
method: HttpMethod.DELETE,
|
|
29
|
+
timeout: TIMEOUT,
|
|
30
|
+
};
|
|
31
|
+
let deleteResponse;
|
|
32
|
+
if (queryConfigOptions?.middleware) {
|
|
33
|
+
// perform global middleware
|
|
34
|
+
deleteResponse = await queryConfigOptions.middleware(async () => await makeRequest(requestOptions), {
|
|
35
|
+
path: requestUrl,
|
|
36
|
+
baseUrl: baseUrl ?? API_URL,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
deleteResponse = await makeRequest(requestOptions);
|
|
41
|
+
}
|
|
42
|
+
if (deleteResponse.status) {
|
|
43
|
+
res(deleteResponse);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
rej(deleteResponse);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const query = useQuery({
|
|
50
|
+
queryKey: [requestPath, {}],
|
|
51
|
+
queryFn: ({ queryKey }) => new Promise((res, rej) => sendRequest(res, rej, queryKey)),
|
|
52
|
+
enabled: false,
|
|
53
|
+
...options,
|
|
54
|
+
});
|
|
55
|
+
const updatedPathAsync = async (link) => {
|
|
56
|
+
return setRequestPath(link);
|
|
57
|
+
};
|
|
58
|
+
const setOptionsAsync = async (fetchOptions) => {
|
|
59
|
+
return setOptions(fetchOptions);
|
|
60
|
+
};
|
|
61
|
+
const destroy = async (link, internalDeleteOptions) => {
|
|
62
|
+
if (!isFutureQueriesPaused) {
|
|
63
|
+
// set enabled to be true for every delete
|
|
64
|
+
internalDeleteOptions = internalDeleteOptions
|
|
65
|
+
? { ...internalDeleteOptions, queryKey: [link, {}], enabled: true }
|
|
66
|
+
: { queryKey: [link, {}], enabled: true };
|
|
67
|
+
await setOptionsAsync(internalDeleteOptions);
|
|
68
|
+
await updatedPathAsync(link);
|
|
69
|
+
return query.data;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
setRequestPayload({ link, internalDeleteOptions });
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (!isFutureQueriesPaused && requestPayload) {
|
|
78
|
+
destroy(requestPayload.link, requestPayload.internalDeleteOptions);
|
|
79
|
+
setRequestPayload(undefined);
|
|
80
|
+
}
|
|
81
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
82
|
+
}, [isFutureQueriesPaused]);
|
|
83
|
+
return { destroy, ...query, isLoading: query.isLoading || isFutureQueriesPaused };
|
|
83
84
|
};
|
|
84
85
|
|
|
85
86
|
export { useDeleteRequest };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDeleteRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDeleteRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,110 +1,108 @@
|
|
|
1
|
-
import type { InfiniteData,
|
|
2
|
-
import type { IRequestError, IRequestSuccess } from '../request';
|
|
3
|
-
import type { DefaultRequestOptions, TanstackInfiniteQueryOption } from './queries.interface';
|
|
4
|
-
interface Pagination {
|
|
5
|
-
previous_page: number;
|
|
6
|
-
current_page: number;
|
|
7
|
-
next_page: number;
|
|
8
|
-
size: number;
|
|
9
|
-
page_count: number;
|
|
10
|
-
total: number;
|
|
11
|
-
}
|
|
12
|
-
export declare const useGetInfiniteRequest: <TResponse extends Record<string, any>>({ path, load, queryOptions, keyTracker, baseUrl, headers, }: {
|
|
13
|
-
path: string;
|
|
14
|
-
load?: boolean
|
|
15
|
-
queryOptions?:
|
|
16
|
-
pagination: Pagination;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
};
|
|
110
|
-
export {};
|
|
1
|
+
import type { InfiniteData, UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { IRequestError, IRequestSuccess } from '../request';
|
|
3
|
+
import type { DefaultRequestOptions, TanstackInfiniteQueryOption } from './queries.interface';
|
|
4
|
+
interface Pagination {
|
|
5
|
+
previous_page: number;
|
|
6
|
+
current_page: number;
|
|
7
|
+
next_page: number;
|
|
8
|
+
size: number;
|
|
9
|
+
page_count: number;
|
|
10
|
+
total: number;
|
|
11
|
+
}
|
|
12
|
+
export declare const useGetInfiniteRequest: <TResponse extends Record<string, any>>({ path, load, queryOptions, keyTracker, baseUrl, headers, }: {
|
|
13
|
+
path: string;
|
|
14
|
+
load?: boolean;
|
|
15
|
+
queryOptions?: TanstackInfiniteQueryOption<TResponse & {
|
|
16
|
+
pagination: Pagination;
|
|
17
|
+
}>;
|
|
18
|
+
keyTracker?: string;
|
|
19
|
+
} & DefaultRequestOptions) => {
|
|
20
|
+
isLoading: boolean;
|
|
21
|
+
data: InfiniteData<IRequestSuccess<TResponse & {
|
|
22
|
+
pagination: Pagination;
|
|
23
|
+
}>, unknown>;
|
|
24
|
+
error: any;
|
|
25
|
+
isError: true;
|
|
26
|
+
isPending: false;
|
|
27
|
+
isLoadingError: false;
|
|
28
|
+
isRefetchError: true;
|
|
29
|
+
isFetchNextPageError: false;
|
|
30
|
+
isFetchPreviousPageError: false;
|
|
31
|
+
isSuccess: false;
|
|
32
|
+
status: "error";
|
|
33
|
+
fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<InfiniteData<IRequestSuccess<TResponse & {
|
|
34
|
+
pagination: Pagination;
|
|
35
|
+
}>, unknown>, any>>;
|
|
36
|
+
fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<InfiniteData<IRequestSuccess<TResponse & {
|
|
37
|
+
pagination: Pagination;
|
|
38
|
+
}>, unknown>, any>>;
|
|
39
|
+
hasNextPage: boolean;
|
|
40
|
+
hasPreviousPage: boolean;
|
|
41
|
+
isFetchingNextPage: boolean;
|
|
42
|
+
isFetchingPreviousPage: boolean;
|
|
43
|
+
dataUpdatedAt: number;
|
|
44
|
+
errorUpdatedAt: number;
|
|
45
|
+
failureCount: number;
|
|
46
|
+
failureReason: any;
|
|
47
|
+
errorUpdateCount: number;
|
|
48
|
+
isFetched: boolean;
|
|
49
|
+
isFetchedAfterMount: boolean;
|
|
50
|
+
isFetching: boolean;
|
|
51
|
+
isInitialLoading: boolean;
|
|
52
|
+
isPaused: boolean;
|
|
53
|
+
isPlaceholderData: boolean;
|
|
54
|
+
isRefetching: boolean;
|
|
55
|
+
isStale: boolean;
|
|
56
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<InfiniteData<IRequestSuccess<TResponse & {
|
|
57
|
+
pagination: Pagination;
|
|
58
|
+
}>, unknown>, any>>;
|
|
59
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
60
|
+
get: (link: string, fetchOptions?: UseQueryOptions<IRequestSuccess<TResponse | undefined>, IRequestError, IRequestSuccess<TResponse | undefined>, Array<any>>) => Promise<InfiniteData<IRequestSuccess<TResponse & {
|
|
61
|
+
pagination: Pagination;
|
|
62
|
+
}>> | undefined>;
|
|
63
|
+
} | {
|
|
64
|
+
isLoading: boolean;
|
|
65
|
+
data: InfiniteData<IRequestSuccess<TResponse & {
|
|
66
|
+
pagination: Pagination;
|
|
67
|
+
}>, unknown>;
|
|
68
|
+
error: null;
|
|
69
|
+
isError: false;
|
|
70
|
+
isPending: false;
|
|
71
|
+
isLoadingError: false;
|
|
72
|
+
isRefetchError: false;
|
|
73
|
+
isFetchNextPageError: false;
|
|
74
|
+
isFetchPreviousPageError: false;
|
|
75
|
+
isSuccess: true;
|
|
76
|
+
status: "success";
|
|
77
|
+
fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<InfiniteData<IRequestSuccess<TResponse & {
|
|
78
|
+
pagination: Pagination;
|
|
79
|
+
}>, unknown>, any>>;
|
|
80
|
+
fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<InfiniteData<IRequestSuccess<TResponse & {
|
|
81
|
+
pagination: Pagination;
|
|
82
|
+
}>, unknown>, any>>;
|
|
83
|
+
hasNextPage: boolean;
|
|
84
|
+
hasPreviousPage: boolean;
|
|
85
|
+
isFetchingNextPage: boolean;
|
|
86
|
+
isFetchingPreviousPage: boolean;
|
|
87
|
+
dataUpdatedAt: number;
|
|
88
|
+
errorUpdatedAt: number;
|
|
89
|
+
failureCount: number;
|
|
90
|
+
failureReason: any;
|
|
91
|
+
errorUpdateCount: number;
|
|
92
|
+
isFetched: boolean;
|
|
93
|
+
isFetchedAfterMount: boolean;
|
|
94
|
+
isFetching: boolean;
|
|
95
|
+
isInitialLoading: boolean;
|
|
96
|
+
isPaused: boolean;
|
|
97
|
+
isPlaceholderData: boolean;
|
|
98
|
+
isRefetching: boolean;
|
|
99
|
+
isStale: boolean;
|
|
100
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<InfiniteData<IRequestSuccess<TResponse & {
|
|
101
|
+
pagination: Pagination;
|
|
102
|
+
}>, unknown>, any>>;
|
|
103
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
104
|
+
get: (link: string, fetchOptions?: UseQueryOptions<IRequestSuccess<TResponse | undefined>, IRequestError, IRequestSuccess<TResponse | undefined>, Array<any>>) => Promise<InfiniteData<IRequestSuccess<TResponse & {
|
|
105
|
+
pagination: Pagination;
|
|
106
|
+
}>> | undefined>;
|
|
107
|
+
};
|
|
108
|
+
export {};
|
|
@@ -9,108 +9,109 @@ import 'axios';
|
|
|
9
9
|
import { makeRequest } from '../request/make-request.js';
|
|
10
10
|
import '../request/request.enum.js';
|
|
11
11
|
|
|
12
|
-
const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl, headers, }) => {
|
|
13
|
-
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
14
|
-
const globalHeaders = useHeaderStore((state) => state.headers);
|
|
15
|
-
const [requestPath, setRequestPath] = useState(path);
|
|
16
|
-
const [options, setOptions] = useState(queryOptions);
|
|
17
|
-
const { options: queryConfigOptions } = useQueryConfig();
|
|
18
|
-
const [requestPayload, setRequestPayload] = useState();
|
|
19
|
-
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
20
|
-
let queryClient = useQueryClient();
|
|
21
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
22
|
-
queryClient = useMemo(() => queryClient, []);
|
|
23
|
-
const sendRequest = async (res, rej,
|
|
24
|
-
if (load) {
|
|
25
|
-
// get request headers
|
|
26
|
-
const requestOptions = {
|
|
27
|
-
path: pageParam ?? requestPath,
|
|
28
|
-
headers: { ...globalHeaders, ...headers },
|
|
29
|
-
baseURL: baseUrl ?? API_URL,
|
|
30
|
-
timeout: TIMEOUT,
|
|
31
|
-
};
|
|
32
|
-
let
|
|
33
|
-
if (queryConfigOptions?.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
*
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
await
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
12
|
+
const useGetInfiniteRequest = ({ path, load = false, queryOptions, keyTracker, baseUrl, headers, }) => {
|
|
13
|
+
const { API_URL, TIMEOUT } = useEnvironmentVariables();
|
|
14
|
+
const globalHeaders = useHeaderStore((state) => state.headers);
|
|
15
|
+
const [requestPath, setRequestPath] = useState(path);
|
|
16
|
+
const [options, setOptions] = useState(queryOptions);
|
|
17
|
+
const { options: queryConfigOptions } = useQueryConfig();
|
|
18
|
+
const [requestPayload, setRequestPayload] = useState();
|
|
19
|
+
const isFutureQueriesPaused = usePauseFutureRequests((state) => state.isFutureQueriesPaused);
|
|
20
|
+
let queryClient = useQueryClient();
|
|
21
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
22
|
+
queryClient = useMemo(() => queryClient, []);
|
|
23
|
+
const sendRequest = async (res, rej, pageParam) => {
|
|
24
|
+
if (load) {
|
|
25
|
+
// get request headers
|
|
26
|
+
const requestOptions = {
|
|
27
|
+
path: pageParam ?? requestPath,
|
|
28
|
+
headers: { ...globalHeaders, ...headers },
|
|
29
|
+
baseURL: baseUrl ?? API_URL,
|
|
30
|
+
timeout: TIMEOUT,
|
|
31
|
+
};
|
|
32
|
+
let getResponse;
|
|
33
|
+
if (queryConfigOptions?.middleware) {
|
|
34
|
+
// perform global middleware
|
|
35
|
+
getResponse = await queryConfigOptions.middleware(async () => await makeRequest(requestOptions), {
|
|
36
|
+
path,
|
|
37
|
+
baseUrl: baseUrl ?? API_URL,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
getResponse = await makeRequest(requestOptions);
|
|
42
|
+
}
|
|
43
|
+
if (getResponse.status) {
|
|
44
|
+
res(getResponse);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
rej(getResponse);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
rej(null);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
*
|
|
56
|
+
* This pagination implementation is currently tied to our use case
|
|
57
|
+
*/
|
|
58
|
+
const constructPaginationLink = (direction, lastPage) => {
|
|
59
|
+
const [pathname, queryString] = requestPath.split('?');
|
|
60
|
+
const queryParams = new URLSearchParams(queryString);
|
|
61
|
+
const lastPageItem = lastPage.data.pagination[direction];
|
|
62
|
+
queryParams.set('page', String(lastPageItem));
|
|
63
|
+
return pathname + '?' + queryParams.toString();
|
|
64
|
+
};
|
|
65
|
+
const query = useInfiniteQuery({
|
|
66
|
+
queryKey: [requestPath, {}],
|
|
67
|
+
queryFn: ({ pageParam = requestPath }) => new Promise((res, rej) => sendRequest(res, rej, pageParam)),
|
|
68
|
+
enabled: load && !isFutureQueriesPaused,
|
|
69
|
+
getNextPageParam: (lastPage) => constructPaginationLink('next_page', lastPage),
|
|
70
|
+
getPreviousPageParam: (lastPage) => constructPaginationLink('previous_page', lastPage),
|
|
71
|
+
...options,
|
|
72
|
+
});
|
|
73
|
+
const setOptionsAsync = async (fetchOptions) => {
|
|
74
|
+
startTransition(() => {
|
|
75
|
+
setOptions(fetchOptions);
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
const get = async (link, fetchOptions) => {
|
|
79
|
+
if (!isFutureQueriesPaused) {
|
|
80
|
+
await setOptionsAsync(fetchOptions);
|
|
81
|
+
await updatedPathAsync(link);
|
|
82
|
+
return query.data;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
setRequestPayload({ link, fetchOptions });
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (!isFutureQueriesPaused && requestPayload) {
|
|
91
|
+
get(requestPayload.link, requestPayload.fetchOptions);
|
|
92
|
+
setRequestPayload(undefined);
|
|
93
|
+
}
|
|
94
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
95
|
+
}, [isFutureQueriesPaused]);
|
|
96
|
+
const updatedPathAsync = async (link) => {
|
|
97
|
+
startTransition(() => {
|
|
98
|
+
setRequestPath(link);
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
if (keyTracker) {
|
|
103
|
+
// set expiration time for the tracker
|
|
104
|
+
queryClient.setQueryDefaults([keyTracker], {
|
|
105
|
+
staleTime: Infinity,
|
|
106
|
+
});
|
|
107
|
+
queryClient.setQueryData([keyTracker], [requestPath, {}]);
|
|
108
|
+
}
|
|
109
|
+
}, [keyTracker, requestPath, queryClient, queryOptions?.staleTime]);
|
|
110
|
+
return {
|
|
111
|
+
get,
|
|
112
|
+
...query,
|
|
113
|
+
isLoading: query.isLoading || isFutureQueriesPaused,
|
|
114
|
+
};
|
|
114
115
|
};
|
|
115
116
|
|
|
116
117
|
export { useGetInfiniteRequest };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetInfiniteRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useGetInfiniteRequest.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|