Skip to content

Commit db3e334

Browse files
authored
Implement React Query workloads integration in useKubestellarData (#2073)
* Implement React Query workloads integration in useKubestellarData * fromatted * fixed lint error
1 parent 00b515e commit db3e334

File tree

1 file changed

+47
-35
lines changed

1 file changed

+47
-35
lines changed

frontend/src/hooks/useKubestellarData.ts

Lines changed: 47 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useState, useEffect, useCallback } from 'react';
22
import { api } from '../lib/api';
33
import { BindingPolicyInfo, ManagedCluster, Workload } from '../types/bindingPolicy';
44
import { useTranslation } from 'react-i18next';
5+
import { useWDSQueries } from './queries/useWDSQueries';
56

67
interface UseKubestellarDataProps {
78
// Optional callback to run after data refresh
@@ -22,18 +23,6 @@ interface ClusterApiData {
2223
capacity?: Record<string, unknown>;
2324
}
2425

25-
interface WorkloadApiData {
26-
name: string;
27-
kind?: string;
28-
namespace?: string;
29-
creationTime: string;
30-
labels?: Record<string, string>;
31-
status?: string;
32-
replicas?: number;
33-
selector?: Record<string, string>;
34-
apiVersion?: string;
35-
}
36-
3726
interface BindingPolicyApiData {
3827
name: string;
3928
status?: string;
@@ -50,6 +39,7 @@ export function useKubestellarData({
5039
skipFetch = false,
5140
}: UseKubestellarDataProps = {}) {
5241
const { t } = useTranslation();
42+
const { useWorkloads } = useWDSQueries();
5343
const [clusters, setClusters] = useState<ManagedCluster[]>([]);
5444
const [workloads, setWorkloads] = useState<Workload[]>([]);
5545
const [policies, setPolicies] = useState<BindingPolicyInfo[]>([]);
@@ -117,38 +107,58 @@ export function useKubestellarData({
117107
}
118108
}, [skipFetch, t]);
119109

120-
// Fetch workloads from Workload Description Space
121-
const fetchWorkloads = useCallback(async () => {
122-
if (skipFetch) return;
123-
try {
124-
setLoading(prev => ({ ...prev, workloads: true }));
125-
const response = await api.get('/api/wds/workloads');
110+
const {
111+
data: workloadsQueryData,
112+
isLoading: isLoadingWorkloads,
113+
isFetching: isFetchingWorkloads,
114+
error: workloadsQueryError,
115+
refetch: refetchWorkloads,
116+
} = useWorkloads({
117+
enabled: !skipFetch,
118+
});
119+
120+
useEffect(() => {
121+
if (skipFetch) {
122+
setLoading(prev => ({ ...prev, workloads: false }));
123+
return;
124+
}
125+
126+
setLoading(prev => ({
127+
...prev,
128+
workloads: isLoadingWorkloads || isFetchingWorkloads,
129+
}));
130+
}, [skipFetch, isLoadingWorkloads, isFetchingWorkloads]);
131+
132+
useEffect(() => {
133+
if (skipFetch) {
134+
setWorkloads([]);
135+
setError(prev => ({ ...prev, workloads: undefined }));
136+
return;
137+
}
138+
139+
if (workloadsQueryError) {
140+
console.error(t('kubestellarData.logging.errorFetchingWorkloads'), workloadsQueryError);
141+
setError(prev => ({ ...prev, workloads: t('kubestellarData.errors.failedFetchWorkloads') }));
142+
setWorkloads([]);
143+
return;
144+
}
126145

127-
// Map the response data to our Workload type
128-
const workloadData = response.data.map((workload: WorkloadApiData) => ({
146+
if (workloadsQueryData) {
147+
const workloadData: Workload[] = workloadsQueryData.map(workload => ({
129148
name: workload.name,
130-
type: workload.kind || t('kubestellarData.defaults.deployment'), // Default to Deployment if kind is not specified
149+
kind: workload.kind || t('kubestellarData.defaults.deployment'),
131150
namespace: workload.namespace || t('kubestellarData.defaults.defaultNamespace'),
132151
creationTime: workload.creationTime,
133-
labels: workload.labels || {}, // Using empty object as default
134-
// Additional details that might be useful
152+
labels: workload.labels || {},
135153
status: workload.status || t('kubestellarData.defaults.active'),
136-
replicas: workload.replicas || 1,
137-
selector: workload.selector || {},
138-
apiVersion: workload.apiVersion || 'apps/v1',
154+
replicas: workload.replicas,
139155
}));
140156

141157
console.log(t('kubestellarData.logging.processedWorkloads'), workloadData);
142158
setWorkloads(workloadData);
143159
setError(prev => ({ ...prev, workloads: undefined }));
144-
} catch (err) {
145-
console.error(t('kubestellarData.logging.errorFetchingWorkloads'), err);
146-
setError(prev => ({ ...prev, workloads: t('kubestellarData.errors.failedFetchWorkloads') }));
147-
setWorkloads([]);
148-
} finally {
149-
setLoading(prev => ({ ...prev, workloads: false }));
150160
}
151-
}, [skipFetch, t]);
161+
}, [skipFetch, workloadsQueryData, workloadsQueryError, t]);
152162

153163
// Fetch binding policies
154164
const fetchPolicies = useCallback(async () => {
@@ -193,13 +203,15 @@ export function useKubestellarData({
193203
// Function to refresh all data
194204
const refreshAllData = useCallback(() => {
195205
fetchClusters();
196-
fetchWorkloads();
206+
if (!skipFetch) {
207+
void refetchWorkloads();
208+
}
197209
fetchPolicies();
198210

199211
if (onDataLoaded) {
200212
onDataLoaded();
201213
}
202-
}, [fetchClusters, fetchWorkloads, fetchPolicies, onDataLoaded]);
214+
}, [fetchClusters, fetchPolicies, onDataLoaded, refetchWorkloads, skipFetch]);
203215

204216
// Fetch all data on initial load
205217
useEffect(() => {

0 commit comments

Comments
 (0)