import React from 'react'; import { Card } from 'antd'; import classNames from 'classnames'; import { CardProps } from 'antd/lib/card'; import styles from './index.less'; type totalType = () => React.ReactNode; const renderTotal = (total?: number | totalType | React.ReactNode) => { if (!total) { return; } let totalDom; switch (typeof total) { case 'undefined': totalDom = null; break; case 'function': totalDom =
{total()}
; break; default: totalDom =
{total}
; } return totalDom; }; export interface IChartCardProps extends CardProps { title: React.ReactNode; action?: React.ReactNode; total?: React.ReactNode | number | (() => React.ReactNode | number); footer?: React.ReactNode; contentHeight?: number; avatar?: React.ReactNode; style?: React.CSSProperties; } class ChartCard extends React.Component { renderContent = () => { const { contentHeight, title, avatar, action, total, footer, children, loading } = this.props; if (loading) { return false; } return (
{avatar}
{title} {action}
{renderTotal(total)}
{children && (
{children}
)} {footer && (
{footer}
)}
); }; render() { const { loading = false, contentHeight, title, avatar, action, total, footer, children, ...rest } = this.props; return ( {this.renderContent()} ); } } export default ChartCard;