From 8239c68cf323e4bb20007d2b456336becead273d Mon Sep 17 00:00:00 2001
From: JoramWilander <jwawilander@gmail.com>
Date: Thu, 25 Feb 2016 12:32:46 -0500
Subject: Refactor and modularize analytics on the client

---
 web/react/components/analytics/doughnut_chart.jsx | 77 +++++++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 web/react/components/analytics/doughnut_chart.jsx

(limited to 'web/react/components/analytics/doughnut_chart.jsx')

diff --git a/web/react/components/analytics/doughnut_chart.jsx b/web/react/components/analytics/doughnut_chart.jsx
new file mode 100644
index 000000000..00bb66f0a
--- /dev/null
+++ b/web/react/components/analytics/doughnut_chart.jsx
@@ -0,0 +1,77 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import {FormattedMessage} from 'mm-intl';
+
+export default class DoughnutChart extends React.Component {
+    constructor(props) {
+        super(props);
+
+        this.initChart = this.initChart.bind(this);
+        this.chart = null;
+    }
+
+    componentDidMount() {
+        this.initChart(this.props);
+    }
+
+    componentWillReceiveProps(nextProps) {
+        if (this.chart) {
+            this.chart.destroy();
+            this.initChart(nextProps);
+        }
+    }
+
+    componentWillUnmount() {
+        if (this.chart) {
+            this.chart.destroy();
+        }
+    }
+
+    initChart(props) {
+        var el = ReactDOM.findDOMNode(this.refs.canvas);
+        var ctx = el.getContext('2d');
+        this.chart = new Chart(ctx).Doughnut(props.data, props.options || {}); //eslint-disable-line new-cap
+    }
+
+    render() {
+        let content;
+        if (this.props.data == null) {
+            content = (
+                <FormattedMessage
+                    id='analytics.chart.loading'
+                    defaultMessage='Loading...'
+                />
+            );
+        } else {
+            content = (
+                <canvas
+                    ref='canvas'
+                    width={this.props.width}
+                    height={this.props.height}
+                />
+            );
+        }
+
+        return (
+            <div className='col-sm-6'>
+                <div className='total-count'>
+                    <div className='title'>
+                        {this.props.title}
+                    </div>
+                    <div className='content'>
+                        {content}
+                    </div>
+                </div>
+            </div>
+        );
+    }
+}
+
+DoughnutChart.propTypes = {
+    title: React.PropTypes.node,
+    width: React.PropTypes.string,
+    height: React.PropTypes.string,
+    data: React.PropTypes.array,
+    options: React.PropTypes.object
+};
-- 
cgit v1.2.3-1-g7c22

