@finos/legend-application-query 5.2.5 → 5.2.6
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/lib/components/explorer/QueryBuilderExplorerPanel.d.ts +3 -0
- package/lib/components/explorer/QueryBuilderExplorerPanel.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderExplorerPanel.js +19 -1
- package/lib/components/explorer/QueryBuilderExplorerPanel.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/explorer/QueryBuilderExplorerState.d.ts +4 -0
- package/lib/stores/explorer/QueryBuilderExplorerState.d.ts.map +1 -1
- package/lib/stores/explorer/QueryBuilderExplorerState.js +15 -5
- package/lib/stores/explorer/QueryBuilderExplorerState.js.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.d.ts.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js +9 -4
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js.map +1 -1
- package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.d.ts +2 -1
- package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.js +41 -3
- package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.js.map +1 -1
- package/package.json +9 -9
- package/src/components/explorer/QueryBuilderExplorerPanel.tsx +55 -0
- package/src/stores/explorer/QueryBuilderExplorerState.ts +29 -8
- package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.ts +19 -9
- package/src/stores/fetch-structure/projection/QueryBuilderProjectionState.ts +75 -1
@@ -25,6 +25,7 @@ import {
|
|
25
25
|
Class,
|
26
26
|
PropertyGraphFetchTree,
|
27
27
|
PackageableElementExplicitReference,
|
28
|
+
TYPE_CAST_TOKEN,
|
28
29
|
} from '@finos/legend-graph';
|
29
30
|
import {
|
30
31
|
type QueryBuilderExplorerTreeNodeData,
|
@@ -72,11 +73,16 @@ export interface QueryBuilderGraphFetchTreeData
|
|
72
73
|
|
73
74
|
const generateNodeId = (
|
74
75
|
property: AbstractProperty,
|
75
|
-
|
76
|
+
parentNodeId: string | undefined,
|
77
|
+
): string => `${parentNodeId ? `${parentNodeId}.` : ''}${property.name}`;
|
78
|
+
|
79
|
+
const generateNodeIdForSubType = (
|
80
|
+
property: AbstractProperty,
|
81
|
+
subType: Type,
|
76
82
|
parentNodeId: string | undefined,
|
77
83
|
): string =>
|
78
|
-
`${parentNodeId ? `${parentNodeId}.` : ''}${property.name}${
|
79
|
-
subType
|
84
|
+
`${parentNodeId ? `${parentNodeId}.` : ''}${property.name}${TYPE_CAST_TOKEN}${
|
85
|
+
subType.path
|
80
86
|
}`;
|
81
87
|
|
82
88
|
const buildGraphFetchSubTree = (
|
@@ -93,7 +99,9 @@ const buildGraphFetchSubTree = (
|
|
93
99
|
const subType = tree.subType?.value;
|
94
100
|
const parentNodeId = parentNode?.id;
|
95
101
|
const node = new QueryBuilderGraphFetchTreeNodeData(
|
96
|
-
|
102
|
+
subType
|
103
|
+
? generateNodeIdForSubType(property, subType, parentNodeId)
|
104
|
+
: generateNodeId(property, parentNodeId),
|
97
105
|
property.name,
|
98
106
|
parentNodeId,
|
99
107
|
tree,
|
@@ -248,11 +256,13 @@ export const addQueryBuilderPropertyNode = (
|
|
248
256
|
let parentNode: QueryBuilderGraphFetchTreeNodeData | undefined = undefined;
|
249
257
|
let newSubTree: PropertyGraphFetchTree | undefined;
|
250
258
|
for (const propertyGraphFetchTree of propertyGraphFetchTrees) {
|
251
|
-
currentNodeId =
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
259
|
+
currentNodeId = propertyGraphFetchTree.subType?.value
|
260
|
+
? generateNodeIdForSubType(
|
261
|
+
propertyGraphFetchTree.property.value,
|
262
|
+
propertyGraphFetchTree.subType.value,
|
263
|
+
currentNodeId,
|
264
|
+
)
|
265
|
+
: generateNodeId(propertyGraphFetchTree.property.value, currentNodeId);
|
256
266
|
const existingGraphFetchNode = treeData.nodes.get(currentNodeId);
|
257
267
|
if (existingGraphFetchNode) {
|
258
268
|
parentNode = existingGraphFetchNode;
|
@@ -42,10 +42,15 @@ import {
|
|
42
42
|
LAMBDA_PIPE,
|
43
43
|
RawLambda,
|
44
44
|
isStubbed_RawLambda,
|
45
|
+
AbstractPropertyExpression,
|
46
|
+
matchFunctionName,
|
47
|
+
SimpleFunctionExpression,
|
48
|
+
type ValueSpecification,
|
45
49
|
} from '@finos/legend-graph';
|
46
50
|
import {
|
47
51
|
DEFAULT_LAMBDA_VARIABLE_NAME,
|
48
52
|
QUERY_BUILDER_SOURCE_ID_LABEL,
|
53
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS,
|
49
54
|
} from '../../../QueryBuilder_Const.js';
|
50
55
|
import { QueryBuilderAggregationState } from './aggregation/QueryBuilderAggregationState.js';
|
51
56
|
import { buildGenericLambdaFunctionInstanceValue } from '../../QueryBuilderValueSpecificationHelper.js';
|
@@ -58,10 +63,14 @@ import type { QueryBuilderAggregateOperator } from './aggregation/QueryBuilderAg
|
|
58
63
|
import { getQueryBuilderCoreAggregrationOperators } from './aggregation/QueryBuilderAggregateOperatorLoader.js';
|
59
64
|
import {
|
60
65
|
QueryBuilderDerivationProjectionColumnState,
|
66
|
+
QueryBuilderSimpleProjectionColumnState,
|
61
67
|
type QueryBuilderProjectionColumnState,
|
62
|
-
type QueryBuilderSimpleProjectionColumnState,
|
63
68
|
} from './QueryBuilderProjectionColumnState.js';
|
64
69
|
import type { QueryBuilderFetchStructureState } from '../QueryBuilderFetchStructureState.js';
|
70
|
+
import {
|
71
|
+
getPropertyNodeId,
|
72
|
+
getPropertyNodeIdForSubType,
|
73
|
+
} from '../../explorer/QueryBuilderExplorerState.js';
|
65
74
|
|
66
75
|
export class QueryBuilderProjectionState extends QueryBuilderFetchStructureImplementationState {
|
67
76
|
columns: QueryBuilderProjectionColumnState[] = [];
|
@@ -387,4 +396,69 @@ export class QueryBuilderProjectionState extends QueryBuilderFetchStructureImple
|
|
387
396
|
),
|
388
397
|
);
|
389
398
|
}
|
399
|
+
|
400
|
+
get usedPropertyNodeIds(): string[] {
|
401
|
+
let usedNodeIds: string[] = [];
|
402
|
+
this.columns.forEach((column) => {
|
403
|
+
if (column instanceof QueryBuilderSimpleProjectionColumnState) {
|
404
|
+
let nodeIds: string[] = [];
|
405
|
+
const subClassNames = [];
|
406
|
+
let currentPropertyExpression: ValueSpecification =
|
407
|
+
column.propertyExpressionState.propertyExpression;
|
408
|
+
while (
|
409
|
+
currentPropertyExpression instanceof AbstractPropertyExpression
|
410
|
+
) {
|
411
|
+
nodeIds.push(currentPropertyExpression.func.name);
|
412
|
+
currentPropertyExpression = guaranteeNonNullable(
|
413
|
+
currentPropertyExpression.parametersValues[0],
|
414
|
+
);
|
415
|
+
if (
|
416
|
+
currentPropertyExpression instanceof SimpleFunctionExpression &&
|
417
|
+
matchFunctionName(
|
418
|
+
currentPropertyExpression.functionName,
|
419
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.SUBTYPE,
|
420
|
+
) &&
|
421
|
+
currentPropertyExpression.parametersValues.length >= 1 &&
|
422
|
+
currentPropertyExpression.parametersValues[1]?.genericType?.value
|
423
|
+
.rawType.path
|
424
|
+
) {
|
425
|
+
nodeIds.push(
|
426
|
+
currentPropertyExpression.parametersValues[1]?.genericType?.value
|
427
|
+
.rawType.path,
|
428
|
+
);
|
429
|
+
subClassNames.push(
|
430
|
+
currentPropertyExpression.parametersValues[1]?.genericType?.value
|
431
|
+
.rawType.path,
|
432
|
+
);
|
433
|
+
currentPropertyExpression = guaranteeNonNullable(
|
434
|
+
currentPropertyExpression.parametersValues[0],
|
435
|
+
);
|
436
|
+
}
|
437
|
+
}
|
438
|
+
nodeIds = nodeIds.reverse();
|
439
|
+
if (
|
440
|
+
nodeIds.length &&
|
441
|
+
subClassNames.includes(guaranteeNonNullable(nodeIds[0]))
|
442
|
+
) {
|
443
|
+
nodeIds[0] = getPropertyNodeIdForSubType(
|
444
|
+
'',
|
445
|
+
guaranteeNonNullable(nodeIds[0]),
|
446
|
+
);
|
447
|
+
}
|
448
|
+
for (let i = 1; i < nodeIds.length; i++) {
|
449
|
+
nodeIds[i] = subClassNames.includes(guaranteeNonNullable(nodeIds[i]))
|
450
|
+
? getPropertyNodeIdForSubType(
|
451
|
+
guaranteeNonNullable(nodeIds[i - 1]),
|
452
|
+
guaranteeNonNullable(nodeIds[i]),
|
453
|
+
)
|
454
|
+
: getPropertyNodeId(
|
455
|
+
guaranteeNonNullable(nodeIds[i - 1]),
|
456
|
+
guaranteeNonNullable(nodeIds[i]),
|
457
|
+
);
|
458
|
+
}
|
459
|
+
usedNodeIds = usedNodeIds.concat(nodeIds);
|
460
|
+
}
|
461
|
+
});
|
462
|
+
return usedNodeIds;
|
463
|
+
}
|
390
464
|
}
|