@cubejs-client/react 0.30.46 → 0.30.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,437 +1,256 @@
1
- import 'core-js/modules/es.reflect.construct.js';
2
- import 'core-js/modules/es.object.keys.js';
3
- import 'core-js/modules/es.symbol.js';
4
- import 'core-js/modules/es.array.filter.js';
5
- import 'core-js/modules/es.object.get-own-property-descriptor.js';
6
- import 'core-js/modules/es.array.for-each.js';
7
- import 'core-js/modules/web.dom-collections.for-each.js';
8
- import 'core-js/modules/es.object.get-own-property-descriptors.js';
9
- import 'core-js/modules/es.object.define-properties.js';
10
- import 'core-js/modules/es.object.define-property.js';
11
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
12
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
13
- import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
14
- import _createClass from '@babel/runtime/helpers/createClass';
15
- import _inherits from '@babel/runtime/helpers/inherits';
16
- import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
17
- import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
18
- import 'core-js/modules/es.array.iterator.js';
19
- import 'core-js/modules/es.object.to-string.js';
20
- import 'core-js/modules/es.promise.js';
21
- import 'core-js/modules/es.string.iterator.js';
22
- import 'core-js/modules/web.dom-collections.iterator.js';
23
- import 'core-js/modules/es.array.map.js';
24
- import 'core-js/modules/es.date.to-string.js';
25
- import 'core-js/modules/es.regexp.to-string.js';
26
1
  import React, { createContext, useRef, useEffect, useContext, useState } from 'react';
27
2
  import { equals, toPairs, fromPairs, uniqBy, prop, indexBy, uniq, pick, clone } from 'ramda';
28
- import { isQueryPresent, getQueryMembers, flattenFilters, moveItemInArray, movePivotItem, removeEmptyQueryFields, ResultSet, defaultOrder, validateQuery, defaultHeuristics, areQueriesEqual } from '@cubejs-client/core';
29
- import _typeof from '@babel/runtime/helpers/typeof';
30
- import 'core-js/modules/es.regexp.exec.js';
31
- import 'core-js/modules/es.string.split.js';
32
- import 'core-js/modules/es.string.replace.js';
33
- import 'core-js/modules/es.array.concat.js';
34
- import 'core-js/modules/es.object.from-entries.js';
35
- import 'core-js/modules/es.object.entries.js';
36
- import 'core-js/modules/es.array.is-array.js';
37
- import Anser from 'anser';
38
- import { encode } from 'html-entities';
39
- import _extends from '@babel/runtime/helpers/extends';
40
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
41
- import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
42
- import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
43
- import _assertThisInitialized from '@babel/runtime/helpers/assertThisInitialized';
44
- import _regeneratorRuntime from '@babel/runtime/regenerator';
45
- import 'core-js/modules/es.function.name.js';
46
- import 'core-js/modules/es.array.splice.js';
47
- import 'core-js/modules/es.array.sort.js';
48
- import 'core-js/modules/es.array.find.js';
49
- import 'core-js/modules/es.array.reduce.js';
3
+ import { isQueryPresent, getQueryMembers, flattenFilters, moveItemInArray, movePivotItem, removeEmptyQueryFields, defaultOrder, ResultSet, validateQuery, defaultHeuristics, areQueriesEqual } from '@cubejs-client/core';
50
4
 
51
5
  var CubeContext = /*#__PURE__*/createContext(null);
52
6
 
53
- var colors = {
54
- reset: 'orange',
55
- black: 'black',
56
- red: 'red',
57
- green: 'green',
58
- yellow: 'orange',
59
- blue: 'blue',
60
- magenta: 'magenta',
61
- cyan: 'cyan',
62
- gray: 'gray',
63
- lightgrey: 'lightgrey',
64
- darkgrey: 'darkgrey'
65
- };
66
- var anserMap = {
67
- 'ansi-bright-black': 'black',
68
- 'ansi-bright-yellow': 'yellow',
69
- 'ansi-yellow': 'yellow',
70
- 'ansi-bright-green': 'green',
71
- 'ansi-green': 'green',
72
- 'ansi-bright-cyan': 'cyan',
73
- 'ansi-cyan': 'cyan',
74
- 'ansi-bright-red': 'red',
75
- 'ansi-red': 'red',
76
- 'ansi-bright-magenta': 'magenta',
77
- 'ansi-magenta': 'magenta',
78
- 'ansi-white': 'darkgrey'
79
- };
80
- function generateAnsiHTML(txt) {
81
- var arr = new Anser().ansiToJson(encode(txt), {
82
- use_classes: true
83
- });
84
- var result = '';
85
- var open = false;
86
-
87
- for (var index = 0; index < arr.length; ++index) {
88
- var c = arr[index];
89
- var content = c.content;
90
- var fg = c.fg;
91
- var contentParts = content.split('\n');
92
-
93
- for (var j = 0; j < contentParts.length; ++j) {
94
- if (!open) {
95
- result += '<span data-ansi-line="true">';
96
- open = true;
97
- }
7
+ class QueryRenderer extends React.Component {
8
+ static contextType = CubeContext;
9
+ static defaultProps = {
10
+ cubejsApi: null,
11
+ query: null,
12
+ render: null,
13
+ queries: null,
14
+ loadSql: null,
15
+ updateOnlyOnStateChange: false,
16
+ resetResultSetOnChange: true
17
+ }; // @deprected use `isQueryPresent` from `@cubejs-client/core`
18
+
19
+ static isQueryPresent(query) {
20
+ return isQueryPresent(query);
21
+ }
98
22
 
99
- var part = contentParts[j].replace('\r', '');
100
- var color = colors[anserMap[fg]];
23
+ constructor(props) {
24
+ super(props);
25
+ this.state = {};
26
+ this.mutexObj = {};
27
+ }
101
28
 
102
- if (color != null) {
103
- result += "<span style=\"color: ".concat(color, ";\">").concat(part, "</span>");
104
- } else {
105
- if (fg != null) {
106
- console.log('Missing color mapping: ', fg);
107
- }
29
+ componentDidMount() {
30
+ const {
31
+ query,
32
+ queries
33
+ } = this.props;
108
34
 
109
- result += "<span>".concat(part, "</span>");
110
- }
35
+ if (query) {
36
+ this.load(query);
37
+ }
111
38
 
112
- if (j < contentParts.length - 1) {
113
- result += '</span>';
114
- open = false;
115
- result += '<br/>';
116
- }
39
+ if (queries) {
40
+ this.loadQueries(queries);
117
41
  }
118
42
  }
119
43
 
120
- if (open) {
121
- result += '</span>';
122
- }
44
+ shouldComponentUpdate(nextProps, nextState) {
45
+ const {
46
+ query,
47
+ queries,
48
+ render,
49
+ cubejsApi,
50
+ loadSql,
51
+ updateOnlyOnStateChange
52
+ } = this.props;
53
+
54
+ if (!updateOnlyOnStateChange) {
55
+ return true;
56
+ }
123
57
 
124
- return result;
125
- }
126
- function removeEmpty(obj) {
127
- if (_typeof(obj) !== 'object') {
128
- return obj;
58
+ return !equals(nextProps.query, query) || !equals(nextProps.queries, queries) || (nextProps.render == null || render == null) && nextProps.render !== render || nextProps.cubejsApi !== cubejsApi || nextProps.loadSql !== loadSql || !equals(nextState, this.state) || nextProps.updateOnlyOnStateChange !== updateOnlyOnStateChange;
129
59
  }
130
60
 
131
- return Object.fromEntries(Object.entries(obj).filter(function (_ref) {
132
- var _ref2 = _slicedToArray(_ref, 2),
133
- v = _ref2[1];
134
-
135
- return v != null;
136
- }).map(function (_ref3) {
137
- var _ref4 = _slicedToArray(_ref3, 2),
138
- k = _ref4[0],
139
- v = _ref4[1];
61
+ componentDidUpdate(prevProps) {
62
+ const {
63
+ query,
64
+ queries
65
+ } = this.props;
140
66
 
141
- if (Array.isArray(v)) {
142
- return [k, v.map(removeEmpty)];
67
+ if (!equals(prevProps.query, query)) {
68
+ this.load(query);
143
69
  }
144
70
 
145
- return [k, _typeof(v) === 'object' ? removeEmpty(v) : v];
146
- }));
147
- }
148
-
149
- function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
150
-
151
- function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
152
-
153
- function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
154
-
155
- function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
156
-
157
- var QueryRenderer = /*#__PURE__*/function (_React$Component) {
158
- _inherits(QueryRenderer, _React$Component);
159
-
160
- var _super = _createSuper$1(QueryRenderer);
161
-
162
- function QueryRenderer(props) {
163
- var _this;
71
+ if (!equals(prevProps.queries, queries)) {
72
+ this.loadQueries(queries);
73
+ }
74
+ }
164
75
 
165
- _classCallCheck(this, QueryRenderer);
76
+ cubejsApi() {
77
+ // eslint-disable-next-line react/destructuring-assignment
78
+ return this.props.cubejsApi || this.context && this.context.cubejsApi;
79
+ }
166
80
 
167
- _this = _super.call(this, props);
168
- _this.state = {};
169
- _this.mutexObj = {};
170
- return _this;
81
+ load(query) {
82
+ const {
83
+ resetResultSetOnChange
84
+ } = this.props;
85
+ this.setState({
86
+ isLoading: true,
87
+ error: null,
88
+ sqlQuery: null,
89
+ ...(resetResultSetOnChange ? {
90
+ resultSet: null
91
+ } : {})
92
+ });
93
+ const {
94
+ loadSql
95
+ } = this.props;
96
+ const cubejsApi = this.cubejsApi();
97
+
98
+ if (query && isQueryPresent(query)) {
99
+ if (loadSql === 'only') {
100
+ cubejsApi.sql(query, {
101
+ mutexObj: this.mutexObj,
102
+ mutexKey: 'sql'
103
+ }).then(sqlQuery => this.setState({
104
+ sqlQuery,
105
+ error: null,
106
+ isLoading: false
107
+ })).catch(error => this.setState({ ...(resetResultSetOnChange ? {
108
+ resultSet: null
109
+ } : {}),
110
+ error,
111
+ isLoading: false
112
+ }));
113
+ } else if (loadSql) {
114
+ Promise.all([cubejsApi.sql(query, {
115
+ mutexObj: this.mutexObj,
116
+ mutexKey: 'sql'
117
+ }), cubejsApi.load(query, {
118
+ mutexObj: this.mutexObj,
119
+ mutexKey: 'query'
120
+ })]).then(([sqlQuery, resultSet]) => this.setState({
121
+ sqlQuery,
122
+ resultSet,
123
+ error: null,
124
+ isLoading: false
125
+ })).catch(error => this.setState({ ...(resetResultSetOnChange ? {
126
+ resultSet: null
127
+ } : {}),
128
+ error,
129
+ isLoading: false
130
+ }));
131
+ } else {
132
+ cubejsApi.load(query, {
133
+ mutexObj: this.mutexObj,
134
+ mutexKey: 'query'
135
+ }).then(resultSet => this.setState({
136
+ resultSet,
137
+ error: null,
138
+ isLoading: false
139
+ })).catch(error => this.setState({ ...(resetResultSetOnChange ? {
140
+ resultSet: null
141
+ } : {}),
142
+ error,
143
+ isLoading: false
144
+ }));
145
+ }
146
+ }
171
147
  }
172
148
 
173
- _createClass(QueryRenderer, [{
174
- key: "componentDidMount",
175
- value: function componentDidMount() {
176
- var _this$props = this.props,
177
- query = _this$props.query,
178
- queries = _this$props.queries;
149
+ loadQueries(queries) {
150
+ const cubejsApi = this.cubejsApi();
151
+ const {
152
+ resetResultSetOnChange
153
+ } = this.props;
154
+ this.setState({
155
+ isLoading: true,
156
+ ...(resetResultSetOnChange ? {
157
+ resultSet: null
158
+ } : {}),
159
+ error: null
160
+ });
161
+ const resultPromises = Promise.all(toPairs(queries).map(([name, query]) => cubejsApi.load(query, {
162
+ mutexObj: this.mutexObj,
163
+ mutexKey: name
164
+ }).then(r => [name, r])));
165
+ resultPromises.then(resultSet => this.setState({
166
+ resultSet: fromPairs(resultSet),
167
+ error: null,
168
+ isLoading: false
169
+ })).catch(error => this.setState({ ...(resetResultSetOnChange ? {
170
+ resultSet: null
171
+ } : {}),
172
+ error,
173
+ isLoading: false
174
+ }));
175
+ }
179
176
 
180
- if (query) {
181
- this.load(query);
182
- }
177
+ render() {
178
+ const {
179
+ error,
180
+ queries,
181
+ resultSet,
182
+ isLoading,
183
+ sqlQuery
184
+ } = this.state;
185
+ const {
186
+ render
187
+ } = this.props;
188
+ const loadState = {
189
+ error: error ? new Error(error.response?.plainError || error.message || error.toString()) : null,
190
+ resultSet: queries ? resultSet || {} : resultSet,
191
+ loadingState: {
192
+ isLoading
193
+ },
194
+ sqlQuery
195
+ };
183
196
 
184
- if (queries) {
185
- this.loadQueries(queries);
186
- }
197
+ if (render) {
198
+ return render(loadState);
187
199
  }
188
- }, {
189
- key: "shouldComponentUpdate",
190
- value: function shouldComponentUpdate(nextProps, nextState) {
191
- var _this$props2 = this.props,
192
- query = _this$props2.query,
193
- queries = _this$props2.queries,
194
- render = _this$props2.render,
195
- cubejsApi = _this$props2.cubejsApi,
196
- loadSql = _this$props2.loadSql,
197
- updateOnlyOnStateChange = _this$props2.updateOnlyOnStateChange;
198
-
199
- if (!updateOnlyOnStateChange) {
200
- return true;
201
- }
202
200
 
203
- return !equals(nextProps.query, query) || !equals(nextProps.queries, queries) || (nextProps.render == null || render == null) && nextProps.render !== render || nextProps.cubejsApi !== cubejsApi || nextProps.loadSql !== loadSql || !equals(nextState, this.state) || nextProps.updateOnlyOnStateChange !== updateOnlyOnStateChange;
204
- }
205
- }, {
206
- key: "componentDidUpdate",
207
- value: function componentDidUpdate(prevProps) {
208
- var _this$props3 = this.props,
209
- query = _this$props3.query,
210
- queries = _this$props3.queries;
211
-
212
- if (!equals(prevProps.query, query)) {
213
- this.load(query);
214
- }
201
+ return null;
202
+ }
215
203
 
216
- if (!equals(prevProps.queries, queries)) {
217
- this.loadQueries(queries);
218
- }
219
- }
220
- }, {
221
- key: "cubejsApi",
222
- value: function cubejsApi() {
223
- // eslint-disable-next-line react/destructuring-assignment
224
- return this.props.cubejsApi || this.context && this.context.cubejsApi;
225
- }
226
- }, {
227
- key: "load",
228
- value: function load(query) {
229
- var _this2 = this;
204
+ }
230
205
 
231
- var resetResultSetOnChange = this.props.resetResultSetOnChange;
232
- this.setState(_objectSpread$6({
233
- isLoading: true,
234
- error: null,
235
- sqlQuery: null
236
- }, resetResultSetOnChange ? {
237
- resultSet: null
238
- } : {}));
239
- var loadSql = this.props.loadSql;
240
- var cubejsApi = this.cubejsApi();
241
-
242
- if (query && isQueryPresent(query)) {
243
- if (loadSql === 'only') {
244
- cubejsApi.sql(query, {
245
- mutexObj: this.mutexObj,
246
- mutexKey: 'sql'
247
- }).then(function (sqlQuery) {
248
- return _this2.setState({
249
- sqlQuery: sqlQuery,
250
- error: null,
251
- isLoading: false
252
- });
253
- })["catch"](function (error) {
254
- return _this2.setState(_objectSpread$6(_objectSpread$6({}, resetResultSetOnChange ? {
255
- resultSet: null
256
- } : {}), {}, {
257
- error: error,
258
- isLoading: false
259
- }));
260
- });
261
- } else if (loadSql) {
262
- Promise.all([cubejsApi.sql(query, {
263
- mutexObj: this.mutexObj,
264
- mutexKey: 'sql'
265
- }), cubejsApi.load(query, {
266
- mutexObj: this.mutexObj,
267
- mutexKey: 'query'
268
- })]).then(function (_ref) {
269
- var _ref2 = _slicedToArray(_ref, 2),
270
- sqlQuery = _ref2[0],
271
- resultSet = _ref2[1];
272
-
273
- return _this2.setState({
274
- sqlQuery: sqlQuery,
275
- resultSet: resultSet,
276
- error: null,
277
- isLoading: false
278
- });
279
- })["catch"](function (error) {
280
- return _this2.setState(_objectSpread$6(_objectSpread$6({}, resetResultSetOnChange ? {
281
- resultSet: null
282
- } : {}), {}, {
283
- error: error,
284
- isLoading: false
285
- }));
286
- });
287
- } else {
288
- cubejsApi.load(query, {
289
- mutexObj: this.mutexObj,
290
- mutexKey: 'query'
291
- }).then(function (resultSet) {
292
- return _this2.setState({
293
- resultSet: resultSet,
294
- error: null,
295
- isLoading: false
296
- });
297
- })["catch"](function (error) {
298
- return _this2.setState(_objectSpread$6(_objectSpread$6({}, resetResultSetOnChange ? {
299
- resultSet: null
300
- } : {}), {}, {
301
- error: error,
302
- isLoading: false
303
- }));
304
- });
206
+ function _extends() {
207
+ _extends = Object.assign || function (target) {
208
+ for (var i = 1; i < arguments.length; i++) {
209
+ var source = arguments[i];
210
+
211
+ for (var key in source) {
212
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
213
+ target[key] = source[key];
305
214
  }
306
215
  }
307
216
  }
308
- }, {
309
- key: "loadQueries",
310
- value: function loadQueries(queries) {
311
- var _this3 = this;
312
-
313
- var cubejsApi = this.cubejsApi();
314
- var resetResultSetOnChange = this.props.resetResultSetOnChange;
315
- this.setState(_objectSpread$6(_objectSpread$6({
316
- isLoading: true
317
- }, resetResultSetOnChange ? {
318
- resultSet: null
319
- } : {}), {}, {
320
- error: null
321
- }));
322
- var resultPromises = Promise.all(toPairs(queries).map(function (_ref3) {
323
- var _ref4 = _slicedToArray(_ref3, 2),
324
- name = _ref4[0],
325
- query = _ref4[1];
326
-
327
- return cubejsApi.load(query, {
328
- mutexObj: _this3.mutexObj,
329
- mutexKey: name
330
- }).then(function (r) {
331
- return [name, r];
332
- });
333
- }));
334
- resultPromises.then(function (resultSet) {
335
- return _this3.setState({
336
- resultSet: fromPairs(resultSet),
337
- error: null,
338
- isLoading: false
339
- });
340
- })["catch"](function (error) {
341
- return _this3.setState(_objectSpread$6(_objectSpread$6({}, resetResultSetOnChange ? {
342
- resultSet: null
343
- } : {}), {}, {
344
- error: error,
345
- isLoading: false
346
- }));
347
- });
348
- }
349
- }, {
350
- key: "render",
351
- value: function render() {
352
- var _this$state = this.state,
353
- error = _this$state.error,
354
- queries = _this$state.queries,
355
- resultSet = _this$state.resultSet,
356
- isLoading = _this$state.isLoading,
357
- sqlQuery = _this$state.sqlQuery;
358
- var render = this.props.render;
359
- var loadState = {
360
- error: error ? new Error(generateAnsiHTML(error.message || error.toString())) : null,
361
- resultSet: queries ? resultSet || {} : resultSet,
362
- loadingState: {
363
- isLoading: isLoading
364
- },
365
- sqlQuery: sqlQuery
366
- };
367
217
 
368
- if (render) {
369
- return render(loadState);
370
- }
218
+ return target;
219
+ };
371
220
 
372
- return null;
373
- }
374
- }], [{
375
- key: "isQueryPresent",
376
- value: // @deprected use `isQueryPresent` from `@cubejs-client/core`
377
- function isQueryPresent$1(query) {
378
- return isQueryPresent(query);
379
- }
380
- }]);
381
-
382
- return QueryRenderer;
383
- }(React.Component);
384
- QueryRenderer.contextType = CubeContext;
385
- QueryRenderer.defaultProps = {
386
- cubejsApi: null,
387
- query: null,
388
- render: null,
389
- queries: null,
390
- loadSql: null,
391
- updateOnlyOnStateChange: false,
392
- resetResultSetOnChange: true
393
- };
394
-
395
- var _excluded$1 = ["query"];
396
-
397
- function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
398
-
399
- function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
400
-
401
- var QueryRendererWithTotals = function QueryRendererWithTotals(_ref) {
402
- var query = _ref.query,
403
- restProps = _objectWithoutProperties(_ref, _excluded$1);
404
-
405
- return /*#__PURE__*/React.createElement(QueryRenderer, _extends({
406
- queries: {
407
- totals: _objectSpread$5(_objectSpread$5({}, query), {}, {
408
- dimensions: [],
409
- timeDimensions: query.timeDimensions ? query.timeDimensions.map(function (td) {
410
- return _objectSpread$5(_objectSpread$5({}, td), {}, {
411
- granularity: null
412
- });
413
- }) : undefined
414
- }),
415
- main: query
416
- }
417
- }, restProps));
418
- };
221
+ return _extends.apply(this, arguments);
222
+ }
419
223
 
420
- QueryRendererWithTotals.defaultProps = {
421
- query: null,
422
- render: null,
423
- queries: null,
424
- loadSql: null
425
- };
224
+ const QueryRendererWithTotals = ({
225
+ query,
226
+ ...restProps
227
+ }) => /*#__PURE__*/React.createElement(QueryRenderer, _extends({
228
+ queries: {
229
+ totals: { ...query,
230
+ dimensions: [],
231
+ timeDimensions: query.timeDimensions ? query.timeDimensions.map(td => ({ ...td,
232
+ granularity: null
233
+ })) : undefined
234
+ },
235
+ main: query
236
+ }
237
+ }, restProps));
426
238
 
427
- function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
239
+ function removeEmpty(obj) {
240
+ if (typeof obj !== 'object') {
241
+ return obj;
242
+ }
428
243
 
429
- function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
244
+ return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null).map(([k, v]) => {
245
+ if (Array.isArray(v)) {
246
+ return [k, v.map(removeEmpty)];
247
+ }
430
248
 
431
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
249
+ return [k, typeof v === 'object' ? removeEmpty(v) : v];
250
+ }));
251
+ }
432
252
 
433
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
434
- var granularities = [{
253
+ const granularities = [{
435
254
  name: undefined,
436
255
  title: 'w/o grouping'
437
256
  }, {
@@ -459,77 +278,79 @@ var granularities = [{
459
278
  name: 'year',
460
279
  title: 'Year'
461
280
  }];
281
+ class QueryBuilder extends React.Component {
282
+ static contextType = CubeContext;
283
+ static defaultProps = {
284
+ cubejsApi: null,
285
+ stateChangeHeuristics: null,
286
+ disableHeuristics: false,
287
+ render: null,
288
+ wrapWithQueryRenderer: true,
289
+ defaultChartType: 'line',
290
+ defaultQuery: {},
291
+ initialVizState: null,
292
+ onVizStateChanged: null,
293
+ // deprecated
294
+ query: null,
295
+ setQuery: null,
296
+ vizState: null,
297
+ setVizState: null
298
+ }; // This is an anti-pattern, only kept for backward compatibility
299
+ // https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html#anti-pattern-unconditionally-copying-props-to-state
300
+
301
+ static getDerivedStateFromProps(props, state) {
302
+ if (props.query || props.vizState) {
303
+ const nextState = { ...state,
304
+ ...(props.vizState || {})
305
+ };
462
306
 
463
- var QueryBuilder = /*#__PURE__*/function (_React$Component) {
464
- _inherits(QueryBuilder, _React$Component);
465
-
466
- var _super = _createSuper(QueryBuilder);
307
+ if (Array.isArray(props.query)) {
308
+ throw new Error('Array of queries is not supported.');
309
+ }
467
310
 
468
- function QueryBuilder(props) {
469
- var _this;
311
+ return { ...nextState,
312
+ query: { ...nextState.query,
313
+ ...(props.query || {})
314
+ }
315
+ };
316
+ }
470
317
 
471
- _classCallCheck(this, QueryBuilder);
318
+ return null;
319
+ }
472
320
 
473
- _this = _super.call(this, props);
321
+ static resolveMember(type, {
322
+ meta,
323
+ query
324
+ }) {
325
+ if (!meta) {
326
+ return [];
327
+ }
474
328
 
475
- _defineProperty(_assertThisInitialized(_this), "fetchMeta", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
476
- var meta, metaError, metaErrorStack, _error$response, _error$response$stack;
329
+ if (Array.isArray(query)) {
330
+ return query.reduce((memo, currentQuery) => memo.concat(QueryBuilder.resolveMember(type, {
331
+ meta,
332
+ query: currentQuery
333
+ })), []);
334
+ }
477
335
 
478
- return _regeneratorRuntime.wrap(function _callee$(_context) {
479
- while (1) {
480
- switch (_context.prev = _context.next) {
481
- case 0:
482
- if (_this.cubejsApi()) {
483
- _context.next = 2;
484
- break;
485
- }
336
+ if (type === 'timeDimensions') {
337
+ return (query.timeDimensions || []).map((m, index) => ({ ...m,
338
+ dimension: { ...meta.resolveMember(m.dimension, 'dimensions'),
339
+ granularities
340
+ },
341
+ index
342
+ }));
343
+ }
486
344
 
487
- return _context.abrupt("return");
488
-
489
- case 2:
490
- metaError = null;
491
- metaErrorStack = null;
492
- _context.prev = 4;
493
-
494
- _this.setState({
495
- isFetchingMeta: true
496
- });
497
-
498
- _context.next = 8;
499
- return _this.cubejsApi().meta();
500
-
501
- case 8:
502
- meta = _context.sent;
503
- _context.next = 15;
504
- break;
505
-
506
- case 11:
507
- _context.prev = 11;
508
- _context.t0 = _context["catch"](4);
509
- metaError = _context.t0;
510
- metaErrorStack = ((_error$response = _context.t0.response) === null || _error$response === void 0 ? void 0 : (_error$response$stack = _error$response.stack) === null || _error$response$stack === void 0 ? void 0 : _error$response$stack.replace(_context.t0.message || '', '')) || '';
511
-
512
- case 15:
513
- _this.setState({
514
- meta: meta,
515
- metaError: metaError ? new Error(generateAnsiHTML(metaError.message || metaError.toString())) : null,
516
- metaErrorStack: metaErrorStack,
517
- isFetchingMeta: false
518
- }, function () {
519
- // Run update query to force viz state update
520
- // This will catch any new missing members, and also validate the query against the new meta
521
- _this.updateQuery({});
522
- });
523
-
524
- case 16:
525
- case "end":
526
- return _context.stop();
527
- }
528
- }
529
- }, _callee, null, [[4, 11]]);
530
- })));
345
+ return (query[type] || []).map((m, index) => ({
346
+ index,
347
+ ...meta.resolveMember(m, type)
348
+ }));
349
+ }
531
350
 
532
- _this.state = _objectSpread$4(_objectSpread$4({
351
+ constructor(props) {
352
+ super(props);
353
+ this.state = {
533
354
  query: props.defaultQuery || props.query,
534
355
  chartType: props.defaultChartType,
535
356
  validatedQuery: props.query,
@@ -537,705 +358,540 @@ var QueryBuilder = /*#__PURE__*/function (_React$Component) {
537
358
  missingMembers: [],
538
359
  // todo: rename to `isMetaReady`
539
360
  isFetchingMeta: true,
540
- dryRunResponse: null
541
- }, props.vizState), props.initialVizState);
542
- _this.mutexObj = {};
543
- _this.orderMembersOrderKeys = [];
544
- return _this;
361
+ dryRunResponse: null,
362
+ ...props.vizState,
363
+ // deprecated
364
+ ...props.initialVizState
365
+ };
366
+ this.mutexObj = {};
367
+ this.orderMembersOrderKeys = [];
545
368
  }
546
369
 
547
- _createClass(QueryBuilder, [{
548
- key: "componentDidMount",
549
- value: function () {
550
- var _componentDidMount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
551
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
552
- while (1) {
553
- switch (_context2.prev = _context2.next) {
554
- case 0:
555
- this.prevContext = this.context;
556
- _context2.next = 3;
557
- return this.fetchMeta();
558
-
559
- case 3:
560
- case "end":
561
- return _context2.stop();
562
- }
563
- }
564
- }, _callee2, this);
565
- }));
566
-
567
- function componentDidMount() {
568
- return _componentDidMount.apply(this, arguments);
569
- }
570
-
571
- return componentDidMount;
572
- }()
573
- }, {
574
- key: "componentDidUpdate",
575
- value: function () {
576
- var _componentDidUpdate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(prevProps) {
577
- var _this$prevContext,
578
- _this$context,
579
- _this2 = this;
580
-
581
- var _this$props, schemaVersion, onSchemaChange, meta, newMeta;
582
-
583
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
584
- while (1) {
585
- switch (_context4.prev = _context4.next) {
586
- case 0:
587
- _this$props = this.props, schemaVersion = _this$props.schemaVersion, onSchemaChange = _this$props.onSchemaChange;
588
- meta = this.state.meta;
589
-
590
- if (!(((_this$prevContext = this.prevContext) === null || _this$prevContext === void 0 ? void 0 : _this$prevContext.cubejsApi) !== ((_this$context = this.context) === null || _this$context === void 0 ? void 0 : _this$context.cubejsApi))) {
591
- _context4.next = 6;
592
- break;
593
- }
594
-
595
- this.prevContext = this.context;
596
- _context4.next = 6;
597
- return this.fetchMeta();
598
-
599
- case 6:
600
- if (!(prevProps.schemaVersion !== schemaVersion)) {
601
- _context4.next = 17;
602
- break;
603
- }
604
-
605
- _context4.prev = 7;
606
- _context4.next = 10;
607
- return this.cubejsApi().meta();
608
-
609
- case 10:
610
- newMeta = _context4.sent;
611
-
612
- if (!equals(newMeta, meta) && typeof onSchemaChange === 'function') {
613
- onSchemaChange({
614
- schemaVersion: schemaVersion,
615
- refresh: function () {
616
- var _refresh = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
617
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
618
- while (1) {
619
- switch (_context3.prev = _context3.next) {
620
- case 0:
621
- _context3.next = 2;
622
- return _this2.fetchMeta();
623
-
624
- case 2:
625
- case "end":
626
- return _context3.stop();
627
- }
628
- }
629
- }, _callee3);
630
- }));
631
-
632
- function refresh() {
633
- return _refresh.apply(this, arguments);
634
- }
635
-
636
- return refresh;
637
- }()
638
- });
639
- }
370
+ async componentDidMount() {
371
+ this.prevContext = this.context;
372
+ await this.fetchMeta();
373
+ }
640
374
 
641
- _context4.next = 17;
642
- break;
375
+ async componentDidUpdate(prevProps) {
376
+ const {
377
+ schemaVersion,
378
+ onSchemaChange
379
+ } = this.props;
380
+ const {
381
+ meta
382
+ } = this.state;
383
+
384
+ if (this.prevContext?.cubejsApi !== this.context?.cubejsApi) {
385
+ this.prevContext = this.context;
386
+ await this.fetchMeta();
387
+ }
643
388
 
644
- case 14:
645
- _context4.prev = 14;
646
- _context4.t0 = _context4["catch"](7);
647
- // eslint-disable-next-line
648
- this.setState({
649
- metaError: _context4.t0
650
- });
389
+ if (prevProps.schemaVersion !== schemaVersion) {
390
+ try {
391
+ const newMeta = await this.cubejsApi().meta();
651
392
 
652
- case 17:
653
- case "end":
654
- return _context4.stop();
393
+ if (!equals(newMeta, meta) && typeof onSchemaChange === 'function') {
394
+ onSchemaChange({
395
+ schemaVersion,
396
+ refresh: async () => {
397
+ await this.fetchMeta();
655
398
  }
656
- }
657
- }, _callee4, this, [[7, 14]]);
658
- }));
659
-
660
- function componentDidUpdate(_x) {
661
- return _componentDidUpdate.apply(this, arguments);
399
+ });
400
+ }
401
+ } catch (error) {
402
+ // eslint-disable-next-line
403
+ this.setState({
404
+ metaError: error
405
+ });
662
406
  }
407
+ }
408
+ }
663
409
 
664
- return componentDidUpdate;
665
- }()
666
- }, {
667
- key: "cubejsApi",
668
- value: function cubejsApi() {
669
- var cubejsApi = this.props.cubejsApi; // eslint-disable-next-line react/destructuring-assignment
410
+ fetchMeta = async () => {
411
+ if (!this.cubejsApi()) {
412
+ return;
413
+ }
414
+
415
+ let meta;
416
+ let metaError = null;
417
+ let richMetaError = null;
418
+ let metaErrorStack = null;
670
419
 
671
- return cubejsApi || this.context && this.context.cubejsApi;
420
+ try {
421
+ this.setState({
422
+ isFetchingMeta: true
423
+ });
424
+ meta = await this.cubejsApi().meta();
425
+ } catch (error) {
426
+ metaError = error.response?.plainError || error;
427
+ richMetaError = error;
428
+ metaErrorStack = error.response?.stack?.replace(error.message || '', '') || '';
672
429
  }
673
- }, {
674
- key: "getMissingMembers",
675
- value: function getMissingMembers(query, meta) {
676
- if (!meta) {
677
- return [];
678
- }
679
430
 
680
- return getQueryMembers(query).map(function (member) {
681
- var resolvedMember = meta.resolveMember(member, ['measures', 'dimensions', 'segments']);
431
+ this.setState({
432
+ meta,
433
+ metaError: metaError ? new Error(metaError.message || metaError.toString()) : null,
434
+ richMetaError,
435
+ metaErrorStack,
436
+ isFetchingMeta: false
437
+ }, () => {
438
+ // Run update query to force viz state update
439
+ // This will catch any new missing members, and also validate the query against the new meta
440
+ this.updateQuery({});
441
+ });
442
+ };
682
443
 
683
- if (resolvedMember.error) {
684
- return member;
685
- }
444
+ cubejsApi() {
445
+ const {
446
+ cubejsApi
447
+ } = this.props; // eslint-disable-next-line react/destructuring-assignment
686
448
 
687
- return false;
688
- }).filter(Boolean);
689
- }
690
- }, {
691
- key: "isQueryPresent",
692
- value: function isQueryPresent() {
693
- var query = this.state.query;
694
- return QueryRenderer.isQueryPresent(query);
449
+ return cubejsApi || this.context && this.context.cubejsApi;
450
+ }
451
+
452
+ getMissingMembers(query, meta) {
453
+ if (!meta) {
454
+ return [];
695
455
  }
696
- }, {
697
- key: "prepareRenderProps",
698
- value: function prepareRenderProps(queryRendererProps) {
699
- var _this3 = this;
700
456
 
701
- var getName = function getName(member) {
702
- return member.name;
703
- };
457
+ return getQueryMembers(query).map(member => {
458
+ const resolvedMember = meta.resolveMember(member, ['measures', 'dimensions', 'segments']);
704
459
 
705
- var toTimeDimension = function toTimeDimension(member) {
706
- var rangeSelection = member.compareDateRange ? {
707
- compareDateRange: member.compareDateRange
708
- } : {
709
- dateRange: member.dateRange
710
- };
711
- return removeEmpty(_objectSpread$4({
712
- dimension: member.dimension.name,
713
- granularity: member.granularity
714
- }, rangeSelection));
715
- };
460
+ if (resolvedMember.error) {
461
+ return member;
462
+ }
716
463
 
717
- var toFilter = function toFilter(member) {
718
- var _member$member, _member$dimension;
464
+ return false;
465
+ }).filter(Boolean);
466
+ }
719
467
 
720
- return {
721
- member: ((_member$member = member.member) === null || _member$member === void 0 ? void 0 : _member$member.name) || ((_member$dimension = member.dimension) === null || _member$dimension === void 0 ? void 0 : _member$dimension.name),
722
- operator: member.operator,
723
- values: member.values
724
- };
725
- };
468
+ isQueryPresent() {
469
+ const {
470
+ query
471
+ } = this.state;
472
+ return QueryRenderer.isQueryPresent(query);
473
+ }
726
474
 
727
- var updateMethods = function updateMethods(memberType) {
728
- var toQuery = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getName;
729
- return {
730
- add: function add(member) {
731
- var query = _this3.state.query;
732
-
733
- _this3.updateQuery(_defineProperty({}, memberType, (query[memberType] || []).concat(toQuery(member))));
734
- },
735
- remove: function remove(member) {
736
- var query = _this3.state.query;
737
- return _this3.updateQuery(_defineProperty({}, memberType, (query[memberType] || []).filter(function (_, index) {
738
- return index !== member.index;
739
- })));
740
- },
741
- update: function update(member, updateWith) {
742
- var query = _this3.state.query;
743
- var members = (query[memberType] || []).concat([]);
744
- members.splice(member.index, 1, toQuery(updateWith));
745
- return _this3.updateQuery(_defineProperty({}, memberType, members));
746
- }
747
- };
475
+ prepareRenderProps(queryRendererProps) {
476
+ const getName = member => member.name;
477
+
478
+ const toTimeDimension = member => {
479
+ const rangeSelection = member.compareDateRange ? {
480
+ compareDateRange: member.compareDateRange
481
+ } : {
482
+ dateRange: member.dateRange
748
483
  };
484
+ return removeEmpty({
485
+ dimension: member.dimension.name,
486
+ granularity: member.granularity,
487
+ ...rangeSelection
488
+ });
489
+ };
749
490
 
750
- var _this$state = this.state,
751
- meta = _this$state.meta,
752
- metaError = _this$state.metaError,
753
- query = _this$state.query,
754
- queryError = _this$state.queryError,
755
- chartType = _this$state.chartType,
756
- pivotConfig = _this$state.pivotConfig,
757
- validatedQuery = _this$state.validatedQuery,
758
- missingMembers = _this$state.missingMembers,
759
- isFetchingMeta = _this$state.isFetchingMeta,
760
- dryRunResponse = _this$state.dryRunResponse,
761
- metaErrorStack = _this$state.metaErrorStack;
762
- var flatFilters = uniqBy(function (filter) {
763
- return "".concat(prop('member', filter)).concat(prop('operator', filter));
764
- }, flattenFilters(meta && query.filters || []).map(function (filter) {
765
- return _objectSpread$4(_objectSpread$4({}, filter), {}, {
766
- member: filter.member || filter.dimension
491
+ const toFilter = member => ({
492
+ member: member.member?.name || member.dimension?.name,
493
+ operator: member.operator,
494
+ values: member.values
495
+ });
496
+
497
+ const updateMethods = (memberType, toQuery = getName) => ({
498
+ add: member => {
499
+ const {
500
+ query
501
+ } = this.state;
502
+ this.updateQuery({
503
+ [memberType]: (query[memberType] || []).concat(toQuery(member))
767
504
  });
768
- }));
769
- var filters = flatFilters.map(function (m, i) {
770
- return _objectSpread$4(_objectSpread$4({}, m), {}, {
771
- dimension: meta.resolveMember(m.member || m.dimension, ['dimensions', 'measures']),
772
- operators: meta.filterOperatorsForMember(m.member || m.dimension, ['dimensions', 'measures']),
773
- index: i
505
+ },
506
+ remove: member => {
507
+ const {
508
+ query
509
+ } = this.state;
510
+ return this.updateQuery({
511
+ [memberType]: (query[memberType] || []).filter((_, index) => index !== member.index)
774
512
  });
775
- });
776
- var measures = QueryBuilder.resolveMember('measures', this.state);
777
- var dimensions = QueryBuilder.resolveMember('dimensions', this.state);
778
- var timeDimensions = QueryBuilder.resolveMember('timeDimensions', this.state);
779
- var segments = (meta && query.segments || []).map(function (m, i) {
780
- return _objectSpread$4({
781
- index: i
782
- }, meta.resolveMember(m, 'segments'));
783
- });
784
- var availableMeasures = [];
785
- var availableDimensions = [];
786
- var availableSegments = [];
787
- var availableFilterMembers = [];
788
- var availableMembers = (meta === null || meta === void 0 ? void 0 : meta.membersGroupedByCube()) || {
789
- measures: [],
790
- dimensions: [],
791
- segments: [],
792
- timeDimensions: []
793
- };
794
-
795
- if (meta) {
796
- availableMeasures = meta.membersForQuery(query, 'measures');
797
- availableDimensions = meta.membersForQuery(query, 'dimensions');
798
- availableSegments = meta.membersForQuery(query, 'segments');
799
- var indexedMeasures = indexBy(prop('cubeName'), availableMembers.measures);
800
- var indexedDimensions = indexBy(prop('cubeName'), availableMembers.dimensions);
801
- var cubeNames = uniq([].concat(_toConsumableArray(Object.keys(indexedMeasures)), _toConsumableArray(Object.keys(indexedDimensions)))).sort();
802
- availableFilterMembers = cubeNames.map(function (name) {
803
- var _indexedMeasures$name, _indexedDimensions$na;
804
-
805
- var cube = indexedMeasures[name] || indexedDimensions[name];
806
- return _objectSpread$4(_objectSpread$4({}, cube), {}, {
807
- members: [].concat(_toConsumableArray((_indexedMeasures$name = indexedMeasures[name]) === null || _indexedMeasures$name === void 0 ? void 0 : _indexedMeasures$name.members), _toConsumableArray((_indexedDimensions$na = indexedDimensions[name]) === null || _indexedDimensions$na === void 0 ? void 0 : _indexedDimensions$na.members)).sort(function (a, b) {
808
- return a.shortTitle > b.shortTitle ? 1 : -1;
809
- })
810
- });
513
+ },
514
+ update: (member, updateWith) => {
515
+ const {
516
+ query
517
+ } = this.state;
518
+ const members = (query[memberType] || []).concat([]);
519
+ members.splice(member.index, 1, toQuery(updateWith));
520
+ return this.updateQuery({
521
+ [memberType]: members
811
522
  });
812
523
  }
524
+ });
525
+
526
+ const {
527
+ meta,
528
+ metaError,
529
+ richMetaError,
530
+ query,
531
+ queryError,
532
+ chartType,
533
+ pivotConfig,
534
+ validatedQuery,
535
+ missingMembers,
536
+ isFetchingMeta,
537
+ dryRunResponse,
538
+ metaErrorStack
539
+ } = this.state;
540
+ const flatFilters = uniqBy(filter => `${prop('member', filter)}${prop('operator', filter)}`, flattenFilters(meta && query.filters || []).map(filter => ({ ...filter,
541
+ member: filter.member || filter.dimension
542
+ })));
543
+ const filters = flatFilters.map((m, i) => ({ ...m,
544
+ dimension: meta.resolveMember(m.member || m.dimension, ['dimensions', 'measures']),
545
+ operators: meta.filterOperatorsForMember(m.member || m.dimension, ['dimensions', 'measures']),
546
+ index: i
547
+ }));
548
+ const measures = QueryBuilder.resolveMember('measures', this.state);
549
+ const dimensions = QueryBuilder.resolveMember('dimensions', this.state);
550
+ const timeDimensions = QueryBuilder.resolveMember('timeDimensions', this.state);
551
+ const segments = (meta && query.segments || []).map((m, i) => ({
552
+ index: i,
553
+ ...meta.resolveMember(m, 'segments')
554
+ }));
555
+ let availableMeasures = [];
556
+ let availableDimensions = [];
557
+ let availableSegments = [];
558
+ let availableFilterMembers = [];
559
+ const availableMembers = meta?.membersGroupedByCube() || {
560
+ measures: [],
561
+ dimensions: [],
562
+ segments: [],
563
+ timeDimensions: []
564
+ };
813
565
 
814
- var activeOrder = Array.isArray(query.order) ? Object.fromEntries(query.order) : query.order;
815
- var members = [].concat(_toConsumableArray(measures), _toConsumableArray(dimensions), _toConsumableArray(timeDimensions.map(function (_ref2) {
816
- var dimension = _ref2.dimension;
817
- return dimension;
818
- })));
819
- var orderMembers = uniqBy(prop('id'), _toConsumableArray(members.map(function (_ref3) {
820
- var name = _ref3.name,
821
- title = _ref3.title;
822
- return {
823
- id: name,
824
- title: title,
825
- order: (activeOrder === null || activeOrder === void 0 ? void 0 : activeOrder[name]) || 'none'
566
+ if (meta) {
567
+ availableMeasures = meta.membersForQuery(query, 'measures');
568
+ availableDimensions = meta.membersForQuery(query, 'dimensions');
569
+ availableSegments = meta.membersForQuery(query, 'segments');
570
+ const indexedMeasures = indexBy(prop('cubeName'), availableMembers.measures);
571
+ const indexedDimensions = indexBy(prop('cubeName'), availableMembers.dimensions);
572
+ const cubeNames = uniq([...Object.keys(indexedMeasures), ...Object.keys(indexedDimensions)]).sort();
573
+ availableFilterMembers = cubeNames.map(name => {
574
+ const cube = indexedMeasures[name] || indexedDimensions[name];
575
+ return { ...cube,
576
+ members: [...indexedMeasures[name]?.members, ...indexedDimensions[name]?.members].sort((a, b) => a.shortTitle > b.shortTitle ? 1 : -1)
826
577
  };
827
- })));
578
+ });
579
+ }
828
580
 
829
- if (this.orderMembersOrderKeys.length !== orderMembers.length) {
830
- this.orderMembersOrderKeys = orderMembers.map(function (_ref4) {
831
- var id = _ref4.id;
832
- return id;
833
- });
834
- }
581
+ const activeOrder = Array.isArray(query.order) ? Object.fromEntries(query.order) : query.order;
582
+ const members = [...measures, ...dimensions, ...timeDimensions.map(({
583
+ dimension
584
+ }) => dimension)];
585
+ let orderMembers = uniqBy(prop('id'), [// uniqBy prefers first, so these will only be added if not already in the query
586
+ ...members.map(({
587
+ name,
588
+ title
589
+ }) => ({
590
+ id: name,
591
+ title,
592
+ order: activeOrder?.[name] || 'none'
593
+ }))]);
594
+
595
+ if (this.orderMembersOrderKeys.length !== orderMembers.length) {
596
+ this.orderMembersOrderKeys = orderMembers.map(({
597
+ id
598
+ }) => id);
599
+ }
835
600
 
836
- if (this.orderMembersOrderKeys.length) {
837
- // Preserve order until the members change or manually re-ordered
838
- // This is needed so that when an order member becomes active, it doesn't jump to the top of the list
839
- orderMembers = (this.orderMembersOrderKeys || []).map(function (id) {
840
- return orderMembers.find(function (member) {
841
- return member.id === id;
842
- });
843
- });
844
- }
601
+ if (this.orderMembersOrderKeys.length) {
602
+ // Preserve order until the members change or manually re-ordered
603
+ // This is needed so that when an order member becomes active, it doesn't jump to the top of the list
604
+ orderMembers = (this.orderMembersOrderKeys || []).map(id => orderMembers.find(member => member.id === id));
605
+ }
845
606
 
846
- return _objectSpread$4({
847
- meta: meta,
848
- metaError: metaError,
849
- metaErrorStack: metaErrorStack,
850
- query: query,
851
- error: queryError,
852
- // Match same name as QueryRenderer prop
853
- validatedQuery: validatedQuery,
854
- isQueryPresent: this.isQueryPresent(),
855
- chartType: chartType,
856
- measures: measures,
857
- dimensions: dimensions,
858
- timeDimensions: timeDimensions,
859
- segments: segments,
860
- filters: filters,
861
- orderMembers: orderMembers,
862
- availableMeasures: availableMeasures,
863
- availableDimensions: availableDimensions,
864
- availableTimeDimensions: availableDimensions.filter(function (m) {
865
- return m.type === 'time';
866
- }),
867
- availableSegments: availableSegments,
868
- availableMembers: availableMembers,
869
- availableFilterMembers: availableFilterMembers,
870
- updateQuery: function updateQuery(queryUpdate) {
871
- return _this3.updateQuery(queryUpdate);
872
- },
873
- updateMeasures: updateMethods('measures'),
874
- updateDimensions: updateMethods('dimensions'),
875
- updateSegments: updateMethods('segments'),
876
- updateTimeDimensions: updateMethods('timeDimensions', toTimeDimension),
877
- updateFilters: updateMethods('filters', toFilter),
878
- updateChartType: function updateChartType(newChartType) {
879
- return _this3.updateVizState({
880
- chartType: newChartType
607
+ return {
608
+ meta,
609
+ metaError,
610
+ richMetaError,
611
+ metaErrorStack,
612
+ query,
613
+ error: queryError,
614
+ // Match same name as QueryRenderer prop
615
+ validatedQuery,
616
+ isQueryPresent: this.isQueryPresent(),
617
+ chartType,
618
+ measures,
619
+ dimensions,
620
+ timeDimensions,
621
+ segments,
622
+ filters,
623
+ orderMembers,
624
+ availableMeasures,
625
+ availableDimensions,
626
+ availableTimeDimensions: availableDimensions.filter(m => m.type === 'time'),
627
+ availableSegments,
628
+ availableMembers,
629
+ availableFilterMembers,
630
+ updateQuery: queryUpdate => this.updateQuery(queryUpdate),
631
+ updateMeasures: updateMethods('measures'),
632
+ updateDimensions: updateMethods('dimensions'),
633
+ updateSegments: updateMethods('segments'),
634
+ updateTimeDimensions: updateMethods('timeDimensions', toTimeDimension),
635
+ updateFilters: updateMethods('filters', toFilter),
636
+ updateChartType: newChartType => this.updateVizState({
637
+ chartType: newChartType
638
+ }),
639
+ updateOrder: {
640
+ set: (memberId, newOrder = 'asc') => {
641
+ this.updateQuery({
642
+ order: orderMembers.map(orderMember => ({ ...orderMember,
643
+ order: orderMember.id === memberId ? newOrder : orderMember.order
644
+ })).reduce((acc, {
645
+ id,
646
+ order
647
+ }) => order !== 'none' ? [...acc, [id, order]] : acc, [])
881
648
  });
882
649
  },
883
- updateOrder: {
884
- set: function set(memberId) {
885
- var newOrder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'asc';
886
-
887
- _this3.updateQuery({
888
- order: orderMembers.map(function (orderMember) {
889
- return _objectSpread$4(_objectSpread$4({}, orderMember), {}, {
890
- order: orderMember.id === memberId ? newOrder : orderMember.order
891
- });
892
- }).reduce(function (acc, _ref5) {
893
- var id = _ref5.id,
894
- order = _ref5.order;
895
- return order !== 'none' ? [].concat(_toConsumableArray(acc), [[id, order]]) : acc;
896
- }, [])
897
- });
898
- },
899
- update: function update(order) {
900
- _this3.updateQuery({
901
- order: order
902
- });
903
- },
904
- reorder: function reorder(sourceIndex, destinationIndex) {
905
- if (sourceIndex == null || destinationIndex == null) {
906
- return;
907
- }
908
-
909
- var nextArray = moveItemInArray(orderMembers, sourceIndex, destinationIndex);
910
- _this3.orderMembersOrderKeys = nextArray.map(function (_ref6) {
911
- var id = _ref6.id;
912
- return id;
913
- });
914
-
915
- _this3.updateQuery({
916
- order: nextArray.reduce(function (acc, _ref7) {
917
- var id = _ref7.id,
918
- order = _ref7.order;
919
- return order !== 'none' ? [].concat(_toConsumableArray(acc), [[id, order]]) : acc;
920
- }, [])
921
- });
922
- }
650
+ update: order => {
651
+ this.updateQuery({
652
+ order
653
+ });
923
654
  },
924
- pivotConfig: pivotConfig,
925
- updatePivotConfig: {
926
- moveItem: function moveItem(_ref8) {
927
- var sourceIndex = _ref8.sourceIndex,
928
- destinationIndex = _ref8.destinationIndex,
929
- sourceAxis = _ref8.sourceAxis,
930
- destinationAxis = _ref8.destinationAxis;
931
-
932
- _this3.updateVizState({
933
- pivotConfig: movePivotItem(pivotConfig, sourceIndex, destinationIndex, sourceAxis, destinationAxis)
934
- });
935
- },
936
- update: function update(config) {
937
- var limit = config.limit;
938
-
939
- _this3.updateVizState(_objectSpread$4({
940
- pivotConfig: _objectSpread$4(_objectSpread$4({}, pivotConfig), config)
941
- }, limit ? {
942
- query: _objectSpread$4(_objectSpread$4({}, query), {}, {
943
- limit: limit
944
- })
945
- } : null));
655
+ reorder: (sourceIndex, destinationIndex) => {
656
+ if (sourceIndex == null || destinationIndex == null) {
657
+ return;
946
658
  }
947
- },
948
- missingMembers: missingMembers,
949
- refresh: this.fetchMeta,
950
- isFetchingMeta: isFetchingMeta,
951
- dryRunResponse: dryRunResponse
952
- }, queryRendererProps);
953
- }
954
- }, {
955
- key: "updateQuery",
956
- value: function updateQuery(queryUpdate) {
957
- var query = this.state.query;
958
- this.updateVizState({
959
- query: removeEmptyQueryFields(_objectSpread$4(_objectSpread$4({}, query), queryUpdate))
960
- });
961
- }
962
- }, {
963
- key: "updateVizState",
964
- value: function () {
965
- var _updateVizState = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(state) {
966
- var _this4 = this;
967
-
968
- var _this$props2, setQuery, setVizState, _this$state2, stateQuery, statePivotConfig, chartType, meta, finalState, vizStateSent, handleVizStateChange, runSetters, shouldFetchDryRun, response;
969
-
970
- return _regeneratorRuntime.wrap(function _callee5$(_context5) {
971
- while (1) {
972
- switch (_context5.prev = _context5.next) {
973
- case 0:
974
- _this$props2 = this.props, setQuery = _this$props2.setQuery, setVizState = _this$props2.setVizState;
975
- _this$state2 = this.state, stateQuery = _this$state2.query, statePivotConfig = _this$state2.pivotConfig, chartType = _this$state2.chartType, meta = _this$state2.meta;
976
- finalState = this.applyStateChangeHeuristics(state);
977
-
978
- if (!finalState.query) {
979
- finalState.query = _objectSpread$4({}, stateQuery);
980
- }
981
-
982
- vizStateSent = null;
983
659
 
984
- handleVizStateChange = function handleVizStateChange(currentState) {
985
- var onVizStateChanged = _this4.props.onVizStateChanged;
660
+ const nextArray = moveItemInArray(orderMembers, sourceIndex, destinationIndex);
661
+ this.orderMembersOrderKeys = nextArray.map(({
662
+ id
663
+ }) => id);
664
+ this.updateQuery({
665
+ order: nextArray.reduce((acc, {
666
+ id,
667
+ order
668
+ }) => order !== 'none' ? [...acc, [id, order]] : acc, [])
669
+ });
670
+ }
671
+ },
672
+ pivotConfig,
673
+ updatePivotConfig: {
674
+ moveItem: ({
675
+ sourceIndex,
676
+ destinationIndex,
677
+ sourceAxis,
678
+ destinationAxis
679
+ }) => {
680
+ this.updateVizState({
681
+ pivotConfig: movePivotItem(pivotConfig, sourceIndex, destinationIndex, sourceAxis, destinationAxis)
682
+ });
683
+ },
684
+ update: config => {
685
+ const {
686
+ limit
687
+ } = config;
688
+ this.updateVizState({
689
+ pivotConfig: { ...pivotConfig,
690
+ ...config
691
+ },
692
+ ...(limit ? {
693
+ query: { ...query,
694
+ limit
695
+ }
696
+ } : null)
697
+ });
698
+ }
699
+ },
700
+ missingMembers,
701
+ refresh: this.fetchMeta,
702
+ isFetchingMeta,
703
+ dryRunResponse,
704
+ ...queryRendererProps
705
+ };
706
+ }
986
707
 
987
- if (onVizStateChanged) {
988
- var newVizState = pick(['chartType', 'pivotConfig', 'query'], currentState); // Don't run callbacks more than once unless the viz state has changed since last time
708
+ updateQuery(queryUpdate) {
709
+ const {
710
+ query
711
+ } = this.state;
712
+ this.updateVizState({
713
+ query: removeEmptyQueryFields({ ...query,
714
+ ...queryUpdate
715
+ })
716
+ });
717
+ }
989
718
 
990
- if (!vizStateSent || !equals(vizStateSent, newVizState)) {
991
- onVizStateChanged(newVizState); // use clone to make sure we don't save object references
719
+ async updateVizState(state) {
720
+ const {
721
+ setQuery,
722
+ setVizState
723
+ } = this.props;
724
+ const {
725
+ query: stateQuery,
726
+ pivotConfig: statePivotConfig,
727
+ chartType,
728
+ meta
729
+ } = this.state;
730
+ const finalState = this.applyStateChangeHeuristics(state);
731
+
732
+ if (!finalState.query) {
733
+ finalState.query = { ...stateQuery
734
+ };
735
+ }
992
736
 
993
- vizStateSent = clone(newVizState);
994
- }
995
- }
996
- }; // deprecated, setters replaced by onVizStateChanged
737
+ let vizStateSent = null;
997
738
 
739
+ const handleVizStateChange = currentState => {
740
+ const {
741
+ onVizStateChanged
742
+ } = this.props;
998
743
 
999
- runSetters = function runSetters(currentState) {
1000
- if (setVizState) {
1001
- setVizState(pick(['chartType', 'pivotConfig', 'query'], currentState));
1002
- }
744
+ if (onVizStateChanged) {
745
+ const newVizState = pick(['chartType', 'pivotConfig', 'query'], currentState); // Don't run callbacks more than once unless the viz state has changed since last time
1003
746
 
1004
- if (currentState.query && setQuery) {
1005
- setQuery(currentState.query);
1006
- }
1007
- };
747
+ if (!vizStateSent || !equals(vizStateSent, newVizState)) {
748
+ onVizStateChanged(newVizState); // use clone to make sure we don't save object references
1008
749
 
1009
- if (finalState.shouldApplyHeuristicOrder) {
1010
- finalState.query.order = defaultOrder(finalState.query);
1011
- }
750
+ vizStateSent = clone(newVizState);
751
+ }
752
+ }
753
+ }; // deprecated, setters replaced by onVizStateChanged
1012
754
 
1013
- finalState.pivotConfig = ResultSet.getNormalizedPivotConfig(finalState.query, finalState.pivotConfig !== undefined ? finalState.pivotConfig : statePivotConfig);
1014
- finalState.missingMembers = this.getMissingMembers(finalState.query, meta);
1015
- finalState.chartType = finalState.chartType || state.chartType || chartType; // deprecated
1016
755
 
1017
- runSetters(_objectSpread$4(_objectSpread$4({}, state), {}, {
1018
- query: finalState.query
1019
- })); // Update optimistically so that UI does not stutter
756
+ const runSetters = currentState => {
757
+ if (setVizState) {
758
+ setVizState(pick(['chartType', 'pivotConfig', 'query'], currentState));
759
+ }
1020
760
 
1021
- this.setState(_objectSpread$4(_objectSpread$4({}, finalState), {}, {
1022
- queryError: null
1023
- }));
1024
- handleVizStateChange(finalState);
1025
- shouldFetchDryRun = !equals(pick(['measures', 'dimensions', 'timeDimensions'], stateQuery), pick(['measures', 'dimensions', 'timeDimensions'], finalState.query));
761
+ if (currentState.query && setQuery) {
762
+ setQuery(currentState.query);
763
+ }
764
+ };
1026
765
 
1027
- if (!(shouldFetchDryRun && isQueryPresent(finalState.query) && finalState.missingMembers.length === 0)) {
1028
- _context5.next = 30;
1029
- break;
1030
- }
766
+ if (finalState.shouldApplyHeuristicOrder) {
767
+ finalState.query.order = defaultOrder(finalState.query);
768
+ }
1031
769
 
1032
- _context5.prev = 16;
1033
- _context5.next = 19;
1034
- return this.cubejsApi().dryRun(finalState.query, {
1035
- mutexObj: this.mutexObj
1036
- });
770
+ finalState.pivotConfig = ResultSet.getNormalizedPivotConfig(finalState.query, finalState.pivotConfig !== undefined ? finalState.pivotConfig : statePivotConfig);
771
+ finalState.missingMembers = this.getMissingMembers(finalState.query, meta);
772
+ finalState.chartType = finalState.chartType || state.chartType || chartType; // deprecated
1037
773
 
1038
- case 19:
1039
- response = _context5.sent;
774
+ runSetters({ ...state,
775
+ query: finalState.query
776
+ }); // Update optimistically so that UI does not stutter
1040
777
 
1041
- if (finalState.shouldApplyHeuristicOrder) {
1042
- finalState.query.order = (response.queryOrder || []).reduce(function (memo, current) {
1043
- return _objectSpread$4(_objectSpread$4({}, memo), current);
1044
- }, {});
1045
- }
778
+ this.setState({ ...finalState,
779
+ queryError: null
780
+ });
781
+ handleVizStateChange(finalState);
782
+ const shouldFetchDryRun = !equals(pick(['measures', 'dimensions', 'timeDimensions'], stateQuery), pick(['measures', 'dimensions', 'timeDimensions'], finalState.query));
1046
783
 
1047
- finalState.pivotConfig = ResultSet.getNormalizedPivotConfig(response.pivotQuery, finalState.pivotConfig);
1048
- finalState.validatedQuery = this.validatedQuery(finalState);
1049
- finalState.dryRunResponse = response; // deprecated
784
+ if (shouldFetchDryRun && isQueryPresent(finalState.query) && finalState.missingMembers.length === 0) {
785
+ try {
786
+ const response = await this.cubejsApi().dryRun(finalState.query, {
787
+ mutexObj: this.mutexObj
788
+ });
1050
789
 
1051
- if (isQueryPresent(stateQuery)) {
1052
- runSetters(_objectSpread$4(_objectSpread$4({}, this.state), finalState));
1053
- }
790
+ if (finalState.shouldApplyHeuristicOrder) {
791
+ finalState.query.order = (response.queryOrder || []).reduce((memo, current) => ({ ...memo,
792
+ ...current
793
+ }), {});
794
+ }
1054
795
 
1055
- _context5.next = 30;
1056
- break;
796
+ finalState.pivotConfig = ResultSet.getNormalizedPivotConfig(response.pivotQuery, finalState.pivotConfig);
797
+ finalState.validatedQuery = this.validatedQuery(finalState);
798
+ finalState.dryRunResponse = response; // deprecated
1057
799
 
1058
- case 27:
1059
- _context5.prev = 27;
1060
- _context5.t0 = _context5["catch"](16);
1061
- this.setState({
1062
- queryError: new Error(generateAnsiHTML(_context5.t0.message || _context5.t0.toString()))
1063
- });
800
+ if (isQueryPresent(stateQuery)) {
801
+ runSetters({ ...this.state,
802
+ ...finalState
803
+ });
804
+ }
805
+ } catch (error) {
806
+ this.setState({
807
+ queryError: new Error(error.response?.plainError || error.message),
808
+ richQueryError: new Error(error.message || error.toString())
809
+ });
810
+ }
811
+ }
1064
812
 
1065
- case 30:
1066
- this.setState(finalState, function () {
1067
- return handleVizStateChange(_this4.state);
1068
- });
813
+ this.setState(finalState, () => handleVizStateChange(this.state));
814
+ }
1069
815
 
1070
- case 31:
1071
- case "end":
1072
- return _context5.stop();
1073
- }
1074
- }
1075
- }, _callee5, this, [[16, 27]]);
1076
- }));
816
+ validatedQuery(state) {
817
+ const {
818
+ query
819
+ } = state || this.state;
820
+ return validateQuery(query);
821
+ }
1077
822
 
1078
- function updateVizState(_x2) {
1079
- return _updateVizState.apply(this, arguments);
1080
- }
823
+ defaultHeuristics(newState) {
824
+ const {
825
+ query,
826
+ sessionGranularity,
827
+ meta
828
+ } = this.state;
829
+ return defaultHeuristics(newState, query, {
830
+ meta,
831
+ sessionGranularity: sessionGranularity || 'day'
832
+ });
833
+ }
1081
834
 
1082
- return updateVizState;
1083
- }()
1084
- }, {
1085
- key: "validatedQuery",
1086
- value: function validatedQuery(state) {
1087
- var _ref9 = state || this.state,
1088
- query = _ref9.query;
835
+ applyStateChangeHeuristics(newState) {
836
+ const {
837
+ stateChangeHeuristics,
838
+ disableHeuristics
839
+ } = this.props;
1089
840
 
1090
- return validateQuery(query);
841
+ if (disableHeuristics) {
842
+ return newState;
1091
843
  }
1092
- }, {
1093
- key: "defaultHeuristics",
1094
- value: function defaultHeuristics$1(newState) {
1095
- var _this$state3 = this.state,
1096
- query = _this$state3.query,
1097
- sessionGranularity = _this$state3.sessionGranularity,
1098
- meta = _this$state3.meta;
1099
- return defaultHeuristics(newState, query, {
1100
- meta: meta,
1101
- sessionGranularity: sessionGranularity || 'day'
1102
- });
1103
- }
1104
- }, {
1105
- key: "applyStateChangeHeuristics",
1106
- value: function applyStateChangeHeuristics(newState) {
1107
- var _this$props3 = this.props,
1108
- stateChangeHeuristics = _this$props3.stateChangeHeuristics,
1109
- disableHeuristics = _this$props3.disableHeuristics;
1110
-
1111
- if (disableHeuristics) {
1112
- return newState;
1113
- }
1114
844
 
1115
- return stateChangeHeuristics && stateChangeHeuristics(this.state, newState) || this.defaultHeuristics(newState);
1116
- }
1117
- }, {
1118
- key: "render",
1119
- value: function render() {
1120
- var _this5 = this;
1121
-
1122
- var query = this.state.query;
1123
- var _this$props4 = this.props,
1124
- cubejsApi = _this$props4.cubejsApi,
1125
- _render = _this$props4.render,
1126
- wrapWithQueryRenderer = _this$props4.wrapWithQueryRenderer;
1127
-
1128
- if (wrapWithQueryRenderer) {
1129
- return /*#__PURE__*/React.createElement(QueryRenderer, {
1130
- query: query,
1131
- cubejsApi: cubejsApi,
1132
- resetResultSetOnChange: false,
1133
- render: function render(queryRendererProps) {
1134
- if (_render) {
1135
- return _render(_this5.prepareRenderProps(queryRendererProps));
1136
- }
845
+ return stateChangeHeuristics && stateChangeHeuristics(this.state, newState) || this.defaultHeuristics(newState);
846
+ }
1137
847
 
1138
- return null;
848
+ render() {
849
+ const {
850
+ query
851
+ } = this.state;
852
+ const {
853
+ cubejsApi,
854
+ render,
855
+ wrapWithQueryRenderer
856
+ } = this.props;
857
+
858
+ if (wrapWithQueryRenderer) {
859
+ return /*#__PURE__*/React.createElement(QueryRenderer, {
860
+ query: query,
861
+ cubejsApi: cubejsApi,
862
+ resetResultSetOnChange: false,
863
+ render: queryRendererProps => {
864
+ if (render) {
865
+ return render(this.prepareRenderProps(queryRendererProps));
1139
866
  }
1140
- });
1141
- } else {
1142
- if (_render) {
1143
- return _render(this.prepareRenderProps());
1144
- }
1145
867
 
1146
- return null;
1147
- }
1148
- }
1149
- }], [{
1150
- key: "getDerivedStateFromProps",
1151
- value: // This is an anti-pattern, only kept for backward compatibility
1152
- // https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html#anti-pattern-unconditionally-copying-props-to-state
1153
- function getDerivedStateFromProps(props, state) {
1154
- if (props.query || props.vizState) {
1155
- var nextState = _objectSpread$4(_objectSpread$4({}, state), props.vizState || {});
1156
-
1157
- if (Array.isArray(props.query)) {
1158
- throw new Error('Array of queries is not supported.');
868
+ return null;
1159
869
  }
1160
-
1161
- return _objectSpread$4(_objectSpread$4({}, nextState), {}, {
1162
- query: _objectSpread$4(_objectSpread$4({}, nextState.query), props.query || {})
1163
- });
870
+ });
871
+ } else {
872
+ if (render) {
873
+ return render(this.prepareRenderProps());
1164
874
  }
1165
875
 
1166
876
  return null;
1167
877
  }
1168
- }, {
1169
- key: "resolveMember",
1170
- value: function resolveMember(type, _ref10) {
1171
- var meta = _ref10.meta,
1172
- query = _ref10.query;
1173
-
1174
- if (!meta) {
1175
- return [];
1176
- }
1177
-
1178
- if (Array.isArray(query)) {
1179
- return query.reduce(function (memo, currentQuery) {
1180
- return memo.concat(QueryBuilder.resolveMember(type, {
1181
- meta: meta,
1182
- query: currentQuery
1183
- }));
1184
- }, []);
1185
- }
878
+ }
1186
879
 
1187
- if (type === 'timeDimensions') {
1188
- return (query.timeDimensions || []).map(function (m, index) {
1189
- return _objectSpread$4(_objectSpread$4({}, m), {}, {
1190
- dimension: _objectSpread$4(_objectSpread$4({}, meta.resolveMember(m.dimension, 'dimensions')), {}, {
1191
- granularities: granularities
1192
- }),
1193
- index: index
1194
- });
1195
- });
1196
- }
880
+ }
1197
881
 
1198
- return (query[type] || []).map(function (m, index) {
1199
- return _objectSpread$4({
1200
- index: index
1201
- }, meta.resolveMember(m, type));
1202
- });
1203
- }
1204
- }]);
1205
-
1206
- return QueryBuilder;
1207
- }(React.Component);
1208
-
1209
- _defineProperty(QueryBuilder, "contextType", CubeContext);
1210
- QueryBuilder.defaultProps = {
1211
- cubejsApi: null,
1212
- stateChangeHeuristics: null,
1213
- disableHeuristics: false,
1214
- render: null,
1215
- wrapWithQueryRenderer: true,
1216
- defaultChartType: 'line',
1217
- defaultQuery: {},
1218
- initialVizState: null,
1219
- onVizStateChanged: null,
1220
- // deprecated
1221
- query: null,
1222
- setQuery: null,
1223
- vizState: null,
1224
- setVizState: null
1225
- };
1226
-
1227
- function CubeProvider(_ref) {
1228
- var cubejsApi = _ref.cubejsApi,
1229
- children = _ref.children;
882
+ function CubeProvider({
883
+ cubejsApi,
884
+ children
885
+ }) {
1230
886
  return /*#__PURE__*/React.createElement(CubeContext.Provider, {
1231
887
  value: {
1232
- cubejsApi: cubejsApi
888
+ cubejsApi
1233
889
  }
1234
890
  }, children);
1235
891
  }
1236
892
 
1237
893
  function useDeepCompareMemoize(value) {
1238
- var ref = useRef([]);
894
+ const ref = useRef([]);
1239
895
 
1240
896
  if (!equals(value, ref.current)) {
1241
897
  ref.current = value;
@@ -1245,388 +901,218 @@ function useDeepCompareMemoize(value) {
1245
901
  }
1246
902
 
1247
903
  function useIsMounted() {
1248
- var isMounted = useRef(false);
1249
- useEffect(function () {
904
+ const isMounted = useRef(false);
905
+ useEffect(() => {
1250
906
  isMounted.current = true;
1251
- return function () {
907
+ return () => {
1252
908
  isMounted.current = false;
1253
909
  };
1254
910
  }, []);
1255
- return function () {
1256
- return isMounted.current;
1257
- };
911
+ return () => isMounted.current;
1258
912
  }
1259
913
 
1260
- function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1261
-
1262
- function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1263
- function useCubeFetch(method) {
1264
- var _options$query;
1265
-
1266
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1267
- var isMounted = useIsMounted();
1268
- var context = useContext(CubeContext);
1269
- var mutexRef = useRef({});
1270
-
1271
- var _useState = useState({
914
+ function useCubeFetch(method, options = {}) {
915
+ const isMounted = useIsMounted();
916
+ const context = useContext(CubeContext);
917
+ const mutexRef = useRef({});
918
+ const [response, setResponse] = useState({
1272
919
  isLoading: false,
1273
920
  response: null
1274
- }),
1275
- _useState2 = _slicedToArray(_useState, 2),
1276
- response = _useState2[0],
1277
- setResponse = _useState2[1];
1278
-
1279
- var _useState3 = useState(null),
1280
- _useState4 = _slicedToArray(_useState3, 2),
1281
- error = _useState4[0],
1282
- setError = _useState4[1];
1283
-
1284
- var _options$skip = options.skip,
1285
- skip = _options$skip === void 0 ? false : _options$skip;
1286
-
1287
- function load() {
1288
- return _load.apply(this, arguments);
1289
- }
1290
-
1291
- function _load() {
1292
- _load = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1293
- var loadOptions,
1294
- ignoreSkip,
1295
- cubejsApi,
1296
- query,
1297
- queryCondition,
1298
- coreOptions,
1299
- args,
1300
- _response,
1301
- _args = arguments;
1302
-
1303
- return _regeneratorRuntime.wrap(function _callee$(_context) {
1304
- while (1) {
1305
- switch (_context.prev = _context.next) {
1306
- case 0:
1307
- loadOptions = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};
1308
- ignoreSkip = _args.length > 1 && _args[1] !== undefined ? _args[1] : false;
1309
- cubejsApi = options.cubejsApi || (context === null || context === void 0 ? void 0 : context.cubejsApi);
1310
- query = loadOptions.query || options.query;
1311
- queryCondition = method === 'meta' ? true : query && isQueryPresent(query);
1312
-
1313
- if (!(cubejsApi && (ignoreSkip || !skip) && queryCondition)) {
1314
- _context.next = 20;
1315
- break;
1316
- }
1317
-
1318
- setError(null);
1319
- setResponse({
1320
- isLoading: true,
1321
- response: null
1322
- });
1323
- coreOptions = {
1324
- mutexObj: mutexRef.current,
1325
- mutexKey: method
1326
- };
1327
- args = method === 'meta' ? [coreOptions] : [query, coreOptions];
1328
- _context.prev = 10;
1329
- _context.next = 13;
1330
- return cubejsApi[method].apply(cubejsApi, args);
1331
-
1332
- case 13:
1333
- _response = _context.sent;
1334
-
1335
- if (isMounted()) {
1336
- setResponse({
1337
- response: _response,
1338
- isLoading: false
1339
- });
1340
- }
1341
-
1342
- _context.next = 20;
1343
- break;
1344
-
1345
- case 17:
1346
- _context.prev = 17;
1347
- _context.t0 = _context["catch"](10);
921
+ });
922
+ const [error, setError] = useState(null);
923
+ const {
924
+ skip = false
925
+ } = options;
926
+
927
+ async function load(loadOptions = {}, ignoreSkip = false) {
928
+ const cubejsApi = options.cubejsApi || context?.cubejsApi;
929
+ const query = loadOptions.query || options.query;
930
+ const queryCondition = method === 'meta' ? true : query && isQueryPresent(query);
931
+
932
+ if (cubejsApi && (ignoreSkip || !skip) && queryCondition) {
933
+ setError(null);
934
+ setResponse({
935
+ isLoading: true,
936
+ response: null
937
+ });
938
+ const coreOptions = {
939
+ mutexObj: mutexRef.current,
940
+ mutexKey: method
941
+ };
942
+ const args = method === 'meta' ? [coreOptions] : [query, coreOptions];
1348
943
 
1349
- if (isMounted()) {
1350
- setError(_context.t0);
1351
- setResponse({
1352
- isLoading: false,
1353
- response: null
1354
- });
1355
- }
944
+ try {
945
+ const response = await cubejsApi[method](...args);
1356
946
 
1357
- case 20:
1358
- case "end":
1359
- return _context.stop();
1360
- }
947
+ if (isMounted()) {
948
+ setResponse({
949
+ response,
950
+ isLoading: false
951
+ });
1361
952
  }
1362
- }, _callee, null, [[10, 17]]);
1363
- }));
1364
- return _load.apply(this, arguments);
953
+ } catch (error) {
954
+ if (isMounted()) {
955
+ setError(error);
956
+ setResponse({
957
+ isLoading: false,
958
+ response: null
959
+ });
960
+ }
961
+ }
962
+ }
1365
963
  }
1366
964
 
1367
- useEffect(function () {
965
+ useEffect(() => {
1368
966
  load();
1369
- }, useDeepCompareMemoize([Object.keys(((_options$query = options.query) === null || _options$query === void 0 ? void 0 : _options$query.order) || {}), options, context]));
1370
- return _objectSpread$3(_objectSpread$3({}, response), {}, {
1371
- error: error,
1372
- refetch: function refetch(options) {
1373
- return load(options, true);
1374
- }
1375
- });
967
+ }, useDeepCompareMemoize([Object.keys(options.query?.order || {}), options, context]));
968
+ return { ...response,
969
+ error,
970
+ refetch: options => load(options, true)
971
+ };
1376
972
  }
1377
973
 
1378
- function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1379
-
1380
- function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1381
- function useCubeSql(query) {
1382
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1383
- return useCubeFetch('sql', _objectSpread$2(_objectSpread$2({}, options), {}, {
1384
- query: query
1385
- }));
974
+ function useCubeSql(query, options = {}) {
975
+ return useCubeFetch('sql', { ...options,
976
+ query
977
+ });
1386
978
  }
1387
979
 
1388
- function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1389
-
1390
- function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1391
- function useDryRun(query) {
1392
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1393
- return useCubeFetch('dryRun', _objectSpread$1(_objectSpread$1({}, options), {}, {
1394
- query: query
1395
- }));
980
+ function useDryRun(query, options = {}) {
981
+ return useCubeFetch('dryRun', { ...options,
982
+ query
983
+ });
1396
984
  }
1397
985
 
1398
- var _excluded = ["refetch"];
1399
-
1400
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1401
-
1402
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1403
- function useLazyDryRun(query) {
1404
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1405
-
1406
- var _useCubeFetch = useCubeFetch('dryRun', _objectSpread(_objectSpread({}, options), {}, {
1407
- query: query,
986
+ function useLazyDryRun(query, options = {}) {
987
+ const {
988
+ refetch,
989
+ ...result
990
+ } = useCubeFetch('dryRun', { ...options,
991
+ query,
1408
992
  skip: true
1409
- })),
1410
- refetch = _useCubeFetch.refetch,
1411
- result = _objectWithoutProperties(_useCubeFetch, _excluded);
1412
-
993
+ });
1413
994
  return [refetch, result];
1414
995
  }
1415
996
 
1416
- function useCubeQuery(query) {
1417
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1418
- var mutexRef = useRef({});
1419
- var isMounted = useIsMounted();
1420
-
1421
- var _useState = useState(null),
1422
- _useState2 = _slicedToArray(_useState, 2),
1423
- currentQuery = _useState2[0],
1424
- setCurrentQuery = _useState2[1];
1425
-
1426
- var _useState3 = useState(false),
1427
- _useState4 = _slicedToArray(_useState3, 2),
1428
- isLoading = _useState4[0],
1429
- setLoading = _useState4[1];
1430
-
1431
- var _useState5 = useState(null),
1432
- _useState6 = _slicedToArray(_useState5, 2),
1433
- resultSet = _useState6[0],
1434
- setResultSet = _useState6[1];
1435
-
1436
- var _useState7 = useState(null),
1437
- _useState8 = _slicedToArray(_useState7, 2),
1438
- progress = _useState8[0],
1439
- setProgress = _useState8[1];
1440
-
1441
- var _useState9 = useState(null),
1442
- _useState10 = _slicedToArray(_useState9, 2),
1443
- error = _useState10[0],
1444
- setError = _useState10[1];
1445
-
1446
- var context = useContext(CubeContext);
1447
- var subscribeRequest = null;
1448
-
1449
- var progressCallback = function progressCallback(_ref) {
1450
- var progressResponse = _ref.progressResponse;
1451
- return setProgress(progressResponse);
1452
- };
1453
-
1454
- function fetch() {
1455
- return _fetch.apply(this, arguments);
1456
- }
1457
-
1458
- function _fetch() {
1459
- _fetch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1460
- var resetResultSetOnChange, cubejsApi, response;
1461
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1462
- while (1) {
1463
- switch (_context2.prev = _context2.next) {
1464
- case 0:
1465
- resetResultSetOnChange = options.resetResultSetOnChange;
1466
- cubejsApi = options.cubejsApi || (context === null || context === void 0 ? void 0 : context.cubejsApi);
1467
-
1468
- if (cubejsApi) {
1469
- _context2.next = 4;
1470
- break;
1471
- }
1472
-
1473
- throw new Error('Cube.js API client is not provided');
1474
-
1475
- case 4:
1476
- if (resetResultSetOnChange) {
1477
- setResultSet(null);
1478
- }
1479
-
1480
- setError(null);
1481
- setLoading(true);
1482
- _context2.prev = 7;
1483
- _context2.next = 10;
1484
- return cubejsApi.load(query, {
1485
- mutexObj: mutexRef.current,
1486
- mutexKey: 'query',
1487
- progressCallback: progressCallback
1488
- });
997
+ function useCubeQuery(query, options = {}) {
998
+ const mutexRef = useRef({});
999
+ const isMounted = useIsMounted();
1000
+ const [currentQuery, setCurrentQuery] = useState(null);
1001
+ const [isLoading, setLoading] = useState(false);
1002
+ const [resultSet, setResultSet] = useState(null);
1003
+ const [progress, setProgress] = useState(null);
1004
+ const [error, setError] = useState(null);
1005
+ const context = useContext(CubeContext);
1006
+ let subscribeRequest = null;
1007
+
1008
+ const progressCallback = ({
1009
+ progressResponse
1010
+ }) => setProgress(progressResponse);
1011
+
1012
+ async function fetch() {
1013
+ const {
1014
+ resetResultSetOnChange
1015
+ } = options;
1016
+ const cubejsApi = options.cubejsApi || context?.cubejsApi;
1489
1017
 
1490
- case 10:
1491
- response = _context2.sent;
1492
-
1493
- if (isMounted()) {
1494
- setResultSet(response);
1495
- setProgress(null);
1496
- }
1018
+ if (!cubejsApi) {
1019
+ throw new Error('Cube.js API client is not provided');
1020
+ }
1497
1021
 
1498
- _context2.next = 17;
1499
- break;
1022
+ if (resetResultSetOnChange) {
1023
+ setResultSet(null);
1024
+ }
1500
1025
 
1501
- case 14:
1502
- _context2.prev = 14;
1503
- _context2.t0 = _context2["catch"](7);
1026
+ setError(null);
1027
+ setLoading(true);
1504
1028
 
1505
- if (isMounted()) {
1506
- setError(_context2.t0);
1507
- setResultSet(null);
1508
- setProgress(null);
1509
- }
1029
+ try {
1030
+ const response = await cubejsApi.load(query, {
1031
+ mutexObj: mutexRef.current,
1032
+ mutexKey: 'query',
1033
+ progressCallback
1034
+ });
1510
1035
 
1511
- case 17:
1512
- if (isMounted()) {
1513
- setLoading(false);
1514
- }
1036
+ if (isMounted()) {
1037
+ setResultSet(response);
1038
+ setProgress(null);
1039
+ }
1040
+ } catch (error) {
1041
+ if (isMounted()) {
1042
+ setError(error);
1043
+ setResultSet(null);
1044
+ setProgress(null);
1045
+ }
1046
+ }
1515
1047
 
1516
- case 18:
1517
- case "end":
1518
- return _context2.stop();
1519
- }
1520
- }
1521
- }, _callee2, null, [[7, 14]]);
1522
- }));
1523
- return _fetch.apply(this, arguments);
1048
+ if (isMounted()) {
1049
+ setLoading(false);
1050
+ }
1524
1051
  }
1525
1052
 
1526
- useEffect(function () {
1527
- var _options$skip = options.skip,
1528
- skip = _options$skip === void 0 ? false : _options$skip,
1529
- resetResultSetOnChange = options.resetResultSetOnChange;
1530
- var cubejsApi = options.cubejsApi || (context === null || context === void 0 ? void 0 : context.cubejsApi);
1053
+ useEffect(() => {
1054
+ const {
1055
+ skip = false,
1056
+ resetResultSetOnChange
1057
+ } = options;
1058
+ const cubejsApi = options.cubejsApi || context?.cubejsApi;
1531
1059
 
1532
1060
  if (!cubejsApi) {
1533
1061
  throw new Error('Cube.js API client is not provided');
1534
1062
  }
1535
1063
 
1536
- function loadQuery() {
1537
- return _loadQuery.apply(this, arguments);
1538
- }
1539
-
1540
- function _loadQuery() {
1541
- _loadQuery = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1542
- return _regeneratorRuntime.wrap(function _callee$(_context) {
1543
- while (1) {
1544
- switch (_context.prev = _context.next) {
1545
- case 0:
1546
- if (!(!skip && isQueryPresent(query))) {
1547
- _context.next = 20;
1548
- break;
1549
- }
1550
-
1551
- if (!areQueriesEqual(currentQuery, query)) {
1552
- if (resetResultSetOnChange == null || resetResultSetOnChange) {
1553
- setResultSet(null);
1554
- }
1555
-
1556
- setCurrentQuery(query);
1557
- }
1558
-
1559
- setError(null);
1560
- setLoading(true);
1561
- _context.prev = 4;
1562
-
1563
- if (!subscribeRequest) {
1564
- _context.next = 9;
1565
- break;
1566
- }
1064
+ async function loadQuery() {
1065
+ if (!skip && isQueryPresent(query)) {
1066
+ if (!areQueriesEqual(currentQuery, query)) {
1067
+ if (resetResultSetOnChange == null || resetResultSetOnChange) {
1068
+ setResultSet(null);
1069
+ }
1567
1070
 
1568
- _context.next = 8;
1569
- return subscribeRequest.unsubscribe();
1071
+ setCurrentQuery(query);
1072
+ }
1570
1073
 
1571
- case 8:
1572
- subscribeRequest = null;
1074
+ setError(null);
1075
+ setLoading(true);
1573
1076
 
1574
- case 9:
1575
- if (!options.subscribe) {
1576
- _context.next = 13;
1577
- break;
1578
- }
1077
+ try {
1078
+ if (subscribeRequest) {
1079
+ await subscribeRequest.unsubscribe();
1080
+ subscribeRequest = null;
1081
+ }
1579
1082
 
1580
- subscribeRequest = cubejsApi.subscribe(query, {
1581
- mutexObj: mutexRef.current,
1582
- mutexKey: 'query',
1583
- progressCallback: progressCallback
1584
- }, function (e, result) {
1585
- if (isMounted()) {
1586
- if (e) {
1587
- setError(e);
1588
- } else {
1589
- setResultSet(result);
1590
- }
1591
-
1592
- setLoading(false);
1593
- setProgress(null);
1594
- }
1595
- });
1596
- _context.next = 15;
1597
- break;
1598
-
1599
- case 13:
1600
- _context.next = 15;
1601
- return fetch();
1602
-
1603
- case 15:
1604
- _context.next = 20;
1605
- break;
1606
-
1607
- case 17:
1608
- _context.prev = 17;
1609
- _context.t0 = _context["catch"](4);
1610
-
1611
- if (isMounted()) {
1612
- setError(_context.t0);
1613
- setResultSet(null);
1614
- setLoading(false);
1615
- setProgress(null);
1083
+ if (options.subscribe) {
1084
+ subscribeRequest = cubejsApi.subscribe(query, {
1085
+ mutexObj: mutexRef.current,
1086
+ mutexKey: 'query',
1087
+ progressCallback
1088
+ }, (e, result) => {
1089
+ if (isMounted()) {
1090
+ if (e) {
1091
+ setError(e);
1092
+ } else {
1093
+ setResultSet(result);
1616
1094
  }
1617
1095
 
1618
- case 20:
1619
- case "end":
1620
- return _context.stop();
1621
- }
1096
+ setLoading(false);
1097
+ setProgress(null);
1098
+ }
1099
+ });
1100
+ } else {
1101
+ await fetch();
1622
1102
  }
1623
- }, _callee, null, [[4, 17]]);
1624
- }));
1625
- return _loadQuery.apply(this, arguments);
1103
+ } catch (e) {
1104
+ if (isMounted()) {
1105
+ setError(e);
1106
+ setResultSet(null);
1107
+ setLoading(false);
1108
+ setProgress(null);
1109
+ }
1110
+ }
1111
+ }
1626
1112
  }
1627
1113
 
1628
1114
  loadQuery();
1629
- return function () {
1115
+ return () => {
1630
1116
  if (subscribeRequest) {
1631
1117
  subscribeRequest.unsubscribe();
1632
1118
  subscribeRequest = null;
@@ -1634,17 +1120,16 @@ function useCubeQuery(query) {
1634
1120
  };
1635
1121
  }, useDeepCompareMemoize([query, Object.keys(query && query.order || {}), options, context]));
1636
1122
  return {
1637
- isLoading: isLoading,
1638
- resultSet: resultSet,
1639
- error: error,
1640
- progress: progress,
1123
+ isLoading,
1124
+ resultSet,
1125
+ error,
1126
+ progress,
1641
1127
  previousQuery: currentQuery,
1642
1128
  refetch: fetch
1643
1129
  };
1644
1130
  }
1645
1131
 
1646
- function useCubeMeta() {
1647
- var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1132
+ function useCubeMeta(options = {}) {
1648
1133
  return useCubeFetch('meta', options);
1649
1134
  }
1650
1135