@finos/legend-query-builder 4.15.24 → 4.15.26
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/components/QueryBuilder.d.ts.map +1 -1
- package/lib/components/QueryBuilder.js +2 -2
- package/lib/components/QueryBuilder.js.map +1 -1
- package/lib/components/data-cube/QueryBuilderDataCube.d.ts +7 -3
- package/lib/components/data-cube/QueryBuilderDataCube.d.ts.map +1 -1
- package/lib/components/data-cube/QueryBuilderDataCube.js +11 -15
- package/lib/components/data-cube/QueryBuilderDataCube.js.map +1 -1
- package/lib/components/result/QueryBuilderResultPanel.js +2 -2
- package/lib/components/result/QueryBuilderResultPanel.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/QueryBuilderState.d.ts +4 -2
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +16 -5
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/data-cube/QueryBuilderDataCubeEngine.d.ts +3 -3
- package/lib/stores/data-cube/QueryBuilderDataCubeEngine.d.ts.map +1 -1
- package/lib/stores/data-cube/QueryBuilderDataCubeEngine.js +9 -6
- package/lib/stores/data-cube/QueryBuilderDataCubeEngine.js.map +1 -1
- package/lib/stores/data-cube/QueryBuilderDataCubeEngineHelper.d.ts +2 -2
- package/lib/stores/data-cube/QueryBuilderDataCubeEngineHelper.d.ts.map +1 -1
- package/lib/stores/data-cube/QueryBuilderDataCubeEngineHelper.js +0 -1
- package/lib/stores/data-cube/QueryBuilderDataCubeEngineHelper.js.map +1 -1
- package/package.json +1 -1
- package/src/components/QueryBuilder.tsx +6 -3
- package/src/components/data-cube/QueryBuilderDataCube.tsx +31 -27
- package/src/components/result/QueryBuilderResultPanel.tsx +2 -2
- package/src/index.ts +1 -0
- package/src/stores/QueryBuilderState.ts +19 -5
- package/src/stores/data-cube/QueryBuilderDataCubeEngine.ts +16 -16
- package/src/stores/data-cube/QueryBuilderDataCubeEngineHelper.ts +1 -2
@@ -15,7 +15,6 @@
|
|
15
15
|
*/
|
16
16
|
|
17
17
|
import { DataCube } from '@finos/legend-data-cube';
|
18
|
-
import type { QueryBuilderState } from '../../stores/QueryBuilderState.js';
|
19
18
|
import { observer } from 'mobx-react-lite';
|
20
19
|
import {
|
21
20
|
clsx,
|
@@ -25,56 +24,61 @@ import {
|
|
25
24
|
ModalFooterButton,
|
26
25
|
TimesIcon,
|
27
26
|
} from '@finos/legend-art';
|
28
|
-
import {
|
27
|
+
import type { QueryBuilderDataCubeEngine } from '../../stores/data-cube/QueryBuilderDataCubeEngine.js';
|
29
28
|
|
30
|
-
const
|
31
|
-
(props: {
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
},
|
40
|
-
);
|
41
|
-
|
42
|
-
export const QueryBuilderDataCubeDialog = observer(
|
43
|
-
(props: { queryBuilderState: QueryBuilderState }) => {
|
44
|
-
const { queryBuilderState } = props;
|
45
|
-
const closeModal = () => queryBuilderState.setIsCubeEnabled(false);
|
29
|
+
export const QueryDataCubeViewer = observer(
|
30
|
+
(props: {
|
31
|
+
engine: QueryBuilderDataCubeEngine;
|
32
|
+
close: () => void;
|
33
|
+
options?: {
|
34
|
+
fullScreen: boolean;
|
35
|
+
};
|
36
|
+
}) => {
|
37
|
+
const { engine, close, options } = props;
|
46
38
|
return (
|
47
39
|
<Dialog
|
48
40
|
open={true}
|
49
|
-
onClose={
|
41
|
+
onClose={close}
|
50
42
|
classes={{
|
51
43
|
root: 'editor-modal__root-container',
|
52
44
|
container: 'editor-modal__container',
|
53
|
-
paper: 'editor-modal__content',
|
45
|
+
paper: clsx('editor-modal__content', {
|
46
|
+
'query-builder-data-cube__dialog__container__content':
|
47
|
+
options?.fullScreen,
|
48
|
+
}),
|
54
49
|
}}
|
55
50
|
>
|
56
51
|
<Modal
|
57
52
|
darkMode={false}
|
58
|
-
className={clsx('editor-modal query-builder-data-cube__dialog'
|
53
|
+
className={clsx('editor-modal query-builder-data-cube__dialog', {
|
54
|
+
'query-builder-data-cube__dialog--expanded': options?.fullScreen,
|
55
|
+
})}
|
59
56
|
>
|
60
57
|
<div className="query-builder-data-cube__dialog__header">
|
61
58
|
<div className="query-builder-data-cube__dialog__header__actions">
|
62
59
|
<button
|
63
60
|
className="query-builder-data-cube__dialog__header__action"
|
64
61
|
tabIndex={-1}
|
65
|
-
onClick={
|
62
|
+
onClick={close}
|
66
63
|
title="Close"
|
67
64
|
>
|
68
65
|
<TimesIcon />
|
69
66
|
</button>
|
70
67
|
</div>
|
71
68
|
</div>
|
72
|
-
<div
|
73
|
-
|
69
|
+
<div
|
70
|
+
className={clsx('query-builder-data-cube__dialog__content', {
|
71
|
+
'query-builder-data-cube__dialog__content-full':
|
72
|
+
options?.fullScreen,
|
73
|
+
})}
|
74
|
+
>
|
75
|
+
<DataCube engine={engine} />
|
74
76
|
</div>
|
75
|
-
|
76
|
-
<
|
77
|
-
|
77
|
+
{!options?.fullScreen && (
|
78
|
+
<ModalFooter>
|
79
|
+
<ModalFooterButton onClick={close}>Close</ModalFooterButton>
|
80
|
+
</ModalFooter>
|
81
|
+
)}
|
78
82
|
</Modal>
|
79
83
|
</Dialog>
|
80
84
|
);
|
@@ -421,13 +421,13 @@ export const QueryBuilderResultPanel = observer(
|
|
421
421
|
) {
|
422
422
|
queryParametersState.parameterValuesEditorState.open(
|
423
423
|
(): Promise<void> => {
|
424
|
-
queryBuilderState.
|
424
|
+
queryBuilderState.openDataCubeEngine();
|
425
425
|
return Promise.resolve();
|
426
426
|
},
|
427
427
|
PARAMETER_SUBMIT_ACTION.DATA_CUBE,
|
428
428
|
);
|
429
429
|
} else {
|
430
|
-
queryBuilderState.
|
430
|
+
queryBuilderState.openDataCubeEngine();
|
431
431
|
}
|
432
432
|
};
|
433
433
|
const cancelQuery = applicationStore.guardUnhandledError(() =>
|
package/src/index.ts
CHANGED
@@ -30,6 +30,7 @@ export {
|
|
30
30
|
QueryBuilder_LegendApplicationPlugin,
|
31
31
|
} from './components/QueryBuilder_LegendApplicationPlugin.js';
|
32
32
|
export { QueryBuilderNavigationBlocker } from './components/QueryBuilderNavigationBlocker.js';
|
33
|
+
export { QueryDataCubeViewer } from './components/data-cube/QueryBuilderDataCube.js';
|
33
34
|
export { QueryBuilder } from './components/QueryBuilder.js';
|
34
35
|
export { QUERY_BUILDER_COMPONENT_ELEMENT_ID } from './components/QueryBuilderComponentElement.js';
|
35
36
|
export {
|
@@ -110,6 +110,8 @@ import { QueryBuilderChangeHistoryState } from './QueryBuilderChangeHistoryState
|
|
110
110
|
import { type QueryBuilderWorkflowState } from './query-workflow/QueryBuilderWorkFlowState.js';
|
111
111
|
import { type QueryChatState } from './QueryChatState.js';
|
112
112
|
import type { QueryBuilder_LegendApplicationPlugin_Extension } from './QueryBuilder_LegendApplicationPlugin_Extension.js';
|
113
|
+
import type { QueryBuilderDataCubeEngine } from './data-cube/QueryBuilderDataCubeEngine.js';
|
114
|
+
import { createDataCubeEngineFromQueryBuilder } from './data-cube/QueryBuilderDataCubeEngineHelper.js';
|
113
115
|
|
114
116
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
115
117
|
export interface QueryableSourceInfo {}
|
@@ -162,7 +164,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
162
164
|
isCheckingEntitlments = false;
|
163
165
|
isCalendarEnabled = false;
|
164
166
|
isLocalModeEnabled = false;
|
165
|
-
|
167
|
+
dataCubeEngine: QueryBuilderDataCubeEngine | undefined;
|
166
168
|
INTERNAL__enableInitializingDefaultSimpleExpressionValue = false;
|
167
169
|
|
168
170
|
lambdaWriteMode = QUERY_BUILDER_LAMBDA_WRITER_MODE.STANDARD;
|
@@ -215,7 +217,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
215
217
|
queryChatState: observable,
|
216
218
|
isQueryChatOpened: observable,
|
217
219
|
isLocalModeEnabled: observable,
|
218
|
-
|
220
|
+
dataCubeEngine: observable,
|
219
221
|
getAllFunction: observable,
|
220
222
|
lambdaWriteMode: observable,
|
221
223
|
INTERNAL__enableInitializingDefaultSimpleExpressionValue: observable,
|
@@ -229,7 +231,8 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
229
231
|
setShowParametersPanel: action,
|
230
232
|
setIsEditingWatermark: action,
|
231
233
|
setIsCalendarEnabled: action,
|
232
|
-
|
234
|
+
setDataCubeEngine: action,
|
235
|
+
openDataCubeEngine: action,
|
233
236
|
setIsCheckingEntitlments: action,
|
234
237
|
setClass: action,
|
235
238
|
setIsQueryChatOpened: action,
|
@@ -412,8 +415,8 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
412
415
|
this.isLocalModeEnabled = val;
|
413
416
|
}
|
414
417
|
|
415
|
-
|
416
|
-
this.
|
418
|
+
setDataCubeEngine(val: QueryBuilderDataCubeEngine | undefined): void {
|
419
|
+
this.dataCubeEngine = val;
|
417
420
|
}
|
418
421
|
|
419
422
|
setInternalize(val: QueryBuilderInternalizeState | undefined): void {
|
@@ -466,6 +469,17 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
466
469
|
return !this.unsupportedQueryState.rawLambda;
|
467
470
|
}
|
468
471
|
|
472
|
+
openDataCubeEngine(): void {
|
473
|
+
try {
|
474
|
+
this.setDataCubeEngine(createDataCubeEngineFromQueryBuilder(this));
|
475
|
+
} catch (error) {
|
476
|
+
assertErrorThrown(error);
|
477
|
+
this.applicationStore.notificationService.notifyError(
|
478
|
+
`Unable to open data cube in query builder`,
|
479
|
+
);
|
480
|
+
}
|
481
|
+
}
|
482
|
+
|
469
483
|
registerCommands(): void {
|
470
484
|
this.applicationStore.commandService.registerCommand({
|
471
485
|
key: QUERY_BUILDER_COMMAND_KEY.COMPILE,
|
@@ -46,7 +46,7 @@ import { guaranteeType, isNonNullable, LogService } from '@finos/legend-shared';
|
|
46
46
|
|
47
47
|
class QueryBuilderDataCubeSource extends DataCubeSource {
|
48
48
|
mapping?: string | undefined;
|
49
|
-
runtime
|
49
|
+
runtime: string | undefined;
|
50
50
|
}
|
51
51
|
|
52
52
|
export class QueryBuilderDataCubeEngine extends DataCubeEngine {
|
@@ -55,14 +55,14 @@ export class QueryBuilderDataCubeEngine extends DataCubeEngine {
|
|
55
55
|
readonly selectInitialQuery: RawLambda;
|
56
56
|
readonly mappingPath: string | undefined;
|
57
57
|
readonly parameterValues: ParameterValue[] | undefined;
|
58
|
-
readonly runtimePath: string;
|
58
|
+
readonly runtimePath: string | undefined;
|
59
59
|
_parameters: object | undefined;
|
60
60
|
|
61
61
|
constructor(
|
62
62
|
selectQuery: RawLambda,
|
63
63
|
parameterValues: ParameterValue[] | undefined,
|
64
64
|
mappingPath: string | undefined,
|
65
|
-
runtimePath: string,
|
65
|
+
runtimePath: string | undefined,
|
66
66
|
graphManagerState: GraphManagerState,
|
67
67
|
) {
|
68
68
|
super();
|
@@ -110,7 +110,7 @@ export class QueryBuilderDataCubeEngine extends DataCubeEngine {
|
|
110
110
|
const columns = (await this.getRelationalType(this.selectInitialQuery))
|
111
111
|
.columns;
|
112
112
|
const query = new DataCubeQuery();
|
113
|
-
query.query =
|
113
|
+
query.query = `~[${columns.map((e) => `'${e.name}'`)}]->select()`;
|
114
114
|
const source = new QueryBuilderDataCubeSource();
|
115
115
|
source.sourceColumns = columns;
|
116
116
|
source.mapping = this.mappingPath;
|
@@ -129,10 +129,7 @@ export class QueryBuilderDataCubeEngine extends DataCubeEngine {
|
|
129
129
|
private buildRawLambdaFromValueSpec(query: V1_Lambda): RawLambda {
|
130
130
|
const json = guaranteeType(
|
131
131
|
V1_deserializeRawValueSpecification(
|
132
|
-
V1_serializeValueSpecification(
|
133
|
-
query.body[0] as V1_ValueSpecification,
|
134
|
-
[],
|
135
|
-
),
|
132
|
+
V1_serializeValueSpecification(query, []),
|
136
133
|
),
|
137
134
|
V1_RawLambda,
|
138
135
|
);
|
@@ -180,7 +177,7 @@ export class QueryBuilderDataCubeEngine extends DataCubeEngine {
|
|
180
177
|
);
|
181
178
|
}
|
182
179
|
|
183
|
-
|
180
|
+
async getRelationalType(query: RawLambda): Promise<RelationType> {
|
184
181
|
const relationType =
|
185
182
|
await this.graphState.graphManager.getLambdaRelationType(
|
186
183
|
query,
|
@@ -245,13 +242,16 @@ export class QueryBuilderDataCubeEngine extends DataCubeEngine {
|
|
245
242
|
source: DataCubeSource,
|
246
243
|
): V1_AppliedFunction | undefined {
|
247
244
|
if (source instanceof QueryBuilderDataCubeSource) {
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
245
|
+
const appendFromFunc = Boolean(source.mapping ?? source.runtime);
|
246
|
+
return appendFromFunc
|
247
|
+
? _function(
|
248
|
+
DataCubeFunction.FROM,
|
249
|
+
[
|
250
|
+
source.mapping ? _elementPtr(source.mapping) : undefined,
|
251
|
+
source.runtime ? _elementPtr(source.runtime) : undefined,
|
252
|
+
].filter(isNonNullable),
|
253
|
+
)
|
254
|
+
: undefined;
|
255
255
|
}
|
256
256
|
return undefined;
|
257
257
|
}
|
@@ -14,7 +14,6 @@
|
|
14
14
|
* limitations under the License.
|
15
15
|
*/
|
16
16
|
|
17
|
-
import { type DataCubeEngine } from '@finos/legend-data-cube';
|
18
17
|
import {
|
19
18
|
QUERY_BUILDER_LAMBDA_WRITER_MODE,
|
20
19
|
type QueryBuilderState,
|
@@ -25,7 +24,7 @@ import { buildExecutionParameterValues } from '../shared/LambdaParameterState.js
|
|
25
24
|
|
26
25
|
export const createDataCubeEngineFromQueryBuilder = (
|
27
26
|
queryBuilderState: QueryBuilderState,
|
28
|
-
):
|
27
|
+
): QueryBuilderDataCubeEngine | undefined => {
|
29
28
|
const runtime =
|
30
29
|
queryBuilderState.executionContextState.runtimeValue instanceof
|
31
30
|
RuntimePointer
|