@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.
Files changed (23) hide show
  1. package/lib/components/explorer/QueryBuilderExplorerPanel.d.ts +3 -0
  2. package/lib/components/explorer/QueryBuilderExplorerPanel.d.ts.map +1 -1
  3. package/lib/components/explorer/QueryBuilderExplorerPanel.js +19 -1
  4. package/lib/components/explorer/QueryBuilderExplorerPanel.js.map +1 -1
  5. package/lib/index.css +2 -2
  6. package/lib/index.css.map +1 -1
  7. package/lib/package.json +2 -2
  8. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts +4 -0
  9. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts.map +1 -1
  10. package/lib/stores/explorer/QueryBuilderExplorerState.js +15 -5
  11. package/lib/stores/explorer/QueryBuilderExplorerState.js.map +1 -1
  12. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.d.ts.map +1 -1
  13. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js +9 -4
  14. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js.map +1 -1
  15. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.d.ts +2 -1
  16. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.d.ts.map +1 -1
  17. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.js +41 -3
  18. package/lib/stores/fetch-structure/projection/QueryBuilderProjectionState.js.map +1 -1
  19. package/package.json +9 -9
  20. package/src/components/explorer/QueryBuilderExplorerPanel.tsx +55 -0
  21. package/src/stores/explorer/QueryBuilderExplorerState.ts +29 -8
  22. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.ts +19 -9
  23. 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
- subType: Type | undefined,
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 ? subType.path : ''
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
- generateNodeId(property, subType, parentNodeId),
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 = generateNodeId(
252
- propertyGraphFetchTree.property.value,
253
- propertyGraphFetchTree.subType?.value,
254
- currentNodeId,
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
  }