summaryrefslogtreecommitdiffstats
path: root/webapp/components/analytics/line_chart.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/components/analytics/line_chart.jsx')
-rw-r--r--webapp/components/analytics/line_chart.jsx29
1 files changed, 25 insertions, 4 deletions
diff --git a/webapp/components/analytics/line_chart.jsx b/webapp/components/analytics/line_chart.jsx
index aa603d819..5ae80f9e9 100644
--- a/webapp/components/analytics/line_chart.jsx
+++ b/webapp/components/analytics/line_chart.jsx
@@ -21,14 +21,33 @@ export default class LineChart extends React.Component {
this.initChart();
}
+ componentWillUpdate(nextProps) {
+ const willHaveData = nextProps.data && nextProps.data.labels.length > 0;
+ const hasChart = Boolean(this.chart);
+
+ if (!willHaveData && hasChart) {
+ // Clean up the rendered chart before we render and destroy its context
+ this.chart.destroy();
+ this.chart = null;
+ }
+ }
+
componentDidUpdate(prevProps) {
- if (!Utils.areObjectsEqual(prevProps.data, this.props.data) || !Utils.areObjectsEqual(prevProps.options, this.props.options)) {
- this.initChart(true);
+ if (Utils.areObjectsEqual(prevProps.data, this.props.data) && Utils.areObjectsEqual(prevProps.options, this.props.options)) {
+ return;
+ }
+
+ const hasData = this.props.data && this.props.data.labels.length > 0;
+ const hasChart = Boolean(this.chart);
+
+ if (hasData) {
+ // Update the rendered chart or initialize it as necessary
+ this.initChart(hasChart);
}
}
componentWillUnmount() {
- if (this.chart && this.refs.canvas) {
+ if (this.chart) {
this.chart.destroy();
}
}
@@ -37,9 +56,11 @@ export default class LineChart extends React.Component {
if (!this.refs.canvas) {
return;
}
+
var el = ReactDOM.findDOMNode(this.refs.canvas);
var ctx = el.getContext('2d');
- this.chart = new Chart(ctx, {type: 'line', data: this.props.data, options: this.props.options || {}}); //eslint-disable-line new-cap
+ this.chart = new Chart(ctx, {type: 'line', data: this.props.data, options: this.props.options || {}}); // eslint-disable-line new-cap
+
if (update) {
this.chart.update();
}