import React from 'react'; import Animate from 'rc-animate'; import ScrollNumber from './ScrollNumber'; import classNames from 'classnames'; import warning from '../_util/warning'; export interface BadgeProps { /** Number to show in badge */ count: number | string; /** Max count to show */ overflowCount?: number; /** whether to show red dot without number */ dot?: boolean; style?: React.CSSProperties; prefixCls?: string; className?: string; status?: 'success' | 'processing' | 'default' | 'error' | 'warning'; text?: string; } export default class Badge extends React.Component { static defaultProps = { prefixCls: 'ant-badge', count: null, dot: false, overflowCount: 99, }; static propTypes = { count: React.PropTypes.oneOfType([ React.PropTypes.string, React.PropTypes.number, ]), dot: React.PropTypes.bool, overflowCount: React.PropTypes.number, }; render() { const { count, prefixCls, overflowCount, className, style, children, dot, status, text, ...restProps } = this.props; const isDot = dot || status; let displayCount = count > overflowCount ? `${overflowCount}+` : count; // dot mode don't need count if (isDot) { displayCount = ''; } // null undefined "" "0" 0 const hidden = (!displayCount || displayCount === '0') && !isDot; const scrollNumberCls = classNames({ [`${prefixCls}-dot`]: isDot, [`${prefixCls}-count`]: !isDot, }); const badgeCls = classNames(className, prefixCls, { [`${prefixCls}-status`]: !!status, [`${prefixCls}-not-a-wrapper`]: !children, }); warning( !(children && status), '`Badge[children]` and `Badge[status]` cannot be used at the same time.' ); // if (!children && status) { const statusCls = classNames({ [`${prefixCls}-status-dot`]: !!status, [`${prefixCls}-status-${status}`]: true, }); return ( {text} ); } const scrollNumber = hidden ? null : ( ); const statusText = (hidden || !text) ? null : ( {text} ); return ( {children} {scrollNumber} {statusText} ); } }