/* eslint-disable no-undef */ import React, { PureComponent } from 'react'; import { Chart } from '@antv/g2'; import Debounce from 'lodash-decorators/debounce'; import Bind from 'lodash-decorators/bind'; import equal from '../equal'; class ColumnarGroup extends PureComponent { componentDidMount() { this.renderChart(this.props.data); window.addEventListener('resize', this.resize); } componentWillReceiveProps(nextProps) { if (!equal(this.props, nextProps)) { this.renderChart(nextProps.data); } } componentWillUnmount() { window.removeEventListener('resize', this.resize); if (this.chart) { this.chart.destroy(); } this.resize.cancel(); } @Bind() @Debounce(200) resize() { if (!this.node) { return; } this.renderChart([]); } handleRef = (n) => { this.node = n; }; renderChart(data) { const { xUnit = '', yUnit = '', height } = this.props; if (!data || (data && data.length < 1)) return; // clean if (this.chart) { this.chart.destroy(); } this.node.innerHTML = ''; const chart = new Chart({ container: this.node, autoFit: true, /* 图标自适应s */ height, padding: 'auto', }); chart.axis('x', { label: { formatter: (val) => { return `${val}${xUnit}`; }, }, }); chart.axis('y', { label: { formatter: (val) => { return `${val}${yUnit}`; }, }, }); chart.data(data); chart .interval() .position('x*y') .color('type') .adjust([{ type: 'dodge', marginRatio: 1 / 32, }]) .tooltip('x*y*type', (name, value, type) => { return { title: `${name}${xUnit}`, name: type, value: `${value}${yUnit}`, }; }); chart.render(); this.chart = chart; } render() { return (
); } } export default ColumnarGroup;