@@ -14,20 +14,9 @@ interface ExecutionProgressBarProps {
1414const ExecutionProgressInterval = 800 ;
1515
1616const ExecutionProgressBar : React . FC < ExecutionProgressBarProps > = ( { execution, active } ) => {
17- const standardLabel = ( ) => {
18- if ( execution ) {
19- if ( isExecutionPending ( execution . status ) ) {
20- return `${ Strings . capitalize ( execution . status ) } ` ;
21- } else {
22- return `${ Strings . capitalize ( execution . status ) } after ${ formatter . durationShort ( execution . duration ) } ` ;
23- }
24- }
25- return 'Not executing' ;
26- } ;
27-
2817 const formatter = useFormatter ( ) ;
29- const [ progress , setProgress ] = useState < number | null > ( null ) ;
30- const [ label , setLabel ] = useState < string > ( standardLabel ) ;
18+ const [ percentage , setPercentage ] = useState < number | null > ( null ) ;
19+ const [ details , setDetails ] = useState < string | null > ( null ) ;
3120 const [ scriptStats , setScriptStats ] = useState < ScriptStats | null > ( null ) ;
3221
3322 useDeepCompareEffect ( ( ) => {
@@ -49,34 +38,44 @@ const ExecutionProgressBar: React.FC<ExecutionProgressBarProps> = ({ execution,
4938 fetchScriptStats ( ) ;
5039 } , [ execution ] ) ;
5140
52- const [ intervalCompleted , setIntervalCompleted ] = useState ( false ) ;
53-
5441 useInterval (
55- ( ) => {
56- if ( execution ) {
57- if ( isExecutionPending ( execution . status ) && scriptStats ) {
58- const { averageDuration } = scriptStats ;
59- if ( execution . startDate && averageDuration ) {
60- const elapsedTime = formatter . durationTillNow ( execution . startDate ) ! ;
61- const percentage = Math . min ( ( elapsedTime / averageDuration ) * 100 , 100 ) ;
42+ ( ) => {
43+ if ( execution ) {
44+ if ( isExecutionPending ( execution . status ) && scriptStats ) {
45+ const { averageDuration } = scriptStats ;
46+ if ( execution . startDate && averageDuration ) {
47+ const elapsedTime = formatter . durationTillNow ( execution . startDate ) ! ;
48+ const percentage = Math . min ( ( elapsedTime / averageDuration ) * 100 , 100 ) ;
6249
63- setProgress ( percentage ) ;
64- setLabel ( percentage >= 100 ? `${ Strings . capitalize ( execution . status ) } - Almost done` : `${ Strings . capitalize ( execution . status ) } - ${ formatter . durationShort ( averageDuration - elapsedTime ) } left` ) ;
50+ setPercentage ( percentage ) ;
51+ setDetails ( percentage >= 100 ? `Almost done` : `${ formatter . durationShort ( averageDuration - elapsedTime ) } left` ) ;
52+ } else {
53+ setPercentage ( null ) ;
54+ setDetails ( `Stay tuned` ) ;
55+ }
6556 } else {
66- setProgress ( null ) ;
67- setLabel ( ` ${ Strings . capitalize ( execution . status ) } - Stay tuned` ) ;
57+ setPercentage ( null ) ;
58+ setDetails ( null ) ;
6859 }
60+ }
61+ } ,
62+ execution && isExecutionPending ( execution . status ) && scriptStats ? ExecutionProgressInterval : null
63+ ) ;
64+
65+ const label = ( ( ) => {
66+ if ( execution ) {
67+ if ( isExecutionPending ( execution . status ) ) {
68+ if ( details ) {
69+ return `${ Strings . capitalize ( execution . status ) } - ${ details } ` ;
6970 } else {
70- setProgress ( null ) ;
71- setLabel ( standardLabel ) ;
72- if ( ! isExecutionPending ( execution . status ) ) {
73- setIntervalCompleted ( true ) ;
74- }
71+ return `${ Strings . capitalize ( execution . status ) } ` ;
7572 }
73+ } else {
74+ return `${ Strings . capitalize ( execution . status ) } after ${ formatter . durationShort ( execution . duration ) } ` ;
7675 }
77- } ,
78- ! intervalCompleted ? ExecutionProgressInterval : null ,
79- ) ;
76+ }
77+ return 'Not executing' ;
78+ } ) ( ) ;
8079
8180 const variant = ( ( ) : 'positive' | 'informative' | 'warning' | 'critical' | undefined => {
8281 switch ( execution ?. status ) {
@@ -97,8 +96,8 @@ const ExecutionProgressBar: React.FC<ExecutionProgressBarProps> = ({ execution,
9796 }
9897
9998 if ( active || isExecutionPending ( execution . status ) ) {
100- if ( progress !== null && progress < 100 ) {
101- return < ProgressBar minWidth = "size-3000" aria-label = { label } label = { label } value = { progress } /> ;
99+ if ( percentage !== null && percentage < 100 ) {
100+ return < ProgressBar minWidth = "size-3000" aria-label = { label } label = { label } value = { percentage } /> ;
102101 }
103102 return < ProgressBar minWidth = "size-3000" aria-label = { label } showValueLabel = { false } label = { label } isIndeterminate /> ;
104103 }
0 commit comments