@@ -3,7 +3,13 @@ import * as React from 'react';
3
3
import { Helmet } from 'react-helmet' ;
4
4
import { Key , KeybindingContext } from 'react-keyhooks' ;
5
5
import { useHistory , useParams } from 'react-router-dom' ;
6
- import { GithubComArgoprojArgoRolloutsPkgApisRolloutsV1alpha1CanaryStep , RolloutReplicaSetInfo , RolloutRolloutInfo , RolloutServiceApi } from '../../../models/rollout/generated' ;
6
+ import {
7
+ GithubComArgoprojArgoRolloutsPkgApisRolloutsV1alpha1CanaryStep ,
8
+ GithubComArgoprojArgoRolloutsPkgApisRolloutsV1alpha1RolloutExperimentTemplate ,
9
+ RolloutReplicaSetInfo ,
10
+ RolloutRolloutInfo ,
11
+ RolloutServiceApi ,
12
+ } from '../../../models/rollout/generated' ;
7
13
import { RolloutInfo } from '../../../models/rollout/rollout' ;
8
14
import { NamespaceContext , RolloutAPIContext } from '../../shared/context/api' ;
9
15
import { useWatchRollout } from '../../shared/services/rollout' ;
@@ -12,6 +18,7 @@ import {RolloutStatus, StatusIcon} from '../status-icon/status-icon';
12
18
import { ContainersWidget } from './containers' ;
13
19
import { Revision , RevisionWidget } from './revision' ;
14
20
import './rollout.scss' ;
21
+ import { Fragment } from 'react' ;
15
22
16
23
const RolloutActions = React . lazy ( ( ) => import ( '../rollout-actions/rollout-actions' ) ) ;
17
24
export interface ImageInfo {
@@ -266,6 +273,7 @@ const parseDuration = (duration: string): string => {
266
273
} ;
267
274
268
275
const Step = ( props : { step : GithubComArgoprojArgoRolloutsPkgApisRolloutsV1alpha1CanaryStep ; complete ?: boolean ; current ?: boolean ; last ?: boolean } ) => {
276
+ const [ openedTemplate , setOpenedTemplate ] = React . useState ( '' ) ;
269
277
let icon : string ;
270
278
let content = '' ;
271
279
let unit = '' ;
@@ -297,10 +305,52 @@ const Step = (props: {step: GithubComArgoprojArgoRolloutsPkgApisRolloutsV1alpha1
297
305
return (
298
306
< React . Fragment >
299
307
< EffectDiv className = { `steps__step ${ props . complete ? 'steps__step--complete' : '' } ${ props . current ? 'steps__step--current' : '' } ` } >
300
- < i className = { `fa ${ icon } ` } /> { content }
301
- { unit }
308
+ < div className = { `steps__step-title ${ props . step . experiment ? 'steps__step-title--experiment' : '' } ` } >
309
+ < i className = { `fa ${ icon } ` } /> { content }
310
+ { unit }
311
+ </ div >
312
+ { props . step . experiment ?. templates && (
313
+ < div className = 'steps__step__content' >
314
+ { props . step . experiment ?. templates . map ( ( template ) => {
315
+ return < ExperimentWidget key = { template . name } template = { template } opened = { openedTemplate === template . name } onToggle = { setOpenedTemplate } /> ;
316
+ } ) }
317
+ </ div >
318
+ ) }
302
319
</ EffectDiv >
303
320
{ ! props . last && < ThemeDiv className = 'steps__connector' /> }
304
321
</ React . Fragment >
305
322
) ;
306
323
} ;
324
+
325
+ const ExperimentWidget = ( {
326
+ template,
327
+ opened,
328
+ onToggle,
329
+ } : {
330
+ template : GithubComArgoprojArgoRolloutsPkgApisRolloutsV1alpha1RolloutExperimentTemplate ;
331
+ opened : boolean ;
332
+ onToggle : ( name : string ) => void ;
333
+ } ) => {
334
+ const icon = opened ? 'fa-chevron-circle-up' : 'fa-chevron-circle-down' ;
335
+ return (
336
+ < EffectDiv className = 'steps__step__content-body' >
337
+ < ThemeDiv className = { `steps__step__content-header ${ opened ? 'steps__step__content-value' : '' } ` } >
338
+ { template . name }
339
+ < ThemeDiv onClick = { ( ) => onToggle ( opened ? '' : template . name ) } >
340
+ < i className = { `fa ${ icon } ` } />
341
+ </ ThemeDiv >
342
+ </ ThemeDiv >
343
+ { opened && (
344
+ < EffectDiv >
345
+ < div className = 'steps__step__content-title' > SPECREF</ div >
346
+ < div className = 'steps__step__content-value' > { template . specRef } </ div >
347
+ { template . weight && (
348
+ < Fragment >
349
+ < div className = 'steps__step__content-title' > WEIGHT</ div > < div className = 'steps__step__content-value' > { template . weight } </ div >
350
+ </ Fragment >
351
+ ) }
352
+ </ EffectDiv >
353
+ ) }
354
+ </ EffectDiv >
355
+ ) ;
356
+ } ;
0 commit comments