@@ -2,6 +2,7 @@ import { useState, useEffect, useCallback } from 'react';
22import { api } from '../lib/api' ;
33import { BindingPolicyInfo , ManagedCluster , Workload } from '../types/bindingPolicy' ;
44import { useTranslation } from 'react-i18next' ;
5+ import { useWDSQueries } from './queries/useWDSQueries' ;
56
67interface 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-
3726interface 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