Skip to content

Commit eb20e97

Browse files
feat: fix percentage bar showing 100 even though it should be 0 (#316)
Co-authored-by: Andreas Kienle <andreas.kienle@sap.com>
1 parent 21bd296 commit eb20e97

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

src/components/HintsCardsRow/MultiPercentageBar/MultiPercentageBar.module.css

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,26 @@
5151
.labelGroup {
5252
display: flex;
5353
align-items: center;
54-
gap: 6px;
54+
gap: 8px;
55+
justify-content: space-between;
56+
width: 100%;
5557
}
5658

57-
.label,
5859
.percentage {
5960
font-size: var(--label-font-size);
60-
font-weight: 400;
61+
font-weight: 600;
6162
color: var(--sapTextColor, #374151);
6263
transition: color 0.3s ease, font-weight 0.3s ease;
64+
text-align: right;
65+
white-space: nowrap;
66+
}
67+
68+
.label {
69+
font-size: var(--label-font-size);
70+
font-weight: 400;
71+
color: var(--sapTextColor, #6b7280);
72+
transition: color 0.3s ease, font-weight 0.3s ease;
73+
flex: 1;
6374
}
6475

6576
.label.healthy,

src/components/HintsCardsRow/MultiPercentageBar/MultiPercentageBar.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,25 @@ export const MultiPercentageBar: React.FC<MultiPercentageBarProps> = ({
4444
style,
4545
animationDuration = 400, // Match CSS default
4646
}) => {
47-
// Memoize filtered segments
47+
// Memoize filtered segments for rendering only
4848
const filteredSegments = useMemo(() => {
49-
return showOnlyNonZero ? segments.filter((segment) => segment.percentage > 0) : segments;
49+
if (showOnlyNonZero) {
50+
const nonZeroSegments = segments.filter((segment) => segment.percentage > 0);
51+
if (nonZeroSegments.length === 0 && segments.length > 0) {
52+
return segments;
53+
}
54+
return nonZeroSegments;
55+
}
56+
return segments;
5057
}, [segments, showOnlyNonZero]);
5158

5259
if (filteredSegments.length === 0) {
5360
return null;
5461
}
5562

56-
const primaryPercentage = filteredSegments[0]?.percentage || 0;
57-
const displayLabel = label || 'Healthy';
63+
const primarySegment = segments[0];
64+
const primaryPercentage = primarySegment?.percentage || 0;
65+
const displayLabel = label || primarySegment?.label || 'Healthy';
5866
const allHealthy = isHealthy !== undefined ? isHealthy : primaryPercentage === 100;
5967

6068
return (
@@ -78,10 +86,10 @@ export const MultiPercentageBar: React.FC<MultiPercentageBarProps> = ({
7886
{showLabels && (
7987
<div className={styles.labelContainer}>
8088
<div className={styles.labelGroup}>
89+
<span className={`${styles.label} ${allHealthy ? styles.healthy : ''}`}>{displayLabel}</span>
8190
{showPercentage && (
8291
<span className={`${styles.percentage} ${allHealthy ? styles.healthy : ''}`}>{primaryPercentage}%</span>
8392
)}
84-
<span className={`${styles.label} ${allHealthy ? styles.healthy : ''}`}>{displayLabel}</span>
8593
</div>
8694
</div>
8795
)}

0 commit comments

Comments
 (0)