@itwin/grouping-mapping-widget 0.8.3 → 0.9.0

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 (45) hide show
  1. package/lib/cjs/test/GroupPropertyUtils.test.d.ts +2 -0
  2. package/lib/cjs/test/GroupPropertyUtils.test.js +590 -0
  3. package/lib/cjs/test/GroupPropertyUtils.test.js.map +1 -0
  4. package/lib/cjs/test/MockFactory.d.ts +9 -0
  5. package/lib/cjs/test/MockFactory.js +42 -0
  6. package/lib/cjs/test/MockFactory.js.map +1 -0
  7. package/lib/cjs/test/PropertyFieldsHelpers.d.ts +86 -0
  8. package/lib/cjs/test/PropertyFieldsHelpers.js +80 -0
  9. package/lib/cjs/test/PropertyFieldsHelpers.js.map +1 -0
  10. package/lib/cjs/test/QueryBuilder.test.js +43 -148
  11. package/lib/cjs/test/QueryBuilder.test.js.map +1 -1
  12. package/lib/cjs/test/QueryBuilder.testdata.d.ts +3 -0
  13. package/lib/cjs/test/QueryBuilder.testdata.js +843 -0
  14. package/lib/cjs/test/QueryBuilder.testdata.js.map +1 -0
  15. package/lib/cjs/test/QueryBuilderTestData.d.ts +50 -0
  16. package/lib/cjs/test/QueryBuilderTestData.js +3 -0
  17. package/lib/cjs/test/QueryBuilderTestData.js.map +1 -0
  18. package/lib/cjs/widget/components/GroupPropertyUtils.js +7 -3
  19. package/lib/cjs/widget/components/GroupPropertyUtils.js.map +1 -1
  20. package/lib/cjs/widget/components/QueryBuilder.d.ts +11 -11
  21. package/lib/cjs/widget/components/QueryBuilder.js +50 -109
  22. package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
  23. package/lib/esm/test/GroupPropertyUtils.test.d.ts +2 -0
  24. package/lib/esm/test/GroupPropertyUtils.test.js +588 -0
  25. package/lib/esm/test/GroupPropertyUtils.test.js.map +1 -0
  26. package/lib/esm/test/MockFactory.d.ts +9 -0
  27. package/lib/esm/test/MockFactory.js +19 -0
  28. package/lib/esm/test/MockFactory.js.map +1 -0
  29. package/lib/esm/test/PropertyFieldsHelpers.d.ts +86 -0
  30. package/lib/esm/test/PropertyFieldsHelpers.js +69 -0
  31. package/lib/esm/test/PropertyFieldsHelpers.js.map +1 -0
  32. package/lib/esm/test/QueryBuilder.test.js +42 -147
  33. package/lib/esm/test/QueryBuilder.test.js.map +1 -1
  34. package/lib/esm/test/QueryBuilder.testdata.d.ts +3 -0
  35. package/lib/esm/test/QueryBuilder.testdata.js +840 -0
  36. package/lib/esm/test/QueryBuilder.testdata.js.map +1 -0
  37. package/lib/esm/test/QueryBuilderTestData.d.ts +50 -0
  38. package/lib/esm/test/QueryBuilderTestData.js +2 -0
  39. package/lib/esm/test/QueryBuilderTestData.js.map +1 -0
  40. package/lib/esm/widget/components/GroupPropertyUtils.js +7 -3
  41. package/lib/esm/widget/components/GroupPropertyUtils.js.map +1 -1
  42. package/lib/esm/widget/components/QueryBuilder.d.ts +11 -11
  43. package/lib/esm/widget/components/QueryBuilder.js +50 -109
  44. package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
  45. package/package.json +30 -28
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilder.testdata.js","sourceRoot":"","sources":["../../../src/test/QueryBuilder.testdata.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { QueryBuilderTestData } from \"./QueryBuilderTestData\";\n\nexport const testCases: QueryBuilderTestData = {\n testCases: [\n {\n name: \"when non-relational property added, return query string with property value\",\n expectedResult: \"SELECT A.B.ECInstanceId FROM A.B WHERE A.B.somePropName=1\",\n operations: [\n {\n expectedResult: true,\n operationType: \"addProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: 1,\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"number\",\n },\n parent: {\n pathToPrimaryClass: [],\n },\n },\n },\n ],\n },\n {\n name: \"when relational property added, return query string with property value and relation chain to it\",\n expectedResult: \"SELECT Z.X.ECInstanceId FROM Z.X JOIN Rel.CX ON Rel.CX.SourceECInstanceId=A.C.ECInstanceId JOIN A.C ON A.C.ECInstanceId=Rel.BC.SourceECInstanceId JOIN Rel.BC ON Rel.BC.TargetECInstanceId=A.B.ECInstanceId JOIN A.B ON A.B.somePropName='someString' WHERE Z.X.ECInstanceId=Rel.CX.TargetECInstanceId\",\n operations: [\n {\n expectedResult: true,\n operationType: \"addProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [\n {\n sourceClassInfo: {\n id: \"id1\",\n name: \"A:B\",\n label: \"AB label\",\n },\n targetClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n isPolymorphicTargetClass: true,\n relationshipInfo: {\n id: \"id3\",\n name: \"Rel:BC\",\n label: \"Relationship BC label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: false,\n },\n {\n sourceClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n targetClassInfo: {\n id: \"id4\",\n name: \"Z:X\",\n label: \"ZX label\",\n },\n isPolymorphicTargetClass: false,\n relationshipInfo: {\n id: \"id5\",\n name: \"Rel:CX\",\n label: \"Relationship CX label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: true,\n },\n ],\n contentClassInfo: {\n name: \"A:B\",\n },\n },\n },\n },\n ],\n },\n {\n name: \"when non-relational property removed, return empty string\",\n expectedResult: \"\",\n operations: [\n {\n expectedResult: true,\n operationType: \"addProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [],\n contentClassInfo: {\n name: \"sourceClassName\",\n },\n },\n },\n },\n {\n operationType: \"removeProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [],\n contentClassInfo: {\n name: \"sourceClassName\",\n },\n },\n },\n },\n ],\n },\n {\n name: \"when relational property removed, return empty string\",\n expectedResult: \"\",\n operations: [\n {\n expectedResult: true,\n operationType: \"addProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [\n {\n sourceClassInfo: {\n id: \"id1\",\n name: \"A:B\",\n label: \"AB label\",\n },\n targetClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n isPolymorphicTargetClass: true,\n relationshipInfo: {\n id: \"id3\",\n name: \"Rel:BC\",\n label: \"Relationship BC label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: false,\n },\n {\n sourceClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n targetClassInfo: {\n id: \"id4\",\n name: \"Z:X\",\n label: \"ZX label\",\n },\n isPolymorphicTargetClass: false,\n relationshipInfo: {\n id: \"id5\",\n name: \"Rel:CX\",\n label: \"Relationship CX label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: true,\n },\n ],\n contentClassInfo: {\n name: \"A:B\",\n },\n },\n },\n },\n {\n operationType: \"removeProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [\n {\n sourceClassInfo: {\n id: \"id1\",\n name: \"A:B\",\n label: \"AB label\",\n },\n targetClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n isPolymorphicTargetClass: true,\n relationshipInfo: {\n id: \"id3\",\n name: \"Rel:BC\",\n label: \"Relationship BC label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: false,\n },\n {\n sourceClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n targetClassInfo: {\n id: \"id4\",\n name: \"Z:X\",\n label: \"ZX label\",\n },\n isPolymorphicTargetClass: false,\n relationshipInfo: {\n id: \"id5\",\n name: \"Rel:CX\",\n label: \"Relationship CX label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: true,\n },\n ],\n contentClassInfo: {\n name: \"A:B\",\n },\n },\n },\n },\n ],\n },\n {\n name: \"when non-relational property re-added after removing, return query string with property value\",\n expectedResult: \"SELECT A.B.ECInstanceId FROM A.B WHERE A.B.somePropName='someOtherString'\",\n operations: [\n {\n expectedResult: true,\n operationType: \"addProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [],\n contentClassInfo: {\n name: \"sourceClassName\",\n },\n },\n },\n },\n {\n operationType: \"removeProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [],\n contentClassInfo: {\n name: \"sourceClassName\",\n },\n },\n },\n },\n {\n operationType: \"addProperty\",\n expectedResult: true,\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someOtherString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [],\n contentClassInfo: {\n name: \"sourceClassName\",\n },\n },\n },\n },\n ],\n },\n {\n name: \"when relational property re-added after removing, return query string with property value and relation chain to it\",\n expectedResult: \"SELECT Z.X.ECInstanceId FROM Z.X JOIN Rel.CX ON Rel.CX.SourceECInstanceId=A.C.ECInstanceId JOIN A.C ON A.C.ECInstanceId=Rel.BC.SourceECInstanceId JOIN Rel.BC ON Rel.BC.TargetECInstanceId=A.B.ECInstanceId JOIN A.B ON A.B.somePropName='someOtherString' WHERE Z.X.ECInstanceId=Rel.CX.TargetECInstanceId\",\n operations: [\n {\n expectedResult: true,\n operationType: \"addProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [\n {\n sourceClassInfo: {\n id: \"id1\",\n name: \"A:B\",\n label: \"AB label\",\n },\n targetClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n isPolymorphicTargetClass: true,\n relationshipInfo: {\n id: \"id3\",\n name: \"Rel:BC\",\n label: \"Relationship BC label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: false,\n },\n {\n sourceClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n targetClassInfo: {\n id: \"id4\",\n name: \"Z:X\",\n label: \"ZX label\",\n },\n isPolymorphicTargetClass: false,\n relationshipInfo: {\n id: \"id5\",\n name: \"Rel:CX\",\n label: \"Relationship CX label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: true,\n },\n ],\n contentClassInfo: {\n name: \"A:B\",\n },\n },\n },\n },\n {\n operationType: \"removeProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [\n {\n sourceClassInfo: {\n id: \"id1\",\n name: \"A:B\",\n label: \"AB label\",\n },\n targetClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n isPolymorphicTargetClass: true,\n relationshipInfo: {\n id: \"id3\",\n name: \"Rel:BC\",\n label: \"Relationship BC label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: false,\n },\n {\n sourceClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n targetClassInfo: {\n id: \"id4\",\n name: \"Z:X\",\n label: \"ZX label\",\n },\n isPolymorphicTargetClass: false,\n relationshipInfo: {\n id: \"id5\",\n name: \"Rel:CX\",\n label: \"Relationship CX label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: true,\n },\n ],\n contentClassInfo: {\n name: \"A:B\",\n },\n },\n },\n },\n {\n expectedResult: true,\n operationType: \"addProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someOtherString\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [\n {\n sourceClassInfo: {\n id: \"id1\",\n name: \"A:B\",\n label: \"AB label\",\n },\n targetClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n isPolymorphicTargetClass: true,\n relationshipInfo: {\n id: \"id3\",\n name: \"Rel:BC\",\n label: \"Relationship BC label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: false,\n },\n {\n sourceClassInfo: {\n id: \"id2\",\n name: \"A:C\",\n label: \"AC label\",\n },\n targetClassInfo: {\n id: \"id4\",\n name: \"Z:X\",\n label: \"ZX label\",\n },\n isPolymorphicTargetClass: false,\n relationshipInfo: {\n id: \"id5\",\n name: \"Rel:CX\",\n label: \"Relationship CX label\",\n },\n isPolymorphicRelationship: true,\n isForwardRelationship: true,\n },\n ],\n contentClassInfo: {\n name: \"A:B\",\n },\n },\n },\n },\n ],\n },\n {\n name: \"when no properties added, return empty string\",\n expectedResult: \"\",\n operations: [],\n },\n {\n name: \"when property is float, return query string with ROUND\",\n expectedResult: \"SELECT A.B.ECInstanceId FROM A.B WHERE ROUND(A.B.somePropName, 4)=3.1416\",\n operations: [\n {\n expectedResult: true,\n operationType: \"addProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: 3.14159,\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"number\",\n },\n parent: {\n pathToPrimaryClass: [],\n },\n },\n },\n ],\n },\n {\n name: \"when property needsQuotes, return query string with property value in quotes\",\n expectedResult: \"SELECT A.B.ECInstanceId FROM A.B WHERE A.B.somePropName='https://valueThatNeedsQuotes.com'\",\n operations: [\n {\n expectedResult: true,\n operationType: \"addProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"https://valueThatNeedsQuotes.com\",\n },\n property: {\n typename: \"notNavigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"A:B\",\n },\n },\n },\n ],\n type: {\n typeName: \"uri\",\n },\n parent: {\n pathToPrimaryClass: [],\n },\n },\n },\n ],\n },\n {\n name: \"when property is category, return a category query string\",\n expectedResult: \"SELECT BisCore.B.ECInstanceId FROM BisCore.B JOIN bis.Category ON bis.Category.ECInstanceId = bis.GeometricElement3d.category.id AND ((bis.Category.CodeValue='displayValueString') OR (bis.Category.UserLabel='displayValueString'))\",\n operations: [\n {\n expectedResult: true,\n operationType: \"addProperty\",\n propertyRecord: {\n value: {\n valueFormat: 0,\n value: \"someString\",\n displayValue: \"displayValueString\",\n },\n property: {\n typename: \"navigation\",\n name: \"propertyName\",\n displayLabel: \"propertyDisplayLabel\",\n },\n },\n propertiesField: {\n properties: [\n {\n property: {\n name: \"somePropName\",\n classInfo: {\n name: \"BisCore:B\",\n },\n navigationPropertyInfo: {\n classInfo: {\n name: \"BisCore:GeometricElement3dIsInCategory\",\n },\n },\n },\n },\n ],\n type: {\n typeName: \"string\",\n },\n parent: {\n pathToPrimaryClass: [],\n },\n },\n },\n ],\n },\n ],\n};\n"]}
@@ -0,0 +1,50 @@
1
+ import type { PropertyDescription, PropertyValue } from "@itwin/appui-abstract";
2
+ import type { RelationshipPath } from "@itwin/presentation-common";
3
+ export interface ClassInfoTestData {
4
+ name: string;
5
+ }
6
+ export interface NavigationPropertyInfoTestData {
7
+ classInfo: ClassInfoTestData;
8
+ }
9
+ export interface PropertyTestData {
10
+ name: string;
11
+ classInfo: ClassInfoTestData;
12
+ navigationPropertyInfo?: NavigationPropertyInfoTestData;
13
+ }
14
+ export interface PropertiesTestData {
15
+ property: PropertyTestData;
16
+ }
17
+ export interface ContentClassInfoTestData {
18
+ name: string;
19
+ }
20
+ export interface ParentTestData {
21
+ pathToPrimaryClass: RelationshipPath;
22
+ contentClassInfo?: ContentClassInfoTestData;
23
+ }
24
+ export interface TypeTestData {
25
+ typeName: string;
26
+ }
27
+ export interface PropertiesFieldTestData {
28
+ properties: PropertiesTestData[];
29
+ type: TypeTestData;
30
+ parent: ParentTestData;
31
+ }
32
+ export interface PropertyRecordTestData {
33
+ value: PropertyValue;
34
+ property: PropertyDescription;
35
+ }
36
+ export interface OperationTestData {
37
+ expectedResult?: boolean;
38
+ operationType: string;
39
+ propertyRecord: PropertyRecordTestData;
40
+ propertiesField: PropertiesFieldTestData;
41
+ }
42
+ export interface TestCase {
43
+ name: string;
44
+ expectedResult: string;
45
+ operations: OperationTestData[];
46
+ }
47
+ export interface QueryBuilderTestData {
48
+ testCases: TestCase[];
49
+ }
50
+ //# sourceMappingURL=QueryBuilderTestData.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=QueryBuilderTestData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilderTestData.js","sourceRoot":"","sources":["../../../src/test/QueryBuilderTestData.ts"],"names":[],"mappings":"","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport type { RelationshipPath } from \"@itwin/presentation-common\";\n\nexport interface ClassInfoTestData {\n name: string;\n}\n\nexport interface NavigationPropertyInfoTestData {\n classInfo: ClassInfoTestData;\n}\n\nexport interface PropertyTestData {\n name: string;\n classInfo: ClassInfoTestData;\n navigationPropertyInfo?: NavigationPropertyInfoTestData;\n}\n\nexport interface PropertiesTestData {\n property: PropertyTestData;\n}\n\nexport interface ContentClassInfoTestData {\n name: string;\n}\n\nexport interface ParentTestData {\n pathToPrimaryClass: RelationshipPath;\n contentClassInfo?: ContentClassInfoTestData;\n}\n\nexport interface TypeTestData {\n typeName: string;\n}\n\nexport interface PropertiesFieldTestData {\n properties: PropertiesTestData[];\n type: TypeTestData;\n parent: ParentTestData;\n}\n\nexport interface PropertyRecordTestData {\n value: PropertyValue;\n property: PropertyDescription;\n}\n\nexport interface OperationTestData {\n expectedResult?: boolean;\n operationType: string;\n propertyRecord: PropertyRecordTestData;\n propertiesField: PropertiesFieldTestData;\n}\n\nexport interface TestCase {\n name: string;\n expectedResult: string;\n operations: OperationTestData[];\n}\n\nexport interface QueryBuilderTestData {\n testCases: TestCase[];\n}\n"]}
@@ -90,6 +90,10 @@ const extractNested = (propertyTraversal, propertyFields) => propertyFields.flat
90
90
  // Only handling single path and not handling nested content fields within navigations
91
91
  if (nestedContentField.pathToPrimaryClass &&
92
92
  nestedContentField.pathToPrimaryClass.length > 1) {
93
+ // Hardcoded navigation to external source repository metadata.
94
+ if (nestedContentField.contentClassInfo.name === "BisCore:RepositoryLink") {
95
+ return extractNested([...propertyTraversal, "Source", "Repository"], nestedContentField.nestedFields);
96
+ }
93
97
  break;
94
98
  }
95
99
  switch (nestedContentField.relationshipMeaning) {
@@ -144,10 +148,10 @@ export const convertPresentationFields = (propertyFields) => propertyFields.flat
144
148
  nestedContentField.pathToPrimaryClass[0].relationshipInfo
145
149
  .name === "BisCore:ElementOwnsMultiAspects")) {
146
150
  const fullClassName = nestedContentField.contentClassInfo.name;
147
- const schema = fullClassName.split(":")[0];
148
- const className = fullClassName.split(":")[1];
151
+ const sourceSchema = fullClassName.split(":")[0];
152
+ const sourceClassName = fullClassName.split(":")[1];
149
153
  const extractedNested = extractNested([], nestedContentField.nestedFields);
150
- const aspectExtractedNested = extractedNested.map((ecProperty) => ({ ...ecProperty, schema, className }));
154
+ const aspectExtractedNested = extractedNested.map((ecProperty) => ({ ...ecProperty, sourceSchema, sourceClassName }));
151
155
  return aspectExtractedNested;
152
156
  }
153
157
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"GroupPropertyUtils.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupPropertyUtils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAWlD,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,SAAS,GACV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAexC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAY,EAAE;IAC7C,QAAQ,IAAI,EAAE;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC1B,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB;YACE,OAAO,QAAQ,CAAC,MAAM,CAAC;KAC1B;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,iBAA2B,EAC3B,aAA8B,EACV,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;;IACjE,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5C,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC;IACzC,kCAAkC;IAClC,MAAM,uBAAuB,GAAG,MAAA,aAAa,CAAC,MAAM,0CAAE,gBAAgB,CAAC,IAAI,CAAC;IAC5E,MAAM,wBAAwB,GAAG,MAAA,MAAA,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,0CAAE,SAAS,CAAC,IAAI,mCAAI,EAAE,CAAC;IAChG;;;MAGE;IACF,MAAM,YAAY,GAAG,wBAAwB,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtG,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;IAC3D,MAAM,oBAAoB,GAAG,CAAC,GAAG,iBAAiB,EAAE,YAAY,CAAC,CAAC;IAElE,OAAO,CACL;QACE,YAAY;QACZ,YAAY,EAAE,GAAG;QACjB,eAAe,EAAE,GAAG;QACpB,mBAAmB,EAAE,oBAAoB;QACzC,YAAY;QACZ,wBAAwB;QACxB,iBAAiB;QACjB,uBAAuB;QACvB,GAAG,EAAE,GAAG,uBAAuB,IAAI,iBAAiB,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACxF,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK;KAC5C,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,gCAAgC,GAAG,CACvC,iBAA2B,EAC3B,OAAuC,EACvC,aAAqB,EACrB,iBAAyB,EACzB,uBAAgC,EACZ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;IAClD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,mBAAmB,CAAC,SAAS,EAAE;QAC7D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;QACjC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;QAClC,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,oBAAoB,GAAG,CAAC,GAAG,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAElE,OAAO,CAAC;YACN,YAAY;YACZ,YAAY,EAAE,GAAG;YACjB,eAAe,EAAE,GAAG;YACpB,mBAAmB,EAAE,oBAAoB;YACzC,YAAY;YACZ,wBAAwB,EAAE,EAAE;YAC5B,iBAAiB;YACjB,uBAAuB;YACvB,GAAG,EAAE,GAAG,uBAAuB,IAAI,iBAAiB,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACxF,aAAa;SACd,CAAC,CAAC;KAEJ;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,mBAAmB,CAAC,MAAM,EAAE;QACjE,OAAO,gCAAgC,CACrC,iBAAiB,EACjB,MAAM,CAAC,IAAI,CAAC,OAAO,EACnB,aAAa,EACb,iBAAiB,EACjB,uBAAuB,CACxB,CAAC;KACH;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,QAAe,EAAE,EAAE;IACxC,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,KAAK,mBAAmB,CAAC,MAAM,EAAE;QAC5D,OAAO,EAAE,CAAC;KACX;IAED,MAAM,UAAU,GAAI,QAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;SAC3D,QAAQ,CAAC,IAAI,CAAC;IACjB,MAAM,iBAAiB,GAAI,QAA4B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;IAC9F,OAAO,gCAAgC,CACrC,CAAC,UAAU,CAAC,EACZ,QAAQ,CAAC,IAAI,CAAC,OAAO,EACrB,QAAQ,CAAC,QAAQ,CAAC,KAAK,EACvB,iBAAiB,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,iBAA2B,EAAE,cAAuB,EAAsB,EAAE,CACjG,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;IAClC,2BAA2B;IAC3B,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;QACjC,KAAK,mBAAmB,CAAC,SAAS,CAAC,CAAC;YAClC,OAAO,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAAC,EAAE,QAA2B,CAAC,CAAC;SAC/E;QACD,cAAc;QACd,KAAK,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,kBAAkB,GAAG,QAA8B,CAAC;YAC1D,sFAAsF;YACtF,IACE,kBAAkB,CAAC,kBAAkB;gBACrC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAChD;gBACA,MAAM;aACP;YAED,QAAQ,kBAAkB,CAAC,mBAAmB,EAAE;gBAC9C,2FAA2F;gBAC3F,wBAAwB;gBACxB,KAAK,mBAAmB,CAAC,eAAe,CAAC,CAAC;oBACxC;oBACE,6BAA6B;oBAC7B,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI;wBAC9D,6CAA6C,EAC7C;wBACA,OAAO,aAAa,CAAC,CAAC,GAAG,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;qBACjG;oBACD,MAAM;iBACP;gBACD,OAAO,CAAC,CAAC;oBACP,6EAA6E;oBAC7E,uCAAuC;oBACvC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE;wBAC1C,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;qBAChC;iBACF;aACF;SACF;KACF;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,cAAuB,EAAsB,EAAE,CACvF,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;IAClC,2BAA2B;IAC3B,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;QACjC,KAAK,mBAAmB,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,EAAE,EAAE,QAA2B,CAAC,CAAC;YAC/E,KAAK,MAAM,kBAAkB,IAAI,mBAAmB,EAAE;gBACpD,kBAAkB,CAAC,YAAY,GAAG,GAAG,CAAC;gBACtC,kBAAkB,CAAC,eAAe,GAAG,GAAG,CAAC;gBACzC,OAAO,kBAAkB,CAAC;aAC3B;YACD,MAAM;SACP;QACD,cAAc;QACd,KAAK,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,kBAAkB,GAAG,QAA8B,CAAC;YAC1D,sFAAsF;YACtF,IACE,kBAAkB,CAAC,kBAAkB;gBACrC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAChD;gBACA,MAAM;aACP;YACD,QAAQ,kBAAkB,CAAC,mBAAmB,EAAE;gBAC9C,KAAK,mBAAmB,CAAC,YAAY,CAAC,CAAC;oBACrC,qBAAqB;oBACrB,IACE,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB;yBACvD,IAAI,KAAK,iCAAiC;wBAC3C,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB;6BACtD,IAAI,KAAK,iCAAiC,CAAC,EAChD;wBACA,MAAM,aAAa,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBAC/D,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC9C,MAAM,eAAe,GAAG,aAAa,CAAC,EAAE,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;wBAC3E,MAAM,qBAAqB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;wBAC1G,OAAO,qBAAqB,CAAC;qBAC9B;oBACD,MAAM;iBACP;gBACD,wBAAwB;gBACxB,KAAK,mBAAmB,CAAC,eAAe,CAAC,CAAC;oBACxC;oBACE,6BAA6B;oBAC7B,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI;wBAC9D,6CAA6C,EAC7C;wBACA,OAAO,aAAa,CAAC,CAAC,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;qBAC3E;oBACD,MAAM;iBACP;gBACD,OAAO,CAAC,CAAC;oBACP,6EAA6E;oBAC7E,uCAAuC;oBACvC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE;wBAC1C,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;qBAChC;iBACF;aACF;SACF;KACF;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAA0B,EAAgB,EAAE;IAChF,MAAM,UAAU,GAAe;QAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,WAAW,EAAE,QAAQ,CAAC,eAAe;QACrC,cAAc,EAAE,QAAQ,CAAC,YAAY;QACrC,cAAc,EAAE,EAAE;KACnB,CAAC;IACF,QAAQ,QAAQ,CAAC,wBAAwB,EAAE;QACzC,qDAAqD;QACrD,KAAK,+BAA+B,CAAC,CAAC;YACpC,OAAO;gBACL;oBACE,GAAG,UAAU;oBACb,cAAc,EAAE;wBACd,GAAG,QAAQ,CAAC,mBAAmB;wBAC/B,gBAAgB;wBAChB,WAAW;qBACZ,CAAC,IAAI,CAAC,GAAG,CAAC;iBACZ;gBACD;oBACE,GAAG,UAAU;oBACb,cAAc,EAAE;wBACd,GAAG,QAAQ,CAAC,mBAAmB;wBAC/B,gBAAgB;wBAChB,WAAW;qBACZ,CAAC,IAAI,CAAC,GAAG,CAAC;iBACZ;aACF,CAAC;SACH;QACD,6EAA6E;QAC7E,KAAK,wCAAwC,CAAC;QAC9C,KAAK,6CAA6C;YAChD,OAAO;gBACL;oBACE,GAAG,UAAU;oBACb,cAAc,EAAE;wBACd,GAAG,QAAQ,CAAC,mBAAmB;wBAC/B,WAAW;qBACZ,CAAC,IAAI,CAAC,GAAG,CAAC;iBACZ;gBACD;oBACE,GAAG,UAAU;oBACb,cAAc,EAAE;wBACd,GAAG,QAAQ,CAAC,mBAAmB;wBAC/B,WAAW;qBACZ,CAAC,IAAI,CAAC,GAAG,CAAC;iBACZ;aACF,CAAC;QACJ,OAAO,CAAC,CAAC;YACP,OAAO;gBACL;oBACE,GAAG,UAAU;oBACb,cAAc,EAAE,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;iBACvD;aACF,CAAC;SACH;KACF;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,YAA0B,EAAE,kBAAsC,EAAE,EAAE;IACnG,IAAI,gBAAgB,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IACzC,MAAM,wBAAwB,GAAuB,IAAI,KAAK,EAAoB,CAAC;IACnF,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC/E,IAAI,SAAS,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,EAAE;gBACpD,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACpE,MAAM;aACP;YACD,IAAI,CAAC,KAAK,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvC,QAAQ,GAAG,IAAI,CAAC;aACjB;SACF;QACD,IAAI,QAAQ;YACV,MAAM;KACT;IACD,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAAE,gBAAkC,EAAE,MAAc,EAAE,EAAE;IACtG,MAAM,OAAO,GAAY;QACvB,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE;YACL;gBACE,QAAQ,EAAE,SAAS,CAAC,OAAO;gBAC3B,cAAc,EAAE;oBACd;wBACE,QAAQ,EAAE,yBAAyB,CAAC,qBAAqB;qBAC1D;iBACF;aACF;SAAC;KACL,CAAC;IACF,MAAM,cAAc,GAA+E;QACjG,MAAM,EAAE,gBAAgB;QACxB,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,0BAA0B,CAAC,YAAY;KACrD,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,oBAAoB,CACrE,cAAc,CACf,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { ECProperty } from \"@itwin/insights-client\";\nimport { DataType } from \"@itwin/insights-client\";\nimport type {\n ContentDescriptorRequestOptions,\n Field,\n KeySet,\n NestedContentField,\n PropertiesField,\n Ruleset,\n RulesetVariable,\n StructFieldMemberDescription,\n} from \"@itwin/presentation-common\";\nimport {\n ContentSpecificationTypes,\n DefaultContentDisplayTypes,\n PropertyValueFormat,\n RelationshipMeaning,\n RuleTypes,\n} from \"@itwin/presentation-common\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { deepEqual } from \"fast-equals\";\n\nexport interface PropertyMetaData {\n displayLabel: string;\n sourceSchema: string;\n sourceClassName: string;\n categoryLabel: string;\n propertyType: DataType;\n actualECClassName: string;\n parentPropertyClassName: string | undefined;\n ecPropertyTraversal: string[];\n primitiveNavigationClass: string;\n key: string;\n}\n\nconst convertType = (type: string): DataType => {\n switch (type) {\n case \"int\":\n case \"enum\":\n case \"long\":\n return DataType.Integer;\n case \"boolean\":\n return DataType.Boolean;\n case \"double\":\n return DataType.Double;\n case \"number\":\n return DataType.Number;\n default:\n return DataType.String;\n }\n};\n\nconst extractPrimitives = (\n propertyTraversal: string[],\n propertyField: PropertiesField\n): PropertyMetaData[] => propertyField.properties.map((property) => {\n const propertyName = property.property.name;\n const displayLabel = propertyField.label;\n // It belongs to this parent class\n const parentPropertyClassName = propertyField.parent?.contentClassInfo.name;\n const primitiveNavigationClass = property.property.navigationPropertyInfo?.classInfo.name ?? \"\";\n /* Presentation assigns primitive navigations properties as a long type due to how it stores the\n ECInstanceId of the class in the meta.ECClassDef table on the C++ layer.\n We are handling this special case.\n */\n const propertyType = primitiveNavigationClass ? DataType.String : convertType(property.property.type);\n const actualECClassName = property.property.classInfo.name;\n const newPropertyTraversal = [...propertyTraversal, propertyName];\n\n return (\n {\n displayLabel,\n sourceSchema: \"*\",\n sourceClassName: \"*\",\n ecPropertyTraversal: newPropertyTraversal,\n propertyType,\n primitiveNavigationClass,\n actualECClassName,\n parentPropertyClassName,\n key: `${parentPropertyClassName}|${actualECClassName}|${newPropertyTraversal.join(\"|\")}`,\n categoryLabel: propertyField.category.label,\n }\n );\n});\n\nconst extractPrimitiveStructProperties = (\n propertyTraversal: string[],\n members: StructFieldMemberDescription[],\n categoryLabel: string,\n actualECClassName: string,\n parentPropertyClassName?: string,\n): PropertyMetaData[] => members.flatMap((member) => {\n if (member.type.valueFormat === PropertyValueFormat.Primitive) {\n const propertyName = member.name;\n const displayLabel = member.label;\n const propertyType = convertType(member.type.typeName);\n const newPropertyTraversal = [...propertyTraversal, propertyName];\n\n return ({\n displayLabel,\n sourceSchema: \"*\",\n sourceClassName: \"*\",\n ecPropertyTraversal: newPropertyTraversal,\n propertyType,\n primitiveNavigationClass: \"\",\n actualECClassName,\n parentPropertyClassName,\n key: `${parentPropertyClassName}|${actualECClassName}|${newPropertyTraversal.join(\"|\")}`,\n categoryLabel,\n });\n\n } else if (member.type.valueFormat === PropertyValueFormat.Struct) {\n return extractPrimitiveStructProperties(\n propertyTraversal,\n member.type.members,\n categoryLabel,\n actualECClassName,\n parentPropertyClassName\n );\n }\n\n return [];\n});\n\nconst extractStruct = (property: Field) => {\n if (property.type.valueFormat !== PropertyValueFormat.Struct) {\n return [];\n }\n\n const columnName = (property as PropertiesField).properties[0]\n .property.name;\n const actualECClassName = (property as PropertiesField).properties[0].property.classInfo.name;\n return extractPrimitiveStructProperties(\n [columnName],\n property.type.members,\n property.category.label,\n actualECClassName\n );\n};\n\nconst extractNested = (propertyTraversal: string[], propertyFields: Field[]): PropertyMetaData[] =>\n propertyFields.flatMap((property) => {\n // Generate base ECProperty\n switch (property.type.valueFormat) {\n case PropertyValueFormat.Primitive: {\n return extractPrimitives([...propertyTraversal], property as PropertiesField);\n }\n // Get structs\n case PropertyValueFormat.Struct: {\n const nestedContentField = property as NestedContentField;\n // Only handling single path and not handling nested content fields within navigations\n if (\n nestedContentField.pathToPrimaryClass &&\n nestedContentField.pathToPrimaryClass.length > 1\n ) {\n break;\n }\n\n switch (nestedContentField.relationshipMeaning) {\n // Aspects are not looked at again. Extraction does not support aspects within navigations.\n // Navigation properties\n case RelationshipMeaning.RelatedInstance: {\n if (\n // Deal with a TypeDefinition\n nestedContentField.pathToPrimaryClass[0].relationshipInfo.name ===\n \"BisCore:GeometricElement3dHasTypeDefinition\"\n ) {\n return extractNested([...propertyTraversal, \"TypeDefinition\"], nestedContentField.nestedFields);\n }\n break;\n }\n default: {\n // Some elements don't have a path to primary class or relationship meaning..\n // Most likely a simple struct property\n if (!nestedContentField.pathToPrimaryClass) {\n return extractStruct(property);\n }\n }\n }\n }\n }\n return [];\n });\n\nexport const convertPresentationFields = (propertyFields: Field[]): PropertyMetaData[] =>\n propertyFields.flatMap((property) => {\n // Generate base ECProperty\n switch (property.type.valueFormat) {\n case PropertyValueFormat.Primitive: {\n const extractedPrimitives = extractPrimitives([], property as PropertiesField);\n for (const extractedPrimitive of extractedPrimitives) {\n extractedPrimitive.sourceSchema = \"*\";\n extractedPrimitive.sourceClassName = \"*\";\n return extractedPrimitive;\n }\n break;\n }\n // Get structs\n case PropertyValueFormat.Struct: {\n const nestedContentField = property as NestedContentField;\n // Only handling single path and not handling nested content fields within navigations\n if (\n nestedContentField.pathToPrimaryClass &&\n nestedContentField.pathToPrimaryClass.length > 1\n ) {\n break;\n }\n switch (nestedContentField.relationshipMeaning) {\n case RelationshipMeaning.SameInstance: {\n // Check for aspects.\n if (\n (nestedContentField.pathToPrimaryClass[0].relationshipInfo\n .name === \"BisCore:ElementOwnsUniqueAspect\" ||\n nestedContentField.pathToPrimaryClass[0].relationshipInfo\n .name === \"BisCore:ElementOwnsMultiAspects\")\n ) {\n const fullClassName = nestedContentField.contentClassInfo.name;\n const schema = fullClassName.split(\":\")[0];\n const className = fullClassName.split(\":\")[1];\n const extractedNested = extractNested([], nestedContentField.nestedFields);\n const aspectExtractedNested = extractedNested.map((ecProperty) => ({ ...ecProperty, schema, className }));\n return aspectExtractedNested;\n }\n break;\n }\n // Navigation properties\n case RelationshipMeaning.RelatedInstance: {\n if (\n // Deal with a TypeDefinition\n nestedContentField.pathToPrimaryClass[0].relationshipInfo.name ===\n \"BisCore:GeometricElement3dHasTypeDefinition\"\n ) {\n return extractNested([\"TypeDefinition\"], nestedContentField.nestedFields);\n }\n break;\n }\n default: {\n // Some elements don't have a path to primary class or relationship meaning..\n // Most likely a simple struct property\n if (!nestedContentField.pathToPrimaryClass) {\n return extractStruct(property);\n }\n }\n }\n }\n }\n return [];\n });\n\nexport const convertToECProperties = (property: PropertyMetaData): ECProperty[] => {\n const ecProperty: ECProperty = {\n ecSchemaName: property.sourceSchema,\n ecClassName: property.sourceClassName,\n ecPropertyType: property.propertyType,\n ecPropertyName: \"\",\n };\n switch (property.primitiveNavigationClass) {\n // Hardcode Models navigation path and label behavior\n case \"BisCore:ModelContainsElements\": {\n return [\n {\n ...ecProperty,\n ecPropertyName: [\n ...property.ecPropertyTraversal,\n \"ModeledElement\",\n \"UserLabel\",\n ].join(\".\"),\n },\n {\n ...ecProperty,\n ecPropertyName: [\n ...property.ecPropertyTraversal,\n \"ModeledElement\",\n \"CodeValue\",\n ].join(\".\"),\n },\n ];\n }\n // Hardcode Category and Physical Material navigation path and label behavior\n case \"BisCore:GeometricElement3dIsInCategory\":\n case \"BisCore:PhysicalElementIsOfPhysicalMaterial\":\n return [\n {\n ...ecProperty,\n ecPropertyName: [\n ...property.ecPropertyTraversal,\n \"UserLabel\",\n ].join(\".\"),\n },\n {\n ...ecProperty,\n ecPropertyName: [\n ...property.ecPropertyTraversal,\n \"CodeValue\",\n ].join(\".\"),\n },\n ];\n default: {\n return [\n {\n ...ecProperty,\n ecPropertyName: property.ecPropertyTraversal.join(\".\"),\n },\n ];\n }\n }\n};\n\nexport const findProperties = (ecProperties: ECProperty[], propertiesMetaData: PropertyMetaData[]) => {\n let ecPropertiesCopy = [...ecProperties];\n const propertiesMetaDataResult: PropertyMetaData[] = new Array<PropertyMetaData>();\n let notFound = false;\n while (ecPropertiesCopy.length !== 0) {\n for (let i = 0; i < propertiesMetaData.length; i++) {\n const generatedProperty = convertToECProperties(propertiesMetaData[i]);\n const slicedEcProperties = ecPropertiesCopy.slice(0, generatedProperty.length);\n if (deepEqual(generatedProperty, slicedEcProperties)) {\n propertiesMetaDataResult.push(propertiesMetaData[i]);\n ecPropertiesCopy = ecPropertiesCopy.slice(generatedProperty.length);\n break;\n }\n if (i === propertiesMetaData.length - 1) {\n notFound = true;\n }\n }\n if (notFound)\n break;\n }\n return notFound ? [] : propertiesMetaDataResult;\n};\n\nexport const fetchPresentationDescriptor = async (iModelConnection: IModelConnection, keySet: KeySet) => {\n const ruleSet: Ruleset = {\n id: \"gmw-element-properties\",\n rules: [\n {\n ruleType: RuleTypes.Content,\n specifications: [\n {\n specType: ContentSpecificationTypes.SelectedNodeInstances,\n },\n ],\n }],\n };\n const requestOptions: ContentDescriptorRequestOptions<IModelConnection, KeySet, RulesetVariable> = {\n imodel: iModelConnection,\n keys: keySet,\n rulesetOrId: ruleSet,\n displayType: DefaultContentDisplayTypes.PropertyPane,\n };\n const descriptor = await Presentation.presentation.getContentDescriptor(\n requestOptions\n );\n return descriptor;\n};\n"]}
1
+ {"version":3,"file":"GroupPropertyUtils.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupPropertyUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { ECProperty } from \"@itwin/insights-client\";\nimport { DataType } from \"@itwin/insights-client\";\nimport type {\n ContentDescriptorRequestOptions,\n Field,\n KeySet,\n NestedContentField,\n PropertiesField,\n Ruleset,\n RulesetVariable,\n StructFieldMemberDescription,\n} from \"@itwin/presentation-common\";\nimport {\n ContentSpecificationTypes,\n DefaultContentDisplayTypes,\n PropertyValueFormat,\n RelationshipMeaning,\n RuleTypes,\n} from \"@itwin/presentation-common\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { deepEqual } from \"fast-equals\";\n\nexport interface PropertyMetaData {\n displayLabel: string;\n sourceSchema: string;\n sourceClassName: string;\n categoryLabel: string;\n propertyType: DataType;\n actualECClassName: string;\n parentPropertyClassName: string | undefined;\n ecPropertyTraversal: string[];\n primitiveNavigationClass: string;\n key: string;\n}\n\nconst convertType = (type: string): DataType => {\n switch (type) {\n case \"int\":\n case \"enum\":\n case \"long\":\n return DataType.Integer;\n case \"boolean\":\n return DataType.Boolean;\n case \"double\":\n return DataType.Double;\n case \"number\":\n return DataType.Number;\n default:\n return DataType.String;\n }\n};\n\nconst extractPrimitives = (\n propertyTraversal: string[],\n propertyField: PropertiesField\n): PropertyMetaData[] => propertyField.properties.map((property) => {\n const propertyName = property.property.name;\n const displayLabel = propertyField.label;\n // It belongs to this parent class\n const parentPropertyClassName = propertyField.parent?.contentClassInfo.name;\n const primitiveNavigationClass = property.property.navigationPropertyInfo?.classInfo.name ?? \"\";\n /* Presentation assigns primitive navigations properties as a long type due to how it stores the\n ECInstanceId of the class in the meta.ECClassDef table on the C++ layer.\n We are handling this special case.\n */\n const propertyType = primitiveNavigationClass ? DataType.String : convertType(property.property.type);\n const actualECClassName = property.property.classInfo.name;\n const newPropertyTraversal = [...propertyTraversal, propertyName];\n\n return (\n {\n displayLabel,\n sourceSchema: \"*\",\n sourceClassName: \"*\",\n ecPropertyTraversal: newPropertyTraversal,\n propertyType,\n primitiveNavigationClass,\n actualECClassName,\n parentPropertyClassName,\n key: `${parentPropertyClassName}|${actualECClassName}|${newPropertyTraversal.join(\"|\")}`,\n categoryLabel: propertyField.category.label,\n }\n );\n});\n\nconst extractPrimitiveStructProperties = (\n propertyTraversal: string[],\n members: StructFieldMemberDescription[],\n categoryLabel: string,\n actualECClassName: string,\n parentPropertyClassName?: string,\n): PropertyMetaData[] => members.flatMap((member) => {\n if (member.type.valueFormat === PropertyValueFormat.Primitive) {\n const propertyName = member.name;\n const displayLabel = member.label;\n const propertyType = convertType(member.type.typeName);\n const newPropertyTraversal = [...propertyTraversal, propertyName];\n\n return ({\n displayLabel,\n sourceSchema: \"*\",\n sourceClassName: \"*\",\n ecPropertyTraversal: newPropertyTraversal,\n propertyType,\n primitiveNavigationClass: \"\",\n actualECClassName,\n parentPropertyClassName,\n key: `${parentPropertyClassName}|${actualECClassName}|${newPropertyTraversal.join(\"|\")}`,\n categoryLabel,\n });\n\n } else if (member.type.valueFormat === PropertyValueFormat.Struct) {\n return extractPrimitiveStructProperties(\n propertyTraversal,\n member.type.members,\n categoryLabel,\n actualECClassName,\n parentPropertyClassName\n );\n }\n\n return [];\n});\n\nconst extractStruct = (property: Field) => {\n if (property.type.valueFormat !== PropertyValueFormat.Struct) {\n return [];\n }\n\n const columnName = (property as PropertiesField).properties[0]\n .property.name;\n const actualECClassName = (property as PropertiesField).properties[0].property.classInfo.name;\n return extractPrimitiveStructProperties(\n [columnName],\n property.type.members,\n property.category.label,\n actualECClassName\n );\n};\n\nconst extractNested = (propertyTraversal: string[], propertyFields: Field[]): PropertyMetaData[] =>\n propertyFields.flatMap((property) => {\n // Generate base ECProperty\n switch (property.type.valueFormat) {\n case PropertyValueFormat.Primitive: {\n return extractPrimitives([...propertyTraversal], property as PropertiesField);\n }\n // Get structs\n case PropertyValueFormat.Struct: {\n const nestedContentField = property as NestedContentField;\n // Only handling single path and not handling nested content fields within navigations\n if (\n nestedContentField.pathToPrimaryClass &&\n nestedContentField.pathToPrimaryClass.length > 1\n ) {\n // Hardcoded navigation to external source repository metadata.\n if (nestedContentField.contentClassInfo.name === \"BisCore:RepositoryLink\") {\n return extractNested([...propertyTraversal, \"Source\", \"Repository\"], nestedContentField.nestedFields);\n }\n break;\n }\n\n switch (nestedContentField.relationshipMeaning) {\n // Aspects are not looked at again. Extraction does not support aspects within navigations.\n // Navigation properties\n case RelationshipMeaning.RelatedInstance: {\n if (\n // Deal with a TypeDefinition\n nestedContentField.pathToPrimaryClass[0].relationshipInfo.name ===\n \"BisCore:GeometricElement3dHasTypeDefinition\"\n ) {\n return extractNested([...propertyTraversal, \"TypeDefinition\"], nestedContentField.nestedFields);\n }\n break;\n }\n default: {\n // Some elements don't have a path to primary class or relationship meaning..\n // Most likely a simple struct property\n if (!nestedContentField.pathToPrimaryClass) {\n return extractStruct(property);\n }\n }\n }\n }\n }\n return [];\n });\n\nexport const convertPresentationFields = (propertyFields: Field[]): PropertyMetaData[] =>\n propertyFields.flatMap((property) => {\n // Generate base ECProperty\n switch (property.type.valueFormat) {\n case PropertyValueFormat.Primitive: {\n const extractedPrimitives = extractPrimitives([], property as PropertiesField);\n for (const extractedPrimitive of extractedPrimitives) {\n extractedPrimitive.sourceSchema = \"*\";\n extractedPrimitive.sourceClassName = \"*\";\n return extractedPrimitive;\n }\n break;\n }\n // Get structs\n case PropertyValueFormat.Struct: {\n const nestedContentField = property as NestedContentField;\n // Only handling single path and not handling nested content fields within navigations\n if (\n nestedContentField.pathToPrimaryClass &&\n nestedContentField.pathToPrimaryClass.length > 1\n ) {\n break;\n }\n switch (nestedContentField.relationshipMeaning) {\n case RelationshipMeaning.SameInstance: {\n // Check for aspects.\n if (\n (nestedContentField.pathToPrimaryClass[0].relationshipInfo\n .name === \"BisCore:ElementOwnsUniqueAspect\" ||\n nestedContentField.pathToPrimaryClass[0].relationshipInfo\n .name === \"BisCore:ElementOwnsMultiAspects\")\n ) {\n const fullClassName = nestedContentField.contentClassInfo.name;\n const sourceSchema = fullClassName.split(\":\")[0];\n const sourceClassName = fullClassName.split(\":\")[1];\n const extractedNested = extractNested([], nestedContentField.nestedFields);\n const aspectExtractedNested = extractedNested.map((ecProperty) => ({ ...ecProperty, sourceSchema, sourceClassName }));\n return aspectExtractedNested;\n }\n break;\n }\n // Navigation properties\n case RelationshipMeaning.RelatedInstance: {\n if (\n // Deal with a TypeDefinition\n nestedContentField.pathToPrimaryClass[0].relationshipInfo.name ===\n \"BisCore:GeometricElement3dHasTypeDefinition\"\n ) {\n return extractNested([\"TypeDefinition\"], nestedContentField.nestedFields);\n }\n break;\n }\n default: {\n // Some elements don't have a path to primary class or relationship meaning..\n // Most likely a simple struct property\n if (!nestedContentField.pathToPrimaryClass) {\n return extractStruct(property);\n }\n }\n }\n }\n }\n return [];\n });\n\nexport const convertToECProperties = (property: PropertyMetaData): ECProperty[] => {\n const ecProperty: ECProperty = {\n ecSchemaName: property.sourceSchema,\n ecClassName: property.sourceClassName,\n ecPropertyType: property.propertyType,\n ecPropertyName: \"\",\n };\n switch (property.primitiveNavigationClass) {\n // Hardcode Models navigation path and label behavior\n case \"BisCore:ModelContainsElements\": {\n return [\n {\n ...ecProperty,\n ecPropertyName: [\n ...property.ecPropertyTraversal,\n \"ModeledElement\",\n \"UserLabel\",\n ].join(\".\"),\n },\n {\n ...ecProperty,\n ecPropertyName: [\n ...property.ecPropertyTraversal,\n \"ModeledElement\",\n \"CodeValue\",\n ].join(\".\"),\n },\n ];\n }\n // Hardcode Category and Physical Material navigation path and label behavior\n case \"BisCore:GeometricElement3dIsInCategory\":\n case \"BisCore:PhysicalElementIsOfPhysicalMaterial\":\n return [\n {\n ...ecProperty,\n ecPropertyName: [\n ...property.ecPropertyTraversal,\n \"UserLabel\",\n ].join(\".\"),\n },\n {\n ...ecProperty,\n ecPropertyName: [\n ...property.ecPropertyTraversal,\n \"CodeValue\",\n ].join(\".\"),\n },\n ];\n default: {\n return [\n {\n ...ecProperty,\n ecPropertyName: property.ecPropertyTraversal.join(\".\"),\n },\n ];\n }\n }\n};\n\nexport const findProperties = (ecProperties: ECProperty[], propertiesMetaData: PropertyMetaData[]) => {\n let ecPropertiesCopy = [...ecProperties];\n const propertiesMetaDataResult: PropertyMetaData[] = new Array<PropertyMetaData>();\n let notFound = false;\n while (ecPropertiesCopy.length !== 0) {\n for (let i = 0; i < propertiesMetaData.length; i++) {\n const generatedProperty = convertToECProperties(propertiesMetaData[i]);\n const slicedEcProperties = ecPropertiesCopy.slice(0, generatedProperty.length);\n if (deepEqual(generatedProperty, slicedEcProperties)) {\n propertiesMetaDataResult.push(propertiesMetaData[i]);\n ecPropertiesCopy = ecPropertiesCopy.slice(generatedProperty.length);\n break;\n }\n if (i === propertiesMetaData.length - 1) {\n notFound = true;\n }\n }\n if (notFound)\n break;\n }\n return notFound ? [] : propertiesMetaDataResult;\n};\n\nexport const fetchPresentationDescriptor = async (iModelConnection: IModelConnection, keySet: KeySet) => {\n const ruleSet: Ruleset = {\n id: \"gmw-element-properties\",\n rules: [\n {\n ruleType: RuleTypes.Content,\n specifications: [\n {\n specType: ContentSpecificationTypes.SelectedNodeInstances,\n },\n ],\n }],\n };\n const requestOptions: ContentDescriptorRequestOptions<IModelConnection, KeySet, RulesetVariable> = {\n imodel: iModelConnection,\n keys: keySet,\n rulesetOrId: ruleSet,\n displayType: DefaultContentDisplayTypes.PropertyPane,\n };\n const descriptor = await Presentation.presentation.getContentDescriptor(\n requestOptions\n );\n return descriptor;\n};\n"]}
@@ -1,5 +1,4 @@
1
1
  import type { PresentationPropertyDataProvider } from "@itwin/presentation-components";
2
- import type { PropertiesField } from "@itwin/presentation-common";
3
2
  import type { Primitives, PropertyRecord } from "@itwin/appui-abstract";
4
3
  export interface Query {
5
4
  unions: QueryUnion[];
@@ -29,18 +28,19 @@ export declare class QueryBuilder {
29
28
  *
30
29
  */
31
30
  constructor(provider: PresentationPropertyDataProvider | undefined);
32
- isCategory(propertyField: PropertiesField): boolean;
31
+ private isCategory;
33
32
  addProperty(prop: PropertyRecord): Promise<boolean>;
34
- private _needsQuote;
35
- addRelatedProperty(unionIndex: number, propertyField: PropertiesField, propertyName: string, propertyValue: Primitives.Value, isAspect: boolean): void;
36
- addPropertyToQuery(unionIndex: number, className: string, propertyName: string, propertyValue: Primitives.Value, isAspect: boolean, needsQuote: boolean, isCategory: boolean, isRelational?: boolean): void;
33
+ private needsQuote;
34
+ private addRelatedProperty;
35
+ private addRelatedPropertyToQuery;
36
+ private addPropertyToQuery;
37
37
  removeProperty(prop: PropertyRecord): Promise<void>;
38
- removeRelatedProperty(unionIndex: number, propertyField: PropertiesField, propertyName: string): void;
39
- removePropertyFromQuery(unionIndex: number, className: string, propertyName: string): void;
38
+ private removeRelatedProperty;
39
+ private removePropertyFromQuery;
40
40
  buildQueryString(): string;
41
- private _whereSegment;
42
- private _propertySegment;
43
- private _categoryQuery;
44
- private _isFloat;
41
+ private whereSegment;
42
+ private propertySegment;
43
+ private categoryQuery;
44
+ private isFloat;
45
45
  }
46
46
  //# sourceMappingURL=QueryBuilder.d.ts.map
@@ -6,12 +6,13 @@ export class QueryBuilder {
6
6
  *
7
7
  */
8
8
  constructor(provider) {
9
- this._whereSegment = (baseClass, baseClassName) => {
9
+ this.addRelatedPropertyToQuery = (unionIndex, isAspect) => (className, propertyName, propertyValue, needsQuote) => this.addPropertyToQuery(unionIndex, className, propertyName, propertyValue, isAspect, needsQuote, false, true);
10
+ this.whereSegment = (baseClass, baseClassName) => {
10
11
  const segments = [];
11
12
  const properties = baseClass.properties;
12
13
  for (let i = 0; i < properties.length; i++) {
13
14
  const prefix = i === 0 ? "WHERE" : "AND";
14
- segments.push(this._propertySegment(baseClassName, properties[i], prefix));
15
+ segments.push(this.propertySegment(baseClassName, properties[i], prefix));
15
16
  }
16
17
  return segments.join("");
17
18
  };
@@ -75,12 +76,12 @@ export class QueryBuilder {
75
76
  this.addRelatedProperty(i, propertyField, propertyName, propertyValue, isAspect);
76
77
  }
77
78
  else {
78
- this.addPropertyToQuery(i, className, propertyName, propertyValue, isAspect, this._needsQuote(propertyField), isCategory, false);
79
+ this.addPropertyToQuery(i, className, propertyName, propertyValue, isAspect, this.needsQuote(propertyField), isCategory, false);
79
80
  }
80
81
  }
81
82
  return true;
82
83
  }
83
- _needsQuote(propertyField) {
84
+ needsQuote(propertyField) {
84
85
  // list of property types that need quote around property value
85
86
  if (propertyField.type.typeName.toLowerCase() === "string") {
86
87
  return true;
@@ -92,77 +93,49 @@ export class QueryBuilder {
92
93
  }
93
94
  addRelatedProperty(unionIndex, propertyField, propertyName, propertyValue, isAspect) {
94
95
  var _a, _b;
96
+ const addProperty = this.addRelatedPropertyToQuery(unionIndex, isAspect);
95
97
  const paths = [...((_b = (_a = propertyField.parent) === null || _a === void 0 ? void 0 : _a.pathToPrimaryClass) !== null && _b !== void 0 ? _b : [])];
96
98
  paths.reverse().forEach((path) => {
97
- var _a, _b, _c, _d, _e, _f, _g;
99
+ var _a, _b, _c, _d, _e;
98
100
  const sourceClassName = (_a = path.sourceClassInfo) === null || _a === void 0 ? void 0 : _a.name.replace(":", ".");
99
101
  const targetClassName = (_b = path.targetClassInfo) === null || _b === void 0 ? void 0 : _b.name.replace(":", ".");
100
102
  const relClassName = (_c = path.relationshipInfo) === null || _c === void 0 ? void 0 : _c.name.replace(":", ".");
101
- if (!path.isForwardRelationship) {
102
- this.addPropertyToQuery(unionIndex, targetClassName, `ECInstanceId`, `${relClassName}.SourceECInstanceId`, isAspect, false, false, true);
103
- this.addPropertyToQuery(unionIndex, relClassName, `TargetECInstanceId`, `${sourceClassName}.ECInstanceId`, isAspect, false, false, true);
104
- if (((_d = path.sourceClassInfo) === null || _d === void 0 ? void 0 : _d.name) ===
105
- ((_e = propertyField.parent) === null || _e === void 0 ? void 0 : _e.contentClassInfo.name)) {
106
- this.addPropertyToQuery(unionIndex, sourceClassName, propertyName, propertyValue, isAspect, this._needsQuote(propertyField), false, true);
107
- }
108
- else {
109
- this.addPropertyToQuery(unionIndex, sourceClassName, `ECInstanceId`, `${relClassName}.TargetECInstanceId`, isAspect, false, false, true);
110
- }
111
- }
112
- else {
113
- this.addPropertyToQuery(unionIndex, targetClassName, `ECInstanceId`, `${relClassName}.TargetECInstanceId`, isAspect, false, false, true);
114
- this.addPropertyToQuery(unionIndex, relClassName, `SourceECInstanceId`, `${sourceClassName}.ECInstanceId`, isAspect, false, false, true);
115
- if (((_f = path.sourceClassInfo) === null || _f === void 0 ? void 0 : _f.name) ===
116
- ((_g = propertyField.parent) === null || _g === void 0 ? void 0 : _g.contentClassInfo.name)) {
117
- this.addPropertyToQuery(unionIndex, sourceClassName, propertyName, propertyValue, isAspect, this._needsQuote(propertyField), false, true);
118
- }
119
- else {
120
- this.addPropertyToQuery(unionIndex, sourceClassName, `ECInstanceId`, `${relClassName}.SourceECInstanceId`, isAspect, false, false, true);
121
- }
103
+ const relPropertyName = path.isForwardRelationship
104
+ ? `SourceECInstanceId`
105
+ : `TargetECInstanceId`;
106
+ const relPropertyValue = path.isForwardRelationship
107
+ ? `${relClassName}.TargetECInstanceId`
108
+ : `${relClassName}.SourceECInstanceId`;
109
+ addProperty(targetClassName, `ECInstanceId`, relPropertyValue, false);
110
+ addProperty(relClassName, relPropertyName, `${sourceClassName}.ECInstanceId`, false);
111
+ if (((_d = path.sourceClassInfo) === null || _d === void 0 ? void 0 : _d.name)
112
+ === ((_e = propertyField.parent) === null || _e === void 0 ? void 0 : _e.contentClassInfo.name)) {
113
+ addProperty(sourceClassName, propertyName, propertyValue, this.needsQuote(propertyField));
122
114
  }
123
115
  });
124
116
  }
125
117
  addPropertyToQuery(unionIndex, className, propertyName, propertyValue, isAspect, needsQuote, isCategory, isRelational) {
126
118
  if (this.query === undefined || this.query.unions.length === 0) {
127
- this.query = {
128
- unions: [
129
- {
130
- classes: [
131
- {
132
- className,
133
- isAspect,
134
- isRelational,
135
- properties: [
136
- {
137
- name: propertyName,
138
- value: propertyValue,
139
- needsQuote,
140
- isCategory,
141
- },
142
- ],
143
- },
144
- ],
145
- },
146
- ],
147
- };
148
- return;
119
+ this.query = { unions: [] };
149
120
  }
121
+ const queryProperty = {
122
+ name: propertyName,
123
+ value: propertyValue,
124
+ needsQuote,
125
+ isCategory,
126
+ };
127
+ const queryClass = {
128
+ className,
129
+ isAspect,
130
+ isRelational,
131
+ properties: [
132
+ queryProperty,
133
+ ],
134
+ };
150
135
  if (this.query.unions.length <= unionIndex) {
151
136
  this.query.unions.push({
152
137
  classes: [
153
- {
154
- className,
155
- isAspect,
156
- isRelational,
157
- properties: [
158
- {
159
- name: propertyName,
160
- value: propertyValue,
161
- needsQuote,
162
- isCategory,
163
- },
164
- ],
165
- },
138
+ queryClass,
166
139
  ],
167
140
  });
168
141
  return;
@@ -171,28 +144,11 @@ export class QueryBuilder {
171
144
  if (foundClass) {
172
145
  foundClass.isRelational = isRelational;
173
146
  if (!foundClass.properties.find((x) => x.name === propertyName)) {
174
- foundClass.properties.push({
175
- name: propertyName,
176
- value: propertyValue,
177
- needsQuote,
178
- isCategory,
179
- });
147
+ foundClass.properties.push(queryProperty);
180
148
  }
181
149
  }
182
150
  else {
183
- this.query.unions[unionIndex].classes.push({
184
- className,
185
- isRelational,
186
- properties: [
187
- {
188
- name: propertyName,
189
- value: propertyValue,
190
- needsQuote,
191
- isCategory,
192
- },
193
- ],
194
- isAspect,
195
- });
151
+ this.query.unions[unionIndex].classes.push(queryClass);
196
152
  }
197
153
  }
198
154
  async removeProperty(prop) {
@@ -238,31 +194,16 @@ export class QueryBuilder {
238
194
  var _a, _b;
239
195
  const paths = [...((_b = (_a = propertyField.parent) === null || _a === void 0 ? void 0 : _a.pathToPrimaryClass) !== null && _b !== void 0 ? _b : [])];
240
196
  paths.reverse().forEach((path) => {
241
- var _a, _b, _c, _d, _e, _f, _g;
197
+ var _a, _b, _c, _d, _e;
242
198
  const sourceClassName = (_a = path.sourceClassInfo) === null || _a === void 0 ? void 0 : _a.name.replace(":", ".");
243
199
  const targetClassName = (_b = path.targetClassInfo) === null || _b === void 0 ? void 0 : _b.name.replace(":", ".");
244
200
  const relClassName = (_c = path.relationshipInfo) === null || _c === void 0 ? void 0 : _c.name.replace(":", ".");
245
- if (!path.isForwardRelationship) {
246
- this.removePropertyFromQuery(unionIndex, targetClassName, `ECInstanceId`);
247
- this.removePropertyFromQuery(unionIndex, relClassName, `TargetECInstanceId`);
248
- if (((_d = path.sourceClassInfo) === null || _d === void 0 ? void 0 : _d.name) ===
249
- ((_e = propertyField.parent) === null || _e === void 0 ? void 0 : _e.contentClassInfo.name)) {
250
- this.removePropertyFromQuery(unionIndex, sourceClassName, propertyName);
251
- }
252
- else {
253
- this.removePropertyFromQuery(unionIndex, sourceClassName, `ECInstanceId`);
254
- }
255
- }
256
- else {
257
- this.removePropertyFromQuery(unionIndex, targetClassName, `ECInstanceId`);
258
- this.removePropertyFromQuery(unionIndex, relClassName, `SourceECInstanceId`);
259
- if (((_f = path.sourceClassInfo) === null || _f === void 0 ? void 0 : _f.name) ===
260
- ((_g = propertyField.parent) === null || _g === void 0 ? void 0 : _g.contentClassInfo.name)) {
261
- this.removePropertyFromQuery(unionIndex, sourceClassName, propertyName);
262
- }
263
- else {
264
- this.removePropertyFromQuery(unionIndex, sourceClassName, `ECInstanceId`);
265
- }
201
+ this.removePropertyFromQuery(unionIndex, targetClassName, `ECInstanceId`);
202
+ const relPropertyName = path.isForwardRelationship ? `SourceECInstanceId` : `TargetECInstanceId`;
203
+ this.removePropertyFromQuery(unionIndex, relClassName, relPropertyName);
204
+ if (((_d = path.sourceClassInfo) === null || _d === void 0 ? void 0 : _d.name) ===
205
+ ((_e = propertyField.parent) === null || _e === void 0 ? void 0 : _e.contentClassInfo.name)) {
206
+ this.removePropertyFromQuery(unionIndex, sourceClassName, propertyName);
266
207
  }
267
208
  });
268
209
  }
@@ -312,7 +253,7 @@ export class QueryBuilder {
312
253
  querySegments.push(joinSegment);
313
254
  for (let j = 0; j < joinClass.properties.length; j++) {
314
255
  const prefix = j === 0 && joinClass.isRelational ? "ON" : "AND";
315
- const propertySegment = this._propertySegment(joinClassName, joinClass.properties[j], prefix);
256
+ const propertySegment = this.propertySegment(joinClassName, joinClass.properties[j], prefix);
316
257
  querySegments.push(propertySegment);
317
258
  }
318
259
  // when base is regular property, link base to first joined relational property
@@ -321,23 +262,23 @@ export class QueryBuilder {
321
262
  }
322
263
  }
323
264
  }
324
- const whereSegment = this._whereSegment(baseClass, baseClassName);
265
+ const whereSegment = this.whereSegment(baseClass, baseClassName);
325
266
  querySegments.push(whereSegment);
326
267
  unionSegments.push(querySegments.join(""));
327
268
  }
328
269
  return unionSegments.join(" UNION ");
329
270
  }
330
- _propertySegment(className, property, prefix) {
271
+ propertySegment(className, property, prefix) {
331
272
  const segments = [];
332
273
  if (property.isCategory) {
333
- segments.push(this._categoryQuery(property.value.toString()));
274
+ segments.push(this.categoryQuery(property.value.toString()));
334
275
  }
335
276
  else {
336
277
  if (property.needsQuote) {
337
278
  segments.push(` ${prefix} ${className}.${property.name}='${property.value}'`);
338
279
  }
339
280
  else {
340
- if (this._isFloat(property.value)) {
281
+ if (this.isFloat(property.value)) {
341
282
  segments.push(` ${prefix} ROUND(${className}.${property.name}, `);
342
283
  segments.push(`${QueryBuilder.DEFAULT_DOUBLE_PRECISION})=`);
343
284
  segments.push(`${Number(property.value).toFixed(QueryBuilder.DEFAULT_DOUBLE_PRECISION)}`);
@@ -349,10 +290,10 @@ export class QueryBuilder {
349
290
  }
350
291
  return segments.join("");
351
292
  }
352
- _categoryQuery(codeValue) {
293
+ categoryQuery(codeValue) {
353
294
  return ` JOIN bis.Category ON bis.Category.ECInstanceId = bis.GeometricElement3d.category.id AND ((bis.Category.CodeValue='${codeValue}') OR (bis.Category.UserLabel='${codeValue}'))`;
354
295
  }
355
- _isFloat(n) {
296
+ isFloat(n) {
356
297
  return Number(n) === n && n % 1 !== 0;
357
298
  }
358
299
  }