LineChart.js
1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import React, { Component } from 'react';
import $ from 'jquery';
import Rickshaw from 'rickshaw';
export default class LineChart extends Component {
state = {
graph: null,
};
componentDidMount() {
this.createChart();
window.addEventListener('resize', this.onResize);
}
componentWillUnmount() {
window.removeEventListener('resize', this.onResize);
}
onResize = () => {
const width = $(this.rickshawChart).closest('.widget-body')[0].clientWidth - 30;
this.state.graph.configure({ width });
this.state.graph.render();
}
createChart() {
const seriesData = [[], []];
const random = new Rickshaw.Fixtures.RandomData(30);
for (let i = 0; i < 30; i += 1) {
random.addData(seriesData);
}
// eslint-disable-next-line
this.state.graph = new Rickshaw.Graph({
element: this.rickshawChart,
height: 200,
renderer: 'line',
min: 45,
series: [
{
color: '#b7b3ff',
data: seriesData[0],
name: 'Series 1',
}, {
color: '#e2e1ff',
data: seriesData[1],
name: 'Series 2',
},
],
});
const hoverDetail = new Rickshaw.Graph.HoverDetail({ graph: this.state.graph });
hoverDetail.show();
new Rickshaw.Graph.Axis.Y({ // eslint-disable-line
graph: this.state.graph,
orientation: 'left',
tickFormat: Rickshaw.Fixtures.Number.formatKMBT,
element: this.axis,
});
this.state.graph.render();
}
render() {
return (
<div>
<div ref={(r) => { this.rickshawChart = r; }} style={{ left: '30px', maxWidth: '90%' }} />
<div ref={(r) => { this.axis = r; }} style={{ position: 'absolute', width: '30px', height: '300px', top: '102px' }} />
</div>
);
}
}