@cubejs-client/react 0.30.46 → 0.30.60
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 +55 -123
- package/dist/cubejs-client-react.esm.js.map +1 -1
- package/dist/cubejs-client-react.js +56 -125
- package/dist/cubejs-client-react.js.map +1 -1
- package/dist/cubejs-client-react.umd.js +377 -5761
- package/dist/cubejs-client-react.umd.js.map +1 -1
- package/index.d.ts +1 -0
- package/package.json +3 -5
- package/src/QueryBuilder.jsx +10 -4
- package/src/QueryRenderer.jsx +1 -2
- package/src/utils.js +0 -78
package/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cubejs-client/react",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.60",
|
|
4
4
|
"author": "Cube Dev, Inc.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"engines": {},
|
|
@@ -24,10 +24,8 @@
|
|
|
24
24
|
],
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@babel/runtime": "^7.1.2",
|
|
27
|
-
"@cubejs-client/core": "^0.30.
|
|
28
|
-
"anser": "^2.0.1",
|
|
27
|
+
"@cubejs-client/core": "^0.30.60",
|
|
29
28
|
"core-js": "^3.6.5",
|
|
30
|
-
"html-entities": "^2.3.2",
|
|
31
29
|
"ramda": "^0.27.0"
|
|
32
30
|
},
|
|
33
31
|
"devDependencies": {
|
|
@@ -44,5 +42,5 @@
|
|
|
44
42
|
"peerDependencies": {
|
|
45
43
|
"react": ">=16.10.2"
|
|
46
44
|
},
|
|
47
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "7ec87645cf0063257e527a83ea91f77551ad607c"
|
|
48
46
|
}
|
package/src/QueryBuilder.jsx
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
|
|
16
16
|
import QueryRenderer from './QueryRenderer.jsx';
|
|
17
17
|
import CubeContext from './CubeContext';
|
|
18
|
-
import {
|
|
18
|
+
import { removeEmpty } from './utils';
|
|
19
19
|
|
|
20
20
|
const granularities = [
|
|
21
21
|
{ name: undefined, title: 'w/o grouping' },
|
|
@@ -148,20 +148,23 @@ export default class QueryBuilder extends React.Component {
|
|
|
148
148
|
|
|
149
149
|
let meta;
|
|
150
150
|
let metaError = null;
|
|
151
|
+
let richMetaError = null;
|
|
151
152
|
let metaErrorStack = null;
|
|
152
153
|
|
|
153
154
|
try {
|
|
154
155
|
this.setState({ isFetchingMeta: true });
|
|
155
156
|
meta = await this.cubejsApi().meta();
|
|
156
157
|
} catch (error) {
|
|
157
|
-
metaError = error;
|
|
158
|
+
metaError = error.response?.plainError || error;
|
|
159
|
+
richMetaError = error;
|
|
158
160
|
metaErrorStack = error.response?.stack?.replace(error.message || '', '') || '';
|
|
159
161
|
}
|
|
160
162
|
|
|
161
163
|
this.setState(
|
|
162
164
|
{
|
|
163
165
|
meta,
|
|
164
|
-
metaError: metaError ? new Error(
|
|
166
|
+
metaError: metaError ? new Error(metaError.message || metaError.toString()) : null,
|
|
167
|
+
richMetaError,
|
|
165
168
|
metaErrorStack,
|
|
166
169
|
isFetchingMeta: false,
|
|
167
170
|
},
|
|
@@ -248,6 +251,7 @@ export default class QueryBuilder extends React.Component {
|
|
|
248
251
|
const {
|
|
249
252
|
meta,
|
|
250
253
|
metaError,
|
|
254
|
+
richMetaError,
|
|
251
255
|
query,
|
|
252
256
|
queryError,
|
|
253
257
|
chartType,
|
|
@@ -339,6 +343,7 @@ export default class QueryBuilder extends React.Component {
|
|
|
339
343
|
return {
|
|
340
344
|
meta,
|
|
341
345
|
metaError,
|
|
346
|
+
richMetaError,
|
|
342
347
|
metaErrorStack,
|
|
343
348
|
query,
|
|
344
349
|
error: queryError, // Match same name as QueryRenderer prop
|
|
@@ -518,7 +523,8 @@ export default class QueryBuilder extends React.Component {
|
|
|
518
523
|
}
|
|
519
524
|
} catch (error) {
|
|
520
525
|
this.setState({
|
|
521
|
-
queryError: new Error(
|
|
526
|
+
queryError: new Error(error.response?.plainError || error.message),
|
|
527
|
+
richQueryError: new Error(error.message || error.toString())
|
|
522
528
|
});
|
|
523
529
|
}
|
|
524
530
|
}
|
package/src/QueryRenderer.jsx
CHANGED
|
@@ -3,7 +3,6 @@ import { equals, toPairs, fromPairs } from 'ramda';
|
|
|
3
3
|
import { isQueryPresent } from '@cubejs-client/core';
|
|
4
4
|
|
|
5
5
|
import CubeContext from './CubeContext';
|
|
6
|
-
import { generateAnsiHTML } from './utils';
|
|
7
6
|
|
|
8
7
|
export default class QueryRenderer extends React.Component {
|
|
9
8
|
// @deprected use `isQueryPresent` from `@cubejs-client/core`
|
|
@@ -136,7 +135,7 @@ export default class QueryRenderer extends React.Component {
|
|
|
136
135
|
const { render } = this.props;
|
|
137
136
|
|
|
138
137
|
const loadState = {
|
|
139
|
-
error: error ? new Error(
|
|
138
|
+
error: error ? new Error(error.response?.plainError || error.message || error.toString()) : null,
|
|
140
139
|
resultSet: queries ? (resultSet || {}) : resultSet,
|
|
141
140
|
loadingState: { isLoading },
|
|
142
141
|
sqlQuery
|
package/src/utils.js
CHANGED
|
@@ -1,81 +1,3 @@
|
|
|
1
|
-
import Anser from 'anser';
|
|
2
|
-
import { encode } from 'html-entities';
|
|
3
|
-
|
|
4
|
-
const colors = {
|
|
5
|
-
reset: 'orange',
|
|
6
|
-
black: 'black',
|
|
7
|
-
red: 'red',
|
|
8
|
-
green: 'green',
|
|
9
|
-
yellow: 'orange',
|
|
10
|
-
blue: 'blue',
|
|
11
|
-
magenta: 'magenta',
|
|
12
|
-
cyan: 'cyan',
|
|
13
|
-
gray: 'gray',
|
|
14
|
-
lightgrey: 'lightgrey',
|
|
15
|
-
darkgrey: 'darkgrey',
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const anserMap = {
|
|
19
|
-
'ansi-bright-black': 'black',
|
|
20
|
-
'ansi-bright-yellow': 'yellow',
|
|
21
|
-
'ansi-yellow': 'yellow',
|
|
22
|
-
'ansi-bright-green': 'green',
|
|
23
|
-
'ansi-green': 'green',
|
|
24
|
-
'ansi-bright-cyan': 'cyan',
|
|
25
|
-
'ansi-cyan': 'cyan',
|
|
26
|
-
'ansi-bright-red': 'red',
|
|
27
|
-
'ansi-red': 'red',
|
|
28
|
-
'ansi-bright-magenta': 'magenta',
|
|
29
|
-
'ansi-magenta': 'magenta',
|
|
30
|
-
'ansi-white': 'darkgrey',
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
export function generateAnsiHTML(txt) {
|
|
34
|
-
const arr = new Anser().ansiToJson(encode(txt), {
|
|
35
|
-
use_classes: true,
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
let result = '';
|
|
39
|
-
let open = false;
|
|
40
|
-
for (let index = 0; index < arr.length; ++index) {
|
|
41
|
-
const c = arr[index];
|
|
42
|
-
const { content } = c;
|
|
43
|
-
const { fg } = c;
|
|
44
|
-
|
|
45
|
-
const contentParts = content.split('\n');
|
|
46
|
-
for (let j = 0; j < contentParts.length; ++j) {
|
|
47
|
-
if (!open) {
|
|
48
|
-
result += '<span data-ansi-line="true">';
|
|
49
|
-
open = true;
|
|
50
|
-
}
|
|
51
|
-
const part = contentParts[j].replace('\r', '');
|
|
52
|
-
const color = colors[anserMap[fg]];
|
|
53
|
-
|
|
54
|
-
if (color != null) {
|
|
55
|
-
result += `<span style="color: ${color};">${part}</span>`;
|
|
56
|
-
} else {
|
|
57
|
-
if (fg != null) {
|
|
58
|
-
console.log('Missing color mapping: ', fg);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
result += `<span>${part}</span>`;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (j < contentParts.length - 1) {
|
|
65
|
-
result += '</span>';
|
|
66
|
-
open = false;
|
|
67
|
-
result += '<br/>';
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (open) {
|
|
73
|
-
result += '</span>';
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return result;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
1
|
export function removeEmpty(obj) {
|
|
80
2
|
if (typeof obj !== 'object') {
|
|
81
3
|
return obj;
|