@finos/legend-query-builder 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderResultPanel.js +6 -7
- package/lib/components/QueryBuilderResultPanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +19 -17
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js +31 -29
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +2 -2
- package/lib/stores/QueryBuilderResultState.d.ts +7 -3
- package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderResultState.js +14 -20
- package/lib/stores/QueryBuilderResultState.js.map +1 -1
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts +3 -0
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.js.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts +10 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js +36 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts +6 -0
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +21 -2
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
- package/package.json +9 -9
- package/src/components/QueryBuilderResultPanel.tsx +18 -20
- package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +128 -126
- package/src/components/fetch-structure/QueryBuilderTDSWindowPanel.tsx +254 -251
- package/src/stores/QueryBuilderResultState.ts +28 -33
- package/src/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.ts +5 -0
- package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.ts +44 -0
- package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +28 -0
@@ -26,6 +26,7 @@ import type { QueryBuilderExplorerTreePropertyNodeData } from '../explorer/Query
|
|
26
26
|
import type { QueryBuilderState } from '../QueryBuilderState.js';
|
27
27
|
import type { LambdaFunctionBuilderOption } from '../QueryBuilderValueSpecificationBuilderHelper.js';
|
28
28
|
import type { QueryBuilderFetchStructureState } from './QueryBuilderFetchStructureState.js';
|
29
|
+
import type { ExportDataInfo } from '../QueryBuilderResultState.js';
|
29
30
|
|
30
31
|
export enum FETCH_STRUCTURE_IMPLEMENTATION {
|
31
32
|
TABULAR_DATA_STRUCTURE = 'TABULAR_DATA_STRUCTURE',
|
@@ -75,4 +76,8 @@ export abstract class QueryBuilderFetchStructureImplementationState
|
|
75
76
|
get TEMPORARY__showPostFetchStructurePanel(): boolean {
|
76
77
|
return this.queryBuilderState.filterState.showPanel;
|
77
78
|
}
|
79
|
+
|
80
|
+
// export options
|
81
|
+
abstract get exportDataFormatOptions(): string[];
|
82
|
+
abstract getExportDataInfo(format: string): ExportDataInfo;
|
78
83
|
}
|
@@ -51,15 +51,22 @@ import {
|
|
51
51
|
guaranteeNonNullable,
|
52
52
|
hashArray,
|
53
53
|
type Hashable,
|
54
|
+
UnsupportedOperationError,
|
55
|
+
ContentType,
|
54
56
|
} from '@finos/legend-shared';
|
55
57
|
import { QUERY_BUILDER_HASH_STRUCTURE } from '../../../graphManager/QueryBuilderHashUtils.js';
|
56
58
|
import { isValueExpressionReferencedInValue } from '../../QueryBuilderValueSpecificationHelper.js';
|
59
|
+
import type { ExportDataInfo } from '../../QueryBuilderResultState.js';
|
57
60
|
|
58
61
|
export enum SERIALIZATION_TYPE {
|
59
62
|
PURE = 'PURE',
|
60
63
|
EXTERNAL_FORMAT = 'EXTERNAL_FORMAT',
|
61
64
|
}
|
62
65
|
|
66
|
+
export enum GRAPH_FETCH_EXPORT_DATA_FORMAT {
|
67
|
+
RESULT = 'RESULT',
|
68
|
+
}
|
69
|
+
|
63
70
|
const DEFAULT_PURE_CONFIG_TYPE_NAME = '@type';
|
64
71
|
|
65
72
|
export class PureSerializationConfig {
|
@@ -135,6 +142,8 @@ export abstract class GraphFetchSerializationState {
|
|
135
142
|
}
|
136
143
|
|
137
144
|
abstract getLabel(): string;
|
145
|
+
|
146
|
+
abstract get serializationContentType(): ContentType;
|
138
147
|
}
|
139
148
|
|
140
149
|
export class GraphFetchPureSerializationState extends GraphFetchSerializationState {
|
@@ -161,6 +170,10 @@ export class GraphFetchPureSerializationState extends GraphFetchSerializationSta
|
|
161
170
|
override getLabel(): string {
|
162
171
|
return SERIALIZATION_TYPE.PURE;
|
163
172
|
}
|
173
|
+
|
174
|
+
override get serializationContentType(): ContentType {
|
175
|
+
return ContentType.APPLICATION_JSON;
|
176
|
+
}
|
164
177
|
}
|
165
178
|
|
166
179
|
export class GraphFetchExternalFormatSerializationState extends GraphFetchSerializationState {
|
@@ -176,6 +189,7 @@ export class GraphFetchExternalFormatSerializationState extends GraphFetchSerial
|
|
176
189
|
makeObservable(this, {
|
177
190
|
targetBinding: observable,
|
178
191
|
treeData: observable.ref,
|
192
|
+
serializationContentType: computed,
|
179
193
|
});
|
180
194
|
this.targetBinding = targetBinding;
|
181
195
|
this.treeData = treeData;
|
@@ -192,6 +206,20 @@ export class GraphFetchExternalFormatSerializationState extends GraphFetchSerial
|
|
192
206
|
override getLabel(): string {
|
193
207
|
return SERIALIZATION_TYPE.EXTERNAL_FORMAT;
|
194
208
|
}
|
209
|
+
|
210
|
+
override get serializationContentType(): ContentType {
|
211
|
+
const contentType = this.targetBinding.contentType;
|
212
|
+
if (Object.values(ContentType).includes(contentType as ContentType)) {
|
213
|
+
return contentType as ContentType;
|
214
|
+
} else {
|
215
|
+
// TEMP: need to investigate if flatdata should be returned as content type
|
216
|
+
// for now we will assume all flatdata is csv
|
217
|
+
if (contentType === 'application/x.flatdata') {
|
218
|
+
return ContentType.TEXT_CSV;
|
219
|
+
}
|
220
|
+
return ContentType.TEXT_PLAIN;
|
221
|
+
}
|
222
|
+
}
|
195
223
|
}
|
196
224
|
|
197
225
|
export class QueryBuilderGraphFetchTreeState
|
@@ -321,6 +349,22 @@ export class QueryBuilderGraphFetchTreeState
|
|
321
349
|
);
|
322
350
|
}
|
323
351
|
|
352
|
+
override get exportDataFormatOptions(): string[] {
|
353
|
+
return [GRAPH_FETCH_EXPORT_DATA_FORMAT.RESULT];
|
354
|
+
}
|
355
|
+
|
356
|
+
override getExportDataInfo(format: string): ExportDataInfo {
|
357
|
+
if (format === GRAPH_FETCH_EXPORT_DATA_FORMAT.RESULT) {
|
358
|
+
return {
|
359
|
+
contentType: this.serializationState.serializationContentType,
|
360
|
+
};
|
361
|
+
} else {
|
362
|
+
throw new UnsupportedOperationError(
|
363
|
+
`Unsupported Graph Fetch export type ${format}`,
|
364
|
+
);
|
365
|
+
}
|
366
|
+
}
|
367
|
+
|
324
368
|
onClassChange(_class: Class | undefined): void {
|
325
369
|
this.updateTreeData(_class);
|
326
370
|
}
|
@@ -35,6 +35,8 @@ import {
|
|
35
35
|
filterByType,
|
36
36
|
type Hashable,
|
37
37
|
hashArray,
|
38
|
+
UnsupportedOperationError,
|
39
|
+
ContentType,
|
38
40
|
} from '@finos/legend-shared';
|
39
41
|
import type { QueryBuilderState } from '../../QueryBuilderState.js';
|
40
42
|
import {
|
@@ -52,6 +54,7 @@ import {
|
|
52
54
|
matchFunctionName,
|
53
55
|
SimpleFunctionExpression,
|
54
56
|
getAllSuperclasses,
|
57
|
+
EXECUTION_SERIALIZATION_FORMAT,
|
55
58
|
} from '@finos/legend-graph';
|
56
59
|
import {
|
57
60
|
DEFAULT_LAMBDA_VARIABLE_NAME,
|
@@ -97,6 +100,12 @@ import type { QueryBuilderTDS_WindowOperator } from './window/operators/QueryBui
|
|
97
100
|
import { getQueryBuilderCoreWindowOperators } from './window/QueryBuilderWindowGroupByOperatorLoader.js';
|
98
101
|
import type { QueryBuilderTDSColumnState } from './QueryBuilderTDSColumnState.js';
|
99
102
|
import { QUERY_BUILDER_SETTING_KEY } from '../../../application/QueryBuilderSetting.js';
|
103
|
+
import type { ExportDataInfo } from '../../QueryBuilderResultState.js';
|
104
|
+
|
105
|
+
// TODO: should we support raw once externalize() is supported on TDS ?
|
106
|
+
export enum TDS_EXECUTION_SERIALIZATION_FORMAT {
|
107
|
+
CSV = 'CSV',
|
108
|
+
}
|
100
109
|
|
101
110
|
export class QueryBuilderTDSState
|
102
111
|
extends QueryBuilderFetchStructureImplementationState
|
@@ -289,6 +298,25 @@ export class QueryBuilderTDSState
|
|
289
298
|
];
|
290
299
|
}
|
291
300
|
|
301
|
+
override get exportDataFormatOptions(): string[] {
|
302
|
+
return [TDS_EXECUTION_SERIALIZATION_FORMAT.CSV];
|
303
|
+
}
|
304
|
+
|
305
|
+
override getExportDataInfo(format: string): ExportDataInfo {
|
306
|
+
switch (format) {
|
307
|
+
case TDS_EXECUTION_SERIALIZATION_FORMAT.CSV:
|
308
|
+
return {
|
309
|
+
contentType: ContentType.TEXT_CSV,
|
310
|
+
serializationFormat: EXECUTION_SERIALIZATION_FORMAT.CSV,
|
311
|
+
};
|
312
|
+
|
313
|
+
default:
|
314
|
+
throw new UnsupportedOperationError(
|
315
|
+
`Unsupported TDS export type ${format}`,
|
316
|
+
);
|
317
|
+
}
|
318
|
+
}
|
319
|
+
|
292
320
|
isDuplicateColumn(col: QueryBuilderTDSColumnState): boolean {
|
293
321
|
return (
|
294
322
|
this.tdsColumns.filter((c) => c.columnName === col.columnName).length > 1
|