import React from 'react';
import classNames from 'classnames';
import warning from '../_utils/warning';
import { BaseProps } from '../_utils/props';
export interface BadgeProps extends BaseProps {
count?: React.ReactNode | number;
color?: string;
max?: number;
dot?: boolean;
processing?: boolean;
/** when value is equal to zero, the badge will be hidden by default */
showZero?: boolean;
text?: string | undefined;
title?: string;
badgeStyle?: React.CSSProperties;
children?: React.ReactNode;
}
const Badge = (props: BadgeProps) => {
const {
count = 0,
prefixCls = 'ty-badge',
color = '#f2453d',
max = 99,
dot = false,
processing = false,
showZero = false,
text = undefined,
title,
className,
style,
badgeStyle,
children,
} = props;
const cls = classNames(prefixCls, className, { [`${prefixCls}_no-wrap`]: !children });
const dotCls = classNames(`${prefixCls}__dot`, { [`${prefixCls}__dot_wave`]: processing });
warning(!dot && processing, 'only dot badge has the processing effect');
const _renderCount = () => {
const isZero = typeof count === 'number' && count === 0;
if (isZero && !showZero) {
return null;
}
if (typeof count === 'number') {
return (
{text || (count > max ? `${max}+` : count)}
);
} else {
return {count};
}
};
return (
{children}
{dot ? (
) : (
_renderCount()
)}
);
};
export default Badge;