forked from asgardeo/thunder
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuseGetApplications.ts
More file actions
100 lines (94 loc) · 3.18 KB
/
useGetApplications.ts
File metadata and controls
100 lines (94 loc) · 3.18 KB
1
2
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
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
/**
* Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com).
*
* WSO2 LLC. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {useAsgardeo} from '@asgardeo/react';
import {useQuery, type UseQueryResult} from '@tanstack/react-query';
import {useConfig} from '@thunder/contexts';
import ApplicationQueryKeys from '../constants/application-query-keys';
import type {ApplicationListResponse} from '../models/responses';
/**
* Parameters for the {@link useGetApplications} hook.
*
* @public
*/
export interface UseGetApplicationsParams {
/**
* Maximum number of records to return.
*/
limit?: number;
/**
* Number of records to skip for pagination.
*/
offset?: number;
}
/**
* Custom React hook to fetch a paginated list of applications from the server.
*
* This hook uses TanStack Query to manage the server state and provides automatic
* caching, refetching, and background updates. The query is keyed by the pagination
* parameters to ensure proper cache management.
*
* @param params - Optional pagination parameters
* @param params.limit - Maximum number of records to return (default: 30)
* @param params.offset - Number of records to skip for pagination (default: 0)
* @returns TanStack Query result object containing applications list data, loading state, and error information
*
* @example
* ```tsx
* function ApplicationsList() {
* const { data, isLoading, error } = useGetApplications({ limit: 10, offset: 0 });
*
* if (isLoading) return <div>Loading...</div>;
* if (error) return <div>Error: {error.message}</div>;
*
* return (
* <ul>
* {data?.applications.map((app) => (
* <li key={app.id}>{app.name}</li>
* ))}
* </ul>
* );
* }
* ```
*
* @public
*/
export default function useGetApplications(params?: UseGetApplicationsParams): UseQueryResult<ApplicationListResponse> {
const {http} = useAsgardeo();
const {getServerUrl} = useConfig();
const {limit = 30, offset = 0} = params ?? {};
return useQuery<ApplicationListResponse>({
queryKey: [ApplicationQueryKeys.APPLICATIONS, {limit, offset}],
queryFn: async (): Promise<ApplicationListResponse> => {
const serverUrl: string = getServerUrl();
const queryParams: URLSearchParams = new URLSearchParams({
limit: limit.toString(),
offset: offset.toString(),
});
const response: {
data: ApplicationListResponse;
} = await http.request({
url: `${serverUrl}/applications?${queryParams.toString()}`,
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
} as unknown as Parameters<typeof http.request>[0]);
return response.data;
},
});
}