1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
8 |
|
9 | exports.default = createPlotlyRenderers;
|
10 |
|
11 | var _react = require('react');
|
12 |
|
13 | var _react2 = _interopRequireDefault(_react);
|
14 |
|
15 | var _Utilities = require('./Utilities');
|
16 |
|
17 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
18 |
|
19 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
20 |
|
21 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
22 |
|
23 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
24 |
|
25 | function makeRenderer(PlotlyComponent) {
|
26 | var traceOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
27 | var layoutOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
28 | var transpose = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
29 |
|
30 | var Renderer = function (_React$PureComponent) {
|
31 | _inherits(Renderer, _React$PureComponent);
|
32 |
|
33 | function Renderer() {
|
34 | _classCallCheck(this, Renderer);
|
35 |
|
36 | return _possibleConstructorReturn(this, (Renderer.__proto__ || Object.getPrototypeOf(Renderer)).apply(this, arguments));
|
37 | }
|
38 |
|
39 | _createClass(Renderer, [{
|
40 | key: 'render',
|
41 | value: function render() {
|
42 | var pivotData = new _Utilities.PivotData(this.props);
|
43 | var rowKeys = pivotData.getRowKeys();
|
44 | var colKeys = pivotData.getColKeys();
|
45 | var traceKeys = transpose ? colKeys : rowKeys;
|
46 | if (traceKeys.length === 0) {
|
47 | traceKeys.push([]);
|
48 | }
|
49 | var datumKeys = transpose ? rowKeys : colKeys;
|
50 | if (datumKeys.length === 0) {
|
51 | datumKeys.push([]);
|
52 | }
|
53 |
|
54 | var fullAggName = this.props.aggregatorName;
|
55 | var numInputs = this.props.aggregators[fullAggName]([])().numInputs || 0;
|
56 | if (numInputs !== 0) {
|
57 | fullAggName += ' of ' + this.props.vals.slice(0, numInputs).join(', ');
|
58 | }
|
59 |
|
60 | var data = traceKeys.map(function (traceKey) {
|
61 | var values = [];
|
62 | var labels = [];
|
63 | var _iteratorNormalCompletion = true;
|
64 | var _didIteratorError = false;
|
65 | var _iteratorError = undefined;
|
66 |
|
67 | try {
|
68 | for (var _iterator = datumKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
69 | var datumKey = _step.value;
|
70 |
|
71 | var val = parseFloat(pivotData.getAggregator(transpose ? datumKey : traceKey, transpose ? traceKey : datumKey).value());
|
72 | values.push(isFinite(val) ? val : null);
|
73 | labels.push(datumKey.join('-') || ' ');
|
74 | }
|
75 | } catch (err) {
|
76 | _didIteratorError = true;
|
77 | _iteratorError = err;
|
78 | } finally {
|
79 | try {
|
80 | if (!_iteratorNormalCompletion && _iterator.return) {
|
81 | _iterator.return();
|
82 | }
|
83 | } finally {
|
84 | if (_didIteratorError) {
|
85 | throw _iteratorError;
|
86 | }
|
87 | }
|
88 | }
|
89 |
|
90 | var trace = { name: traceKey.join('-') || fullAggName };
|
91 | trace.x = transpose ? values : labels;
|
92 | trace.y = transpose ? labels : values;
|
93 | return Object.assign(trace, traceOptions);
|
94 | });
|
95 |
|
96 | var titleText = fullAggName;
|
97 | var hAxisTitle = transpose ? this.props.rows.join('-') : this.props.cols.join('-');
|
98 | var groupByTitle = transpose ? this.props.cols.join('-') : this.props.rows.join('-');
|
99 | if (hAxisTitle !== '') {
|
100 | titleText += ' vs ' + hAxisTitle;
|
101 | }
|
102 | if (groupByTitle !== '') {
|
103 | titleText += ' by ' + groupByTitle;
|
104 | }
|
105 |
|
106 | var layout = {
|
107 | title: titleText,
|
108 | hovermode: 'closest',
|
109 |
|
110 | width: window.innerWidth / 1.5,
|
111 | height: window.innerHeight / 1.4 - 50,
|
112 |
|
113 | xaxis: {
|
114 | title: transpose ? fullAggName : null,
|
115 | automargin: true
|
116 | },
|
117 | yaxis: {
|
118 | title: transpose ? null : fullAggName,
|
119 | automargin: true
|
120 | }
|
121 | };
|
122 |
|
123 | return _react2.default.createElement(PlotlyComponent, {
|
124 | data: data,
|
125 | layout: Object.assign(layout, layoutOptions, this.props.plotlyOptions)
|
126 | });
|
127 | }
|
128 | }]);
|
129 |
|
130 | return Renderer;
|
131 | }(_react2.default.PureComponent);
|
132 |
|
133 | Renderer.defaultProps = _Utilities.PivotData.defaultProps;
|
134 | Renderer.propTypes = _Utilities.PivotData.propTypes;
|
135 |
|
136 | return Renderer;
|
137 | }
|
138 |
|
139 | function makeScatterRenderer(PlotlyComponent) {
|
140 | var Renderer = function (_React$PureComponent2) {
|
141 | _inherits(Renderer, _React$PureComponent2);
|
142 |
|
143 | function Renderer() {
|
144 | _classCallCheck(this, Renderer);
|
145 |
|
146 | return _possibleConstructorReturn(this, (Renderer.__proto__ || Object.getPrototypeOf(Renderer)).apply(this, arguments));
|
147 | }
|
148 |
|
149 | _createClass(Renderer, [{
|
150 | key: 'render',
|
151 | value: function render() {
|
152 | var pivotData = new _Utilities.PivotData(this.props);
|
153 | var rowKeys = pivotData.getRowKeys();
|
154 | var colKeys = pivotData.getColKeys();
|
155 | if (rowKeys.length === 0) {
|
156 | rowKeys.push([]);
|
157 | }
|
158 | if (colKeys.length === 0) {
|
159 | colKeys.push([]);
|
160 | }
|
161 |
|
162 | var data = { x: [], y: [], text: [], type: 'scatter', mode: 'markers' };
|
163 |
|
164 | rowKeys.map(function (rowKey) {
|
165 | colKeys.map(function (colKey) {
|
166 | var v = pivotData.getAggregator(rowKey, colKey).value();
|
167 | if (v !== null) {
|
168 | data.x.push(colKey.join('-'));
|
169 | data.y.push(rowKey.join('-'));
|
170 | data.text.push(v);
|
171 | }
|
172 | });
|
173 | });
|
174 |
|
175 | var layout = {
|
176 | title: this.props.rows.join('-') + ' vs ' + this.props.cols.join('-'),
|
177 | hovermode: 'closest',
|
178 |
|
179 | xaxis: { title: this.props.cols.join('-'), domain: [0.1, 1.0] },
|
180 | yaxis: { title: this.props.rows.join('-') },
|
181 | width: window.innerWidth / 1.5,
|
182 | height: window.innerHeight / 1.4 - 50
|
183 |
|
184 | };
|
185 |
|
186 | return _react2.default.createElement(PlotlyComponent, {
|
187 | data: [data],
|
188 | layout: Object.assign(layout, this.props.plotlyOptions)
|
189 | });
|
190 | }
|
191 | }]);
|
192 |
|
193 | return Renderer;
|
194 | }(_react2.default.PureComponent);
|
195 |
|
196 | Renderer.defaultProps = _Utilities.PivotData.defaultProps;
|
197 | Renderer.propTypes = _Utilities.PivotData.propTypes;
|
198 |
|
199 | return Renderer;
|
200 | }
|
201 |
|
202 | function createPlotlyRenderers(PlotlyComponent) {
|
203 | return {
|
204 | 'Grouped Column Chart': makeRenderer(PlotlyComponent, { type: 'bar' }, { barmode: 'group' }),
|
205 | 'Stacked Column Chart': makeRenderer(PlotlyComponent, { type: 'bar' }, { barmode: 'stack' }),
|
206 | 'Grouped Bar Chart': makeRenderer(PlotlyComponent, { type: 'bar', orientation: 'h' }, { barmode: 'group' }, true),
|
207 | 'Stacked Bar Chart': makeRenderer(PlotlyComponent, { type: 'bar', orientation: 'h' }, { barmode: 'stack' }, true),
|
208 | 'Line Chart': makeRenderer(PlotlyComponent),
|
209 | 'Dot Chart': makeRenderer(PlotlyComponent, { mode: 'markers' }, {}, true),
|
210 | 'Scatter Chart': makeScatterRenderer(PlotlyComponent)
|
211 | };
|
212 | }
|
213 | module.exports = exports['default'];
|
214 |
|
\ | No newline at end of file |