@@ -217,8 +217,11 @@ interface IState {
217
217
const MicroServiceOverview = ( ) => {
218
218
const [ data , dataLoading ] = getServices . useState ( ) ;
219
219
const tenantId = routeInfoStore . useStore ( ( s ) => s . params . terminusKey ) ;
220
- const overviewList = getAnalyzerOverview . useData ( ) ;
220
+ const [ overviewList , setOverviewList ] = React . useState < MSP_SERVICES . SERVICE_LIST_CHART [ ] > ( [ ] ) ;
221
221
const serViceCount = getServiceCount . useData ( ) ;
222
+ const charts = React . useRef < {
223
+ [ k : string ] : { status : 'null' | 'pending' | 'success' | 'error' ; data : MSP_SERVICES . SERVICE_LIST_CHART [ ] } ;
224
+ } > ( { } ) ;
222
225
const [ { pagination, searchValue, serviceStatus, startTime, endTime } , updater , update ] = useUpdate < IState > ( {
223
226
searchValue : '' ,
224
227
startTime : moment ( ) . subtract ( 1 , 'h' ) . valueOf ( ) ,
@@ -248,14 +251,16 @@ const MicroServiceOverview = () => {
248
251
} , [ getServicesList ] ) ;
249
252
250
253
React . useEffect ( ( ) => {
251
- const serviceIdList = data ?. list . map ( ( item ) => item ?. id ) ;
252
- if ( serviceIdList ?. length ) {
253
- getAnalyzerOverview . fetch ( {
254
- view : 'service_overview' ,
255
- tenantId,
256
- serviceIds : serviceIdList ,
257
- } ) ;
258
- }
254
+ setOverviewList ( [ ] ) ;
255
+ charts . current = data ?. list . reduce ( ( prev , next ) => {
256
+ return {
257
+ ...prev ,
258
+ [ next . id ] : {
259
+ status : 'null' ,
260
+ data : [ ] ,
261
+ } ,
262
+ } ;
263
+ } , { } ) ;
259
264
} , [ data ] ) ;
260
265
261
266
const onPageChange = ( current : number , pageSize ?: number ) => {
@@ -280,6 +285,35 @@ const MicroServiceOverview = () => {
280
285
getServicesList ( ) ;
281
286
getServiceCount ( { tenantId } ) ;
282
287
} , [ getServicesList ] ) ;
288
+
289
+ const handleViewChange = React . useCallback (
290
+ ( { id } : IListItem , flag ?: boolean ) => {
291
+ if ( flag && [ 'null' , 'error' ] . includes ( charts . current [ id ] . status ) ) {
292
+ charts . current [ id ] . status = 'pending' ;
293
+ getAnalyzerOverview
294
+ . fetch ( {
295
+ startTime,
296
+ endTime,
297
+ serviceIds : [ id ] ,
298
+ tenantId,
299
+ view : 'service_overview' ,
300
+ } )
301
+ . then ( ( res ) => {
302
+ charts . current [ id ] = {
303
+ status : res . success ? 'success' : 'error' ,
304
+ data : res . data ?. list || [ ] ,
305
+ } ;
306
+ const list = Object . keys ( charts . current )
307
+ . filter ( ( serviceId ) => charts . current [ serviceId ] . status === 'success' )
308
+ . map ( ( serviceId ) => {
309
+ return charts . current [ serviceId ] . data [ 0 ] ;
310
+ } ) ;
311
+ setOverviewList ( list ) ;
312
+ } ) ;
313
+ }
314
+ } ,
315
+ [ tenantId , endTime , startTime ] ,
316
+ ) ;
283
317
284
318
const columns : Array < CardColumnsProps < IListItem > > = [
285
319
{
@@ -389,7 +423,7 @@ const MicroServiceOverview = () => {
389
423
390
424
const list = React . useMemo ( ( ) => {
391
425
return ( data ?. list ?? [ ] ) . map ( ( item ) => {
392
- const views = overviewList ?. list . find ( ( t ) => t . serviceId === item . id ) ?. views ?? [ ] ;
426
+ const views = overviewList . find ( ( t ) => t . serviceId === item . id ) ?. views ?? [ ] ;
393
427
return {
394
428
...item ,
395
429
aggregateMetric : {
@@ -400,7 +434,7 @@ const MicroServiceOverview = () => {
400
434
views,
401
435
} ;
402
436
} ) ;
403
- } , [ data ?. list , overviewList ?. list ] ) ;
437
+ } , [ data ?. list , overviewList ] ) ;
404
438
405
439
const tabsOptions = React . useMemo (
406
440
( ) =>
@@ -459,6 +493,7 @@ const MicroServiceOverview = () => {
459
493
size = "small"
460
494
columns = { columns }
461
495
dataSource = { list }
496
+ onViewChange = { handleViewChange }
462
497
rowClick = { ( { id, name } ) => {
463
498
listDetail ( id , name ) ;
464
499
} }
0 commit comments