|
|
|
@ -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 ( |
|
|
|
<div className={pieClassName} style={style}> |
|
|
|
<div ref={this.handleRoot} className={pieClassName} style={style}> |
|
|
|
<ReactFitText maxFontSize={25}> |
|
|
|
<div className={styles.chart}> |
|
|
|
<div ref={this.handleRef} style={{ fontSize: 0 }} /> |
|
|
|
|