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