Skip to content

Commit 6b05d01

Browse files
Merge pull request #102 from wttech/maven-central-repackage
Progress bar fix
2 parents 945adad + b8e02c3 commit 6b05d01

File tree

1 file changed

+35
-36
lines changed

1 file changed

+35
-36
lines changed

ui.frontend/src/components/ExecutionProgressBar.tsx

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,9 @@ interface ExecutionProgressBarProps {
1414
const ExecutionProgressInterval = 800;
1515

1616
const 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

Comments
 (0)