@@ -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