UNPKG

8.62 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _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
9exports.default = createPlotlyRenderers;
10
11var _react = require('react');
12
13var _react2 = _interopRequireDefault(_react);
14
15var _Utilities = require('./Utilities');
16
17function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
19function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
20
21function _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
23function _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
25function 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 /* eslint-disable no-magic-numbers */
110 width: window.innerWidth / 1.5,
111 height: window.innerHeight / 1.4 - 50,
112 /* eslint-enable no-magic-numbers */
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
139function 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 /* eslint-disable no-magic-numbers */
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 /* eslint-enable no-magic-numbers */
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
202function 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}
213module.exports = exports['default'];
214//# sourceMappingURL=PlotlyRenderers.js.map
\No newline at end of file