diff --git a/src/components/Charts/Pie/index.js b/src/components/Charts/Pie/index.js index 0952d0203d0a607e1954a1e7674394c9b8e22386..658e7939719bf1fbb15506db619be643e76b38d9 100644 --- a/src/components/Charts/Pie/index.js +++ b/src/components/Charts/Pie/index.js @@ -3,6 +3,7 @@ import G2 from 'g2'; import { Divider } from 'antd'; import classNames from 'classnames'; import ReactFitText from 'react-fittext'; +import Debounce from 'lodash-decorators/debounce'; import equal from '../equal'; import styles from './index.less'; @@ -10,10 +11,13 @@ import styles from './index.less'; class Pie extends Component { state = { legendData: [], + legendBlock: true, }; componentDidMount() { - this.renderChart(this.props.data); + this.renderChart(); + this.resize(); + window.addEventListener('resize', this.resize); } componentWillReceiveProps(nextProps) { @@ -23,15 +27,42 @@ class Pie extends Component { } componentWillUnmount() { + window.removeEventListener('resize', this.resize); if (this.chart) { this.chart.destroy(); } } + @Debounce(200) + resize = () => { + const { hasLegend } = this.props; + if (!hasLegend || !this.node) { + return; + } + // antd xs size + if (this.root.parentNode.clientWidth <= 480) { + if (!this.state.legendBlock) { + this.setState({ + legendBlock: true, + }); + this.renderChart(); + } + } else if (this.state.legendBlock) { + this.setState({ + legendBlock: false, + }); + this.renderChart(); + } + } + handleRef = (n) => { this.node = n; } + handleRoot = (n) => { + this.root = n; + } + handleLegendClick = (item, i) => { const newItem = item; newItem.checked = !newItem.checked; @@ -50,7 +81,9 @@ class Pie extends Component { }); } - renderChart(data) { + renderChart(d) { + let data = d || this.props.data; + const { height = 0, hasLegend, @@ -167,13 +200,14 @@ class Pie extends Component { render() { const { valueFormat, subTitle, total, hasLegend, className, style } = this.props; - const { legendData } = this.state; + const { legendData, legendBlock } = this.state; const pieClassName = classNames(styles.pie, className, { [styles.hasLegend]: !!hasLegend, + [styles.legendBlock]: legendBlock, }); return ( -