@itwin/presentation-common 4.0.0-dev.52 → 4.0.0-dev.55
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/cjs/presentation-common/AsyncTasks.d.ts +22 -22
- package/lib/cjs/presentation-common/AsyncTasks.js +38 -38
- package/lib/cjs/presentation-common/CommonLoggerCategory.d.ts +12 -12
- package/lib/cjs/presentation-common/CommonLoggerCategory.js +20 -20
- package/lib/cjs/presentation-common/Diagnostics.d.ts +125 -125
- package/lib/cjs/presentation-common/Diagnostics.d.ts.map +1 -1
- package/lib/cjs/presentation-common/Diagnostics.js +72 -72
- package/lib/cjs/presentation-common/EC.d.ts +350 -350
- package/lib/cjs/presentation-common/EC.d.ts.map +1 -1
- package/lib/cjs/presentation-common/EC.js +290 -290
- package/lib/cjs/presentation-common/ElementProperties.d.ts +123 -123
- package/lib/cjs/presentation-common/ElementProperties.d.ts.map +1 -1
- package/lib/cjs/presentation-common/ElementProperties.js +9 -9
- package/lib/cjs/presentation-common/Error.d.ts +47 -47
- package/lib/cjs/presentation-common/Error.js +64 -64
- package/lib/cjs/presentation-common/InstanceFilterDefinition.d.ts +93 -93
- package/lib/cjs/presentation-common/InstanceFilterDefinition.d.ts.map +1 -1
- package/lib/cjs/presentation-common/InstanceFilterDefinition.js +9 -9
- package/lib/cjs/presentation-common/KeySet.d.ts +146 -146
- package/lib/cjs/presentation-common/KeySet.d.ts.map +1 -1
- package/lib/cjs/presentation-common/KeySet.js +428 -428
- package/lib/cjs/presentation-common/LabelDefinition.d.ts +93 -93
- package/lib/cjs/presentation-common/LabelDefinition.d.ts.map +1 -1
- package/lib/cjs/presentation-common/LabelDefinition.js +78 -78
- package/lib/cjs/presentation-common/LocalizationHelper.d.ts +29 -29
- package/lib/cjs/presentation-common/LocalizationHelper.js +110 -110
- package/lib/cjs/presentation-common/PresentationIpcInterface.d.ts +40 -40
- package/lib/cjs/presentation-common/PresentationIpcInterface.js +12 -12
- package/lib/cjs/presentation-common/PresentationManagerOptions.d.ts +273 -273
- package/lib/cjs/presentation-common/PresentationManagerOptions.d.ts.map +1 -1
- package/lib/cjs/presentation-common/PresentationManagerOptions.js +23 -23
- package/lib/cjs/presentation-common/PresentationRpcInterface.d.ts +186 -186
- package/lib/cjs/presentation-common/PresentationRpcInterface.d.ts.map +1 -1
- package/lib/cjs/presentation-common/PresentationRpcInterface.js +108 -104
- package/lib/cjs/presentation-common/PresentationRpcInterface.js.map +1 -1
- package/lib/cjs/presentation-common/PropertyFormatter.d.ts +30 -30
- package/lib/cjs/presentation-common/PropertyFormatter.js +198 -198
- package/lib/cjs/presentation-common/RegisteredRuleset.d.ts +26 -26
- package/lib/cjs/presentation-common/RegisteredRuleset.js +33 -33
- package/lib/cjs/presentation-common/RpcRequestsHandler.d.ts +82 -82
- package/lib/cjs/presentation-common/RpcRequestsHandler.js +166 -166
- package/lib/cjs/presentation-common/RulesetVariables.d.ts +171 -171
- package/lib/cjs/presentation-common/RulesetVariables.d.ts.map +1 -1
- package/lib/cjs/presentation-common/RulesetVariables.js +55 -55
- package/lib/cjs/presentation-common/RulesetsFactory.d.ts +44 -44
- package/lib/cjs/presentation-common/RulesetsFactory.d.ts.map +1 -1
- package/lib/cjs/presentation-common/RulesetsFactory.js +223 -223
- package/lib/cjs/presentation-common/Update.d.ts +213 -213
- package/lib/cjs/presentation-common/Update.d.ts.map +1 -1
- package/lib/cjs/presentation-common/Update.js +226 -226
- package/lib/cjs/presentation-common/Utils.d.ts +62 -62
- package/lib/cjs/presentation-common/Utils.d.ts.map +1 -1
- package/lib/cjs/presentation-common/Utils.js +43 -43
- package/lib/cjs/presentation-common/content/Category.d.ts +49 -49
- package/lib/cjs/presentation-common/content/Category.js +48 -48
- package/lib/cjs/presentation-common/content/Content.d.ts +38 -38
- package/lib/cjs/presentation-common/content/Content.js +56 -56
- package/lib/cjs/presentation-common/content/ContentTraverser.d.ts +271 -271
- package/lib/cjs/presentation-common/content/ContentTraverser.js +437 -437
- package/lib/cjs/presentation-common/content/Descriptor.d.ts +328 -328
- package/lib/cjs/presentation-common/content/Descriptor.js +191 -191
- package/lib/cjs/presentation-common/content/DisplayTypes.d.ts +21 -21
- package/lib/cjs/presentation-common/content/DisplayTypes.js +29 -29
- package/lib/cjs/presentation-common/content/Editor.d.ts +15 -15
- package/lib/cjs/presentation-common/content/Editor.js +9 -9
- package/lib/cjs/presentation-common/content/Fields.d.ts +298 -298
- package/lib/cjs/presentation-common/content/Fields.d.ts.map +1 -1
- package/lib/cjs/presentation-common/content/Fields.js +393 -393
- package/lib/cjs/presentation-common/content/Item.d.ts +85 -85
- package/lib/cjs/presentation-common/content/Item.js +84 -84
- package/lib/cjs/presentation-common/content/Property.d.ts +57 -57
- package/lib/cjs/presentation-common/content/Property.d.ts.map +1 -1
- package/lib/cjs/presentation-common/content/Property.js +40 -40
- package/lib/cjs/presentation-common/content/Renderer.d.ts +11 -11
- package/lib/cjs/presentation-common/content/Renderer.js +9 -9
- package/lib/cjs/presentation-common/content/TypeDescription.d.ts +72 -72
- package/lib/cjs/presentation-common/content/TypeDescription.d.ts.map +1 -1
- package/lib/cjs/presentation-common/content/TypeDescription.js +23 -23
- package/lib/cjs/presentation-common/content/Value.d.ts +189 -189
- package/lib/cjs/presentation-common/content/Value.d.ts.map +1 -1
- package/lib/cjs/presentation-common/content/Value.js +273 -273
- package/lib/cjs/presentation-common/hierarchy/HierarchyLevel.d.ts +37 -37
- package/lib/cjs/presentation-common/hierarchy/HierarchyLevel.js +31 -31
- package/lib/cjs/presentation-common/hierarchy/Key.d.ts +246 -246
- package/lib/cjs/presentation-common/hierarchy/Key.d.ts.map +1 -1
- package/lib/cjs/presentation-common/hierarchy/Key.js +121 -121
- package/lib/cjs/presentation-common/hierarchy/Node.d.ts +154 -154
- package/lib/cjs/presentation-common/hierarchy/Node.d.ts.map +1 -1
- package/lib/cjs/presentation-common/hierarchy/Node.js +106 -106
- package/lib/cjs/presentation-common/hierarchy/NodePathElement.d.ts +96 -96
- package/lib/cjs/presentation-common/hierarchy/NodePathElement.js +122 -122
- package/lib/cjs/presentation-common/rules/ClassSpecifications.d.ts +45 -45
- package/lib/cjs/presentation-common/rules/ClassSpecifications.js +9 -9
- package/lib/cjs/presentation-common/rules/RelatedInstanceSpecification.d.ts +31 -31
- package/lib/cjs/presentation-common/rules/RelatedInstanceSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/RelationshipDirection.d.ts +13 -13
- package/lib/cjs/presentation-common/rules/RelationshipDirection.js +21 -21
- package/lib/cjs/presentation-common/rules/RelationshipPathSpecification.d.ts +56 -56
- package/lib/cjs/presentation-common/rules/RelationshipPathSpecification.d.ts.map +1 -1
- package/lib/cjs/presentation-common/rules/RelationshipPathSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/Rule.d.ts +76 -76
- package/lib/cjs/presentation-common/rules/Rule.js +35 -35
- package/lib/cjs/presentation-common/rules/Ruleset.d.ts +65 -65
- package/lib/cjs/presentation-common/rules/Ruleset.js +9 -9
- package/lib/cjs/presentation-common/rules/SchemasSpecification.d.ts +41 -41
- package/lib/cjs/presentation-common/rules/SchemasSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/Variables.d.ts +58 -58
- package/lib/cjs/presentation-common/rules/Variables.js +25 -25
- package/lib/cjs/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.d.ts +41 -41
- package/lib/cjs/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/content/ContentRelatedInstancesSpecification.d.ts +25 -25
- package/lib/cjs/presentation-common/rules/content/ContentRelatedInstancesSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/content/ContentRule.d.ts +30 -30
- package/lib/cjs/presentation-common/rules/content/ContentRule.js +9 -9
- package/lib/cjs/presentation-common/rules/content/ContentSpecification.d.ts +58 -58
- package/lib/cjs/presentation-common/rules/content/ContentSpecification.js +20 -20
- package/lib/cjs/presentation-common/rules/content/DefaultPropertyCategoryOverride.d.ts +19 -19
- package/lib/cjs/presentation-common/rules/content/DefaultPropertyCategoryOverride.js +9 -9
- package/lib/cjs/presentation-common/rules/content/PropertySpecification.d.ts +86 -86
- package/lib/cjs/presentation-common/rules/content/PropertySpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/content/SelectedNodeInstancesSpecification.d.ts +28 -28
- package/lib/cjs/presentation-common/rules/content/SelectedNodeInstancesSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.d.ts +25 -25
- package/lib/cjs/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/content/modifiers/ContentModifier.d.ts +57 -57
- package/lib/cjs/presentation-common/rules/content/modifiers/ContentModifier.js +9 -9
- package/lib/cjs/presentation-common/rules/content/modifiers/CustomRendererSpecification.d.ts +17 -17
- package/lib/cjs/presentation-common/rules/content/modifiers/CustomRendererSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/content/modifiers/PropertyCategorySpecification.d.ts +107 -107
- package/lib/cjs/presentation-common/rules/content/modifiers/PropertyCategorySpecification.d.ts.map +1 -1
- package/lib/cjs/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.d.ts +108 -108
- package/lib/cjs/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js +21 -21
- package/lib/cjs/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.d.ts +96 -96
- package/lib/cjs/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js +43 -43
- package/lib/cjs/presentation-common/rules/customization/CheckBoxRule.d.ts +44 -44
- package/lib/cjs/presentation-common/rules/customization/CheckBoxRule.js +9 -9
- package/lib/cjs/presentation-common/rules/customization/CustomizationRule.d.ts +36 -36
- package/lib/cjs/presentation-common/rules/customization/CustomizationRule.js +9 -9
- package/lib/cjs/presentation-common/rules/customization/ExtendedDataRule.d.ts +27 -27
- package/lib/cjs/presentation-common/rules/customization/ExtendedDataRule.js +9 -9
- package/lib/cjs/presentation-common/rules/customization/GroupingRule.d.ts +207 -207
- package/lib/cjs/presentation-common/rules/customization/GroupingRule.js +51 -51
- package/lib/cjs/presentation-common/rules/customization/ImageIdOverride.d.ts +29 -29
- package/lib/cjs/presentation-common/rules/customization/ImageIdOverride.js +9 -9
- package/lib/cjs/presentation-common/rules/customization/InstanceLabelOverride.d.ts +158 -158
- package/lib/cjs/presentation-common/rules/customization/InstanceLabelOverride.d.ts.map +1 -1
- package/lib/cjs/presentation-common/rules/customization/InstanceLabelOverride.js +25 -25
- package/lib/cjs/presentation-common/rules/customization/LabelOverride.d.ts +40 -40
- package/lib/cjs/presentation-common/rules/customization/LabelOverride.js +9 -9
- package/lib/cjs/presentation-common/rules/customization/SortingRule.d.ts +58 -58
- package/lib/cjs/presentation-common/rules/customization/SortingRule.d.ts.map +1 -1
- package/lib/cjs/presentation-common/rules/customization/SortingRule.js +9 -9
- package/lib/cjs/presentation-common/rules/customization/StyleOverride.d.ts +48 -48
- package/lib/cjs/presentation-common/rules/customization/StyleOverride.js +9 -9
- package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeRule.d.ts +14 -14
- package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeRule.js +9 -9
- package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeSpecification.d.ts +98 -98
- package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeSpecification.d.ts.map +1 -1
- package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeSpecification.js +21 -21
- package/lib/cjs/presentation-common/rules/hierarchy/CustomNodeSpecification.d.ts +31 -31
- package/lib/cjs/presentation-common/rules/hierarchy/CustomNodeSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.d.ts +79 -79
- package/lib/cjs/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js +19 -19
- package/lib/cjs/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.d.ts +39 -39
- package/lib/cjs/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/hierarchy/NavigationRule.d.ts +50 -50
- package/lib/cjs/presentation-common/rules/hierarchy/NavigationRule.d.ts.map +1 -1
- package/lib/cjs/presentation-common/rules/hierarchy/NavigationRule.js +9 -9
- package/lib/cjs/presentation-common/rules/hierarchy/NodeArtifactsRule.d.ts +27 -27
- package/lib/cjs/presentation-common/rules/hierarchy/NodeArtifactsRule.js +9 -9
- package/lib/cjs/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.d.ts +27 -27
- package/lib/cjs/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js +9 -9
- package/lib/cjs/presentation-common/rules/hierarchy/RootNodeRule.d.ts +16 -16
- package/lib/cjs/presentation-common/rules/hierarchy/RootNodeRule.js +9 -9
- package/lib/cjs/presentation-common/rules/hierarchy/SubCondition.d.ts +35 -35
- package/lib/cjs/presentation-common/rules/hierarchy/SubCondition.js +9 -9
- package/lib/cjs/presentation-common/selection/SelectionScope.d.ts +38 -38
- package/lib/cjs/presentation-common/selection/SelectionScope.d.ts.map +1 -1
- package/lib/cjs/presentation-common/selection/SelectionScope.js +9 -9
- package/lib/cjs/presentation-common.d.ts +113 -113
- package/lib/cjs/presentation-common.js +133 -129
- package/lib/cjs/presentation-common.js.map +1 -1
- package/lib/esm/presentation-common/AsyncTasks.d.ts +22 -22
- package/lib/esm/presentation-common/AsyncTasks.js +34 -34
- package/lib/esm/presentation-common/CommonLoggerCategory.d.ts +12 -12
- package/lib/esm/presentation-common/CommonLoggerCategory.js +17 -17
- package/lib/esm/presentation-common/Diagnostics.d.ts +125 -125
- package/lib/esm/presentation-common/Diagnostics.d.ts.map +1 -1
- package/lib/esm/presentation-common/Diagnostics.js +67 -67
- package/lib/esm/presentation-common/EC.d.ts +350 -350
- package/lib/esm/presentation-common/EC.d.ts.map +1 -1
- package/lib/esm/presentation-common/EC.js +287 -287
- package/lib/esm/presentation-common/ElementProperties.d.ts +123 -123
- package/lib/esm/presentation-common/ElementProperties.d.ts.map +1 -1
- package/lib/esm/presentation-common/ElementProperties.js +8 -8
- package/lib/esm/presentation-common/Error.d.ts +47 -47
- package/lib/esm/presentation-common/Error.js +60 -60
- package/lib/esm/presentation-common/InstanceFilterDefinition.d.ts +93 -93
- package/lib/esm/presentation-common/InstanceFilterDefinition.d.ts.map +1 -1
- package/lib/esm/presentation-common/InstanceFilterDefinition.js +8 -8
- package/lib/esm/presentation-common/KeySet.d.ts +146 -146
- package/lib/esm/presentation-common/KeySet.d.ts.map +1 -1
- package/lib/esm/presentation-common/KeySet.js +424 -424
- package/lib/esm/presentation-common/LabelDefinition.d.ts +93 -93
- package/lib/esm/presentation-common/LabelDefinition.d.ts.map +1 -1
- package/lib/esm/presentation-common/LabelDefinition.js +75 -75
- package/lib/esm/presentation-common/LocalizationHelper.d.ts +29 -29
- package/lib/esm/presentation-common/LocalizationHelper.js +106 -106
- package/lib/esm/presentation-common/PresentationIpcInterface.d.ts +40 -40
- package/lib/esm/presentation-common/PresentationIpcInterface.js +9 -9
- package/lib/esm/presentation-common/PresentationManagerOptions.d.ts +273 -273
- package/lib/esm/presentation-common/PresentationManagerOptions.d.ts.map +1 -1
- package/lib/esm/presentation-common/PresentationManagerOptions.js +18 -18
- package/lib/esm/presentation-common/PresentationRpcInterface.d.ts +186 -186
- package/lib/esm/presentation-common/PresentationRpcInterface.d.ts.map +1 -1
- package/lib/esm/presentation-common/PresentationRpcInterface.js +105 -100
- package/lib/esm/presentation-common/PresentationRpcInterface.js.map +1 -1
- package/lib/esm/presentation-common/PropertyFormatter.d.ts +30 -30
- package/lib/esm/presentation-common/PropertyFormatter.js +193 -193
- package/lib/esm/presentation-common/RegisteredRuleset.d.ts +26 -26
- package/lib/esm/presentation-common/RegisteredRuleset.js +29 -29
- package/lib/esm/presentation-common/RpcRequestsHandler.d.ts +82 -82
- package/lib/esm/presentation-common/RpcRequestsHandler.js +162 -162
- package/lib/esm/presentation-common/RulesetVariables.d.ts +171 -171
- package/lib/esm/presentation-common/RulesetVariables.d.ts.map +1 -1
- package/lib/esm/presentation-common/RulesetVariables.js +52 -52
- package/lib/esm/presentation-common/RulesetsFactory.d.ts +44 -44
- package/lib/esm/presentation-common/RulesetsFactory.d.ts.map +1 -1
- package/lib/esm/presentation-common/RulesetsFactory.js +219 -219
- package/lib/esm/presentation-common/Update.d.ts +213 -213
- package/lib/esm/presentation-common/Update.d.ts.map +1 -1
- package/lib/esm/presentation-common/Update.js +223 -223
- package/lib/esm/presentation-common/Utils.d.ts +62 -62
- package/lib/esm/presentation-common/Utils.d.ts.map +1 -1
- package/lib/esm/presentation-common/Utils.js +39 -39
- package/lib/esm/presentation-common/content/Category.d.ts +49 -49
- package/lib/esm/presentation-common/content/Category.js +45 -45
- package/lib/esm/presentation-common/content/Content.d.ts +38 -38
- package/lib/esm/presentation-common/content/Content.js +52 -52
- package/lib/esm/presentation-common/content/ContentTraverser.d.ts +271 -271
- package/lib/esm/presentation-common/content/ContentTraverser.js +427 -427
- package/lib/esm/presentation-common/content/Descriptor.d.ts +328 -328
- package/lib/esm/presentation-common/content/Descriptor.js +187 -187
- package/lib/esm/presentation-common/content/DisplayTypes.d.ts +21 -21
- package/lib/esm/presentation-common/content/DisplayTypes.js +26 -26
- package/lib/esm/presentation-common/content/Editor.d.ts +15 -15
- package/lib/esm/presentation-common/content/Editor.js +8 -8
- package/lib/esm/presentation-common/content/Fields.d.ts +298 -298
- package/lib/esm/presentation-common/content/Fields.d.ts.map +1 -1
- package/lib/esm/presentation-common/content/Fields.js +386 -386
- package/lib/esm/presentation-common/content/Item.d.ts +85 -85
- package/lib/esm/presentation-common/content/Item.js +80 -80
- package/lib/esm/presentation-common/content/Property.d.ts +57 -57
- package/lib/esm/presentation-common/content/Property.d.ts.map +1 -1
- package/lib/esm/presentation-common/content/Property.js +37 -37
- package/lib/esm/presentation-common/content/Renderer.d.ts +11 -11
- package/lib/esm/presentation-common/content/Renderer.js +8 -8
- package/lib/esm/presentation-common/content/TypeDescription.d.ts +72 -72
- package/lib/esm/presentation-common/content/TypeDescription.d.ts.map +1 -1
- package/lib/esm/presentation-common/content/TypeDescription.js +20 -20
- package/lib/esm/presentation-common/content/Value.d.ts +189 -189
- package/lib/esm/presentation-common/content/Value.d.ts.map +1 -1
- package/lib/esm/presentation-common/content/Value.js +270 -270
- package/lib/esm/presentation-common/hierarchy/HierarchyLevel.d.ts +37 -37
- package/lib/esm/presentation-common/hierarchy/HierarchyLevel.js +28 -28
- package/lib/esm/presentation-common/hierarchy/Key.d.ts +246 -246
- package/lib/esm/presentation-common/hierarchy/Key.d.ts.map +1 -1
- package/lib/esm/presentation-common/hierarchy/Key.js +118 -118
- package/lib/esm/presentation-common/hierarchy/Node.d.ts +154 -154
- package/lib/esm/presentation-common/hierarchy/Node.d.ts.map +1 -1
- package/lib/esm/presentation-common/hierarchy/Node.js +103 -103
- package/lib/esm/presentation-common/hierarchy/NodePathElement.d.ts +96 -96
- package/lib/esm/presentation-common/hierarchy/NodePathElement.js +119 -119
- package/lib/esm/presentation-common/rules/ClassSpecifications.d.ts +45 -45
- package/lib/esm/presentation-common/rules/ClassSpecifications.js +8 -8
- package/lib/esm/presentation-common/rules/RelatedInstanceSpecification.d.ts +31 -31
- package/lib/esm/presentation-common/rules/RelatedInstanceSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/RelationshipDirection.d.ts +13 -13
- package/lib/esm/presentation-common/rules/RelationshipDirection.js +18 -18
- package/lib/esm/presentation-common/rules/RelationshipPathSpecification.d.ts +56 -56
- package/lib/esm/presentation-common/rules/RelationshipPathSpecification.d.ts.map +1 -1
- package/lib/esm/presentation-common/rules/RelationshipPathSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/Rule.d.ts +76 -76
- package/lib/esm/presentation-common/rules/Rule.js +32 -32
- package/lib/esm/presentation-common/rules/Ruleset.d.ts +65 -65
- package/lib/esm/presentation-common/rules/Ruleset.js +8 -8
- package/lib/esm/presentation-common/rules/SchemasSpecification.d.ts +41 -41
- package/lib/esm/presentation-common/rules/SchemasSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/Variables.d.ts +58 -58
- package/lib/esm/presentation-common/rules/Variables.js +22 -22
- package/lib/esm/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.d.ts +41 -41
- package/lib/esm/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/content/ContentRelatedInstancesSpecification.d.ts +25 -25
- package/lib/esm/presentation-common/rules/content/ContentRelatedInstancesSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/content/ContentRule.d.ts +30 -30
- package/lib/esm/presentation-common/rules/content/ContentRule.js +8 -8
- package/lib/esm/presentation-common/rules/content/ContentSpecification.d.ts +58 -58
- package/lib/esm/presentation-common/rules/content/ContentSpecification.js +17 -17
- package/lib/esm/presentation-common/rules/content/DefaultPropertyCategoryOverride.d.ts +19 -19
- package/lib/esm/presentation-common/rules/content/DefaultPropertyCategoryOverride.js +8 -8
- package/lib/esm/presentation-common/rules/content/PropertySpecification.d.ts +86 -86
- package/lib/esm/presentation-common/rules/content/PropertySpecification.js +8 -8
- package/lib/esm/presentation-common/rules/content/SelectedNodeInstancesSpecification.d.ts +28 -28
- package/lib/esm/presentation-common/rules/content/SelectedNodeInstancesSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.d.ts +25 -25
- package/lib/esm/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/content/modifiers/ContentModifier.d.ts +57 -57
- package/lib/esm/presentation-common/rules/content/modifiers/ContentModifier.js +8 -8
- package/lib/esm/presentation-common/rules/content/modifiers/CustomRendererSpecification.d.ts +17 -17
- package/lib/esm/presentation-common/rules/content/modifiers/CustomRendererSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/content/modifiers/PropertyCategorySpecification.d.ts +107 -107
- package/lib/esm/presentation-common/rules/content/modifiers/PropertyCategorySpecification.d.ts.map +1 -1
- package/lib/esm/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js +8 -8
- package/lib/esm/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.d.ts +108 -108
- package/lib/esm/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js +18 -18
- package/lib/esm/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.d.ts +96 -96
- package/lib/esm/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js +40 -40
- package/lib/esm/presentation-common/rules/customization/CheckBoxRule.d.ts +44 -44
- package/lib/esm/presentation-common/rules/customization/CheckBoxRule.js +8 -8
- package/lib/esm/presentation-common/rules/customization/CustomizationRule.d.ts +36 -36
- package/lib/esm/presentation-common/rules/customization/CustomizationRule.js +8 -8
- package/lib/esm/presentation-common/rules/customization/ExtendedDataRule.d.ts +27 -27
- package/lib/esm/presentation-common/rules/customization/ExtendedDataRule.js +8 -8
- package/lib/esm/presentation-common/rules/customization/GroupingRule.d.ts +207 -207
- package/lib/esm/presentation-common/rules/customization/GroupingRule.js +48 -48
- package/lib/esm/presentation-common/rules/customization/ImageIdOverride.d.ts +29 -29
- package/lib/esm/presentation-common/rules/customization/ImageIdOverride.js +8 -8
- package/lib/esm/presentation-common/rules/customization/InstanceLabelOverride.d.ts +158 -158
- package/lib/esm/presentation-common/rules/customization/InstanceLabelOverride.d.ts.map +1 -1
- package/lib/esm/presentation-common/rules/customization/InstanceLabelOverride.js +22 -22
- package/lib/esm/presentation-common/rules/customization/LabelOverride.d.ts +40 -40
- package/lib/esm/presentation-common/rules/customization/LabelOverride.js +8 -8
- package/lib/esm/presentation-common/rules/customization/SortingRule.d.ts +58 -58
- package/lib/esm/presentation-common/rules/customization/SortingRule.d.ts.map +1 -1
- package/lib/esm/presentation-common/rules/customization/SortingRule.js +8 -8
- package/lib/esm/presentation-common/rules/customization/StyleOverride.d.ts +48 -48
- package/lib/esm/presentation-common/rules/customization/StyleOverride.js +8 -8
- package/lib/esm/presentation-common/rules/hierarchy/ChildNodeRule.d.ts +14 -14
- package/lib/esm/presentation-common/rules/hierarchy/ChildNodeRule.js +8 -8
- package/lib/esm/presentation-common/rules/hierarchy/ChildNodeSpecification.d.ts +98 -98
- package/lib/esm/presentation-common/rules/hierarchy/ChildNodeSpecification.d.ts.map +1 -1
- package/lib/esm/presentation-common/rules/hierarchy/ChildNodeSpecification.js +18 -18
- package/lib/esm/presentation-common/rules/hierarchy/CustomNodeSpecification.d.ts +31 -31
- package/lib/esm/presentation-common/rules/hierarchy/CustomNodeSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.d.ts +79 -79
- package/lib/esm/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js +16 -16
- package/lib/esm/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.d.ts +39 -39
- package/lib/esm/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/hierarchy/NavigationRule.d.ts +50 -50
- package/lib/esm/presentation-common/rules/hierarchy/NavigationRule.d.ts.map +1 -1
- package/lib/esm/presentation-common/rules/hierarchy/NavigationRule.js +8 -8
- package/lib/esm/presentation-common/rules/hierarchy/NodeArtifactsRule.d.ts +27 -27
- package/lib/esm/presentation-common/rules/hierarchy/NodeArtifactsRule.js +8 -8
- package/lib/esm/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.d.ts +27 -27
- package/lib/esm/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js +8 -8
- package/lib/esm/presentation-common/rules/hierarchy/RootNodeRule.d.ts +16 -16
- package/lib/esm/presentation-common/rules/hierarchy/RootNodeRule.js +8 -8
- package/lib/esm/presentation-common/rules/hierarchy/SubCondition.d.ts +35 -35
- package/lib/esm/presentation-common/rules/hierarchy/SubCondition.js +8 -8
- package/lib/esm/presentation-common/selection/SelectionScope.d.ts +38 -38
- package/lib/esm/presentation-common/selection/SelectionScope.d.ts.map +1 -1
- package/lib/esm/presentation-common/selection/SelectionScope.js +8 -8
- package/lib/esm/presentation-common.d.ts +113 -113
- package/lib/esm/presentation-common.js +117 -117
- package/package.json +12 -12
|
@@ -1,428 +1,428 @@
|
|
|
1
|
-
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
/** @packageDocumentation
|
|
6
|
-
* @module Content
|
|
7
|
-
*/
|
|
8
|
-
import { assert, using } from "@itwin/core-bentley";
|
|
9
|
-
import { Content } from "./Content";
|
|
10
|
-
import { Field } from "./Fields";
|
|
11
|
-
import { Item } from "./Item";
|
|
12
|
-
import { PropertyValueFormat } from "./TypeDescription";
|
|
13
|
-
import { DisplayValue, Value } from "./Value";
|
|
14
|
-
/**
|
|
15
|
-
* An utility for traversing field hierarchy. Stops traversal as soon as `cb` returns `false`.
|
|
16
|
-
* @public
|
|
17
|
-
*/
|
|
18
|
-
export function traverseFieldHierarchy(hierarchy, cb) {
|
|
19
|
-
if (cb(hierarchy))
|
|
20
|
-
hierarchy.childFields.forEach((childHierarchy) => traverseFieldHierarchy(childHierarchy, cb));
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* An utility to traverse content using provided visitor. Provides means to parse content into different formats,
|
|
24
|
-
* for different components.
|
|
25
|
-
* @public
|
|
26
|
-
*/
|
|
27
|
-
export function traverseContent(visitor, content) {
|
|
28
|
-
if (!visitor.startContent({ descriptor: content.descriptor }))
|
|
29
|
-
return;
|
|
30
|
-
try {
|
|
31
|
-
const fieldHierarchies = createFieldHierarchies(content.descriptor.fields);
|
|
32
|
-
visitor.processFieldHierarchies({ hierarchies: fieldHierarchies });
|
|
33
|
-
content.contentSet.forEach((item) => {
|
|
34
|
-
traverseContentItemFields(visitor, fieldHierarchies, item);
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
finally {
|
|
38
|
-
visitor.finishContent();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* An utility for calling [[traverseContent]] when there's only one content item.
|
|
43
|
-
* @public
|
|
44
|
-
*/
|
|
45
|
-
export function traverseContentItem(visitor, descriptor, item) {
|
|
46
|
-
traverseContent(visitor, new Content(descriptor, [item]));
|
|
47
|
-
}
|
|
48
|
-
class VisitedCategories {
|
|
49
|
-
constructor(_visitor, category) {
|
|
50
|
-
this._visitor = _visitor;
|
|
51
|
-
const stack = [];
|
|
52
|
-
let curr = category;
|
|
53
|
-
while (curr) {
|
|
54
|
-
stack.push(curr);
|
|
55
|
-
curr = curr.parent;
|
|
56
|
-
}
|
|
57
|
-
stack.reverse();
|
|
58
|
-
this._didVisitAllHierarchy = true;
|
|
59
|
-
this._visitedCategories = [];
|
|
60
|
-
for (curr of stack) {
|
|
61
|
-
if (this._visitor.startCategory({ category: curr })) {
|
|
62
|
-
this._visitedCategories.push(curr);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
this._didVisitAllHierarchy = false;
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
dispose() {
|
|
71
|
-
while (this._visitedCategories.pop())
|
|
72
|
-
this._visitor.finishCategory();
|
|
73
|
-
}
|
|
74
|
-
get shouldContinue() { return this._didVisitAllHierarchy; }
|
|
75
|
-
}
|
|
76
|
-
function traverseContentItemFields(visitor, fieldHierarchies, item) {
|
|
77
|
-
if (!visitor.startItem({ item }))
|
|
78
|
-
return;
|
|
79
|
-
try {
|
|
80
|
-
fieldHierarchies.forEach((fieldHierarchy) => {
|
|
81
|
-
using(new VisitedCategories(visitor, fieldHierarchy.field.category), (res) => {
|
|
82
|
-
if (res.shouldContinue)
|
|
83
|
-
traverseContentItemField(visitor, fieldHierarchy, item);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
finally {
|
|
88
|
-
visitor.finishItem();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
function traverseContentItemField(visitor, fieldHierarchy, item) {
|
|
92
|
-
if (!visitor.startField({ hierarchy: fieldHierarchy }))
|
|
93
|
-
return;
|
|
94
|
-
try {
|
|
95
|
-
const rootToThisField = createFieldPath(fieldHierarchy.field);
|
|
96
|
-
let parentFieldName;
|
|
97
|
-
const pathUpToField = rootToThisField.slice(undefined, -1);
|
|
98
|
-
for (let i = 0; i < pathUpToField.length; ++i) {
|
|
99
|
-
const parentField = pathUpToField[i];
|
|
100
|
-
const nextField = rootToThisField[i + 1];
|
|
101
|
-
if (item.isFieldMerged(parentField.name)) {
|
|
102
|
-
visitor.processMergedValue({ requestedField: fieldHierarchy.field, mergedField: parentField, parentFieldName });
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
const { emptyNestedItem, convertedItem } = convertNestedContentItemToStructArrayItem(item, parentField, nextField);
|
|
106
|
-
if (emptyNestedItem)
|
|
107
|
-
return;
|
|
108
|
-
item = convertedItem;
|
|
109
|
-
parentFieldName = combineFieldNames(parentField.name, parentFieldName);
|
|
110
|
-
}
|
|
111
|
-
if (item.isFieldMerged(fieldHierarchy.field.name)) {
|
|
112
|
-
visitor.processMergedValue({ requestedField: fieldHierarchy.field, mergedField: fieldHierarchy.field, parentFieldName });
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
if (fieldHierarchy.field.isNestedContentField()) {
|
|
116
|
-
fieldHierarchy = convertNestedContentFieldHierarchyToStructArrayHierarchy(fieldHierarchy, parentFieldName);
|
|
117
|
-
const { emptyNestedItem, convertedItem } = convertNestedContentFieldHierarchyItemToStructArrayItem(item, fieldHierarchy);
|
|
118
|
-
if (emptyNestedItem)
|
|
119
|
-
return;
|
|
120
|
-
item = convertedItem;
|
|
121
|
-
}
|
|
122
|
-
else if (pathUpToField.length > 0) {
|
|
123
|
-
fieldHierarchy = {
|
|
124
|
-
...fieldHierarchy,
|
|
125
|
-
field: Object.assign(fieldHierarchy.field.clone(), {
|
|
126
|
-
type: {
|
|
127
|
-
valueFormat: PropertyValueFormat.Array,
|
|
128
|
-
typeName: `${fieldHierarchy.field.type.typeName}[]`,
|
|
129
|
-
memberType: fieldHierarchy.field.type,
|
|
130
|
-
},
|
|
131
|
-
}),
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
traverseContentItemFieldValue(visitor, fieldHierarchy, item.mergedFieldNames, fieldHierarchy.field.type, parentFieldName, item.values[fieldHierarchy.field.name], item.displayValues[fieldHierarchy.field.name]);
|
|
135
|
-
}
|
|
136
|
-
finally {
|
|
137
|
-
visitor.finishField();
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
function traverseContentItemFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue) {
|
|
141
|
-
if (rawValue !== undefined) {
|
|
142
|
-
if (valueType.valueFormat === PropertyValueFormat.Array) {
|
|
143
|
-
assert(Value.isArray(rawValue));
|
|
144
|
-
assert(DisplayValue.isArray(displayValue));
|
|
145
|
-
return traverseContentItemArrayFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);
|
|
146
|
-
}
|
|
147
|
-
if (valueType.valueFormat === PropertyValueFormat.Struct) {
|
|
148
|
-
assert(Value.isMap(rawValue));
|
|
149
|
-
assert(DisplayValue.isMap(displayValue));
|
|
150
|
-
return traverseContentItemStructFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
traverseContentItemPrimitiveFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);
|
|
154
|
-
}
|
|
155
|
-
function traverseContentItemArrayFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValues, displayValues) {
|
|
156
|
-
assert(rawValues.length === displayValues.length);
|
|
157
|
-
assert(valueType.valueFormat === PropertyValueFormat.Array);
|
|
158
|
-
if (!visitor.startArray({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues }))
|
|
159
|
-
return;
|
|
160
|
-
try {
|
|
161
|
-
const itemType = valueType.memberType;
|
|
162
|
-
rawValues.forEach((_, i) => {
|
|
163
|
-
traverseContentItemFieldValue(visitor, fieldHierarchy, mergedFieldNames, itemType, parentFieldName, rawValues[i], displayValues[i]);
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
finally {
|
|
167
|
-
visitor.finishArray();
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
function traverseContentItemStructFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValues, displayValues) {
|
|
171
|
-
assert(valueType.valueFormat === PropertyValueFormat.Struct);
|
|
172
|
-
if (!visitor.startStruct({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues }))
|
|
173
|
-
return;
|
|
174
|
-
try {
|
|
175
|
-
if (fieldHierarchy.field.isNestedContentField())
|
|
176
|
-
parentFieldName = combineFieldNames(fieldHierarchy.field.name, parentFieldName);
|
|
177
|
-
valueType.members.forEach((memberDescription) => {
|
|
178
|
-
let memberField = fieldHierarchy.childFields.find((f) => f.field.name === memberDescription.name);
|
|
179
|
-
if (!memberField) {
|
|
180
|
-
// Not finding a member field means we're traversing an ECStruct. We still need to carry member information, so we
|
|
181
|
-
// create a fake field to represent the member
|
|
182
|
-
memberField = {
|
|
183
|
-
field: new Field(fieldHierarchy.field.category, memberDescription.name, memberDescription.label, memberDescription.type, fieldHierarchy.field.isReadonly, 0),
|
|
184
|
-
childFields: [],
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
traverseContentItemFieldValue(visitor, memberField, mergedFieldNames, memberDescription.type, parentFieldName, rawValues[memberDescription.name], displayValues[memberDescription.name]);
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
finally {
|
|
191
|
-
visitor.finishStruct();
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
function traverseContentItemPrimitiveFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue) {
|
|
195
|
-
if (-1 !== mergedFieldNames.indexOf(fieldHierarchy.field.name)) {
|
|
196
|
-
visitor.processMergedValue({ mergedField: fieldHierarchy.field, requestedField: fieldHierarchy.field, parentFieldName });
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
visitor.processPrimitiveValue({ field: fieldHierarchy.field, valueType, parentFieldName, rawValue, displayValue });
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Parses a list of [[Field]] objects into a list of [[FieldHierarchy]].
|
|
203
|
-
*
|
|
204
|
-
* @param ignoreCategories Enables adding all of the `nestedFields` to parent field's `childFields`
|
|
205
|
-
* without considering categories.
|
|
206
|
-
*
|
|
207
|
-
* @public
|
|
208
|
-
*/
|
|
209
|
-
export function createFieldHierarchies(fields, ignoreCategories) {
|
|
210
|
-
const hierarchies = new Array();
|
|
211
|
-
const visitField = (category, field, parentField) => {
|
|
212
|
-
let childFields = [];
|
|
213
|
-
if (field.isNestedContentField()) {
|
|
214
|
-
// visit all nested fields
|
|
215
|
-
childFields = visitFields(field.nestedFields, field);
|
|
216
|
-
if (0 === childFields.length)
|
|
217
|
-
return undefined;
|
|
218
|
-
}
|
|
219
|
-
const fieldHierarchy = { field, childFields };
|
|
220
|
-
if (category === parentField?.category || ignoreCategories && parentField) {
|
|
221
|
-
// if categories of this field and its parent field match - return the field hierarchy without
|
|
222
|
-
// including it as a top level field
|
|
223
|
-
return fieldHierarchy;
|
|
224
|
-
}
|
|
225
|
-
addFieldHierarchy(hierarchies, fieldHierarchy);
|
|
226
|
-
return undefined;
|
|
227
|
-
};
|
|
228
|
-
const visitFields = (visitedFields, parentField) => {
|
|
229
|
-
const includedFields = [];
|
|
230
|
-
visitedFields.forEach((field) => {
|
|
231
|
-
const visitedField = visitField(field.category, field, parentField);
|
|
232
|
-
if (visitedField)
|
|
233
|
-
includedFields.push(visitedField);
|
|
234
|
-
});
|
|
235
|
-
return includedFields;
|
|
236
|
-
};
|
|
237
|
-
visitFields(fields, undefined);
|
|
238
|
-
return hierarchies;
|
|
239
|
-
}
|
|
240
|
-
function findRelatedFields(rootFields, hierarchy) {
|
|
241
|
-
// build a list of parent fields in hierarchy
|
|
242
|
-
const fields = [];
|
|
243
|
-
let currField = hierarchy.field;
|
|
244
|
-
while (currField) {
|
|
245
|
-
fields.push(currField);
|
|
246
|
-
currField = currField.parent;
|
|
247
|
-
}
|
|
248
|
-
for (let rootIndex = 0; rootIndex < rootFields.length; ++rootIndex) {
|
|
249
|
-
const rootFieldHierarchy = rootFields[rootIndex];
|
|
250
|
-
if (rootFieldHierarchy.field.category !== hierarchy.field.category) {
|
|
251
|
-
// only interested in fields with the same category
|
|
252
|
-
continue;
|
|
253
|
-
}
|
|
254
|
-
let first = true;
|
|
255
|
-
currField = rootFieldHierarchy.field;
|
|
256
|
-
while (currField) {
|
|
257
|
-
const index = fields.findIndex((f) => f.name === currField.name);
|
|
258
|
-
if (-1 !== index) {
|
|
259
|
-
return {
|
|
260
|
-
existing: {
|
|
261
|
-
field: currField,
|
|
262
|
-
hierarchy: first ? rootFieldHierarchy : undefined,
|
|
263
|
-
index: rootIndex,
|
|
264
|
-
},
|
|
265
|
-
matchingField: fields[index],
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
currField = currField.parent;
|
|
269
|
-
first = false;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
return undefined;
|
|
273
|
-
}
|
|
274
|
-
function buildParentHierarchy(hierarchy, parentField) {
|
|
275
|
-
// note: parentField is found by walking up the parentship relationship
|
|
276
|
-
// from hierarchy.field, so we expect to always find it here
|
|
277
|
-
while (hierarchy.field !== parentField) {
|
|
278
|
-
const hierarchyParent = hierarchy.field.parent;
|
|
279
|
-
assert(hierarchyParent !== undefined);
|
|
280
|
-
hierarchy = { field: hierarchyParent, childFields: [hierarchy] };
|
|
281
|
-
}
|
|
282
|
-
return hierarchy;
|
|
283
|
-
}
|
|
284
|
-
function mergeHierarchies(lhs, rhs) {
|
|
285
|
-
assert(lhs.field.name === rhs.field.name);
|
|
286
|
-
const result = {
|
|
287
|
-
field: lhs.field.clone(),
|
|
288
|
-
childFields: [...lhs.childFields],
|
|
289
|
-
};
|
|
290
|
-
rhs.childFields.forEach((rhsChildHierarchy) => {
|
|
291
|
-
const indexInResult = result.childFields.findIndex((resultHierarchy) => resultHierarchy.field.name === rhsChildHierarchy.field.name);
|
|
292
|
-
if (indexInResult !== -1)
|
|
293
|
-
result.childFields[indexInResult] = mergeHierarchies(result.childFields[indexInResult], rhsChildHierarchy);
|
|
294
|
-
else
|
|
295
|
-
result.childFields.push(rhsChildHierarchy);
|
|
296
|
-
});
|
|
297
|
-
return result;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Adds a field hierarchy into root field hierarchies list. *
|
|
301
|
-
* @public
|
|
302
|
-
*/
|
|
303
|
-
export function addFieldHierarchy(rootHierarchies, hierarchy) {
|
|
304
|
-
const match = findRelatedFields(rootHierarchies, hierarchy);
|
|
305
|
-
if (!match) {
|
|
306
|
-
rootHierarchies.push(hierarchy);
|
|
307
|
-
return;
|
|
308
|
-
}
|
|
309
|
-
const targetHierarchy = rootHierarchies[match.existing.index];
|
|
310
|
-
const existingHierarchy = match.existing.hierarchy ?? buildParentHierarchy(targetHierarchy, match.existing.field);
|
|
311
|
-
const insertHierarchy = buildParentHierarchy(hierarchy, match.matchingField);
|
|
312
|
-
const mergedHierarchy = mergeHierarchies(existingHierarchy, insertHierarchy);
|
|
313
|
-
mergedHierarchy.field.category = hierarchy.field.category;
|
|
314
|
-
rootHierarchies[match.existing.index] = mergedHierarchy;
|
|
315
|
-
}
|
|
316
|
-
function createFieldPath(field) {
|
|
317
|
-
const path = [field];
|
|
318
|
-
let currField = field;
|
|
319
|
-
while (currField.parent) {
|
|
320
|
-
currField = currField.parent;
|
|
321
|
-
path.push(currField);
|
|
322
|
-
}
|
|
323
|
-
path.reverse();
|
|
324
|
-
return path;
|
|
325
|
-
}
|
|
326
|
-
/** @internal */
|
|
327
|
-
export const FIELD_NAMES_SEPARATOR = "$";
|
|
328
|
-
/**
|
|
329
|
-
* Combines given field names in a way that allows them to be parsed back into a list of individual names using the [[parseCombinedFieldNames]] function.
|
|
330
|
-
* @public
|
|
331
|
-
*/
|
|
332
|
-
export function combineFieldNames(fieldName, parentFieldName) {
|
|
333
|
-
return parentFieldName ? `${parentFieldName}${FIELD_NAMES_SEPARATOR}${fieldName}` : fieldName;
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* Parses given combined field names string, constructed using [[combineFieldNames]], into a list of individual field names.
|
|
337
|
-
* @public
|
|
338
|
-
*/
|
|
339
|
-
export function parseCombinedFieldNames(combinedName) {
|
|
340
|
-
return combinedName ? combinedName.split(FIELD_NAMES_SEPARATOR) : [];
|
|
341
|
-
}
|
|
342
|
-
function convertNestedContentItemToStructArrayItem(item, field, nextField) {
|
|
343
|
-
const value = item.values[field.name] ?? [];
|
|
344
|
-
assert(Value.isNestedContent(value));
|
|
345
|
-
if (value.length === 0)
|
|
346
|
-
return { emptyNestedItem: true, convertedItem: item };
|
|
347
|
-
const nextFieldValues = { raw: [], display: [] };
|
|
348
|
-
value.forEach((ncv) => {
|
|
349
|
-
const nextRawValue = ncv.values[nextField.name];
|
|
350
|
-
const nextDisplayValue = ncv.displayValues[nextField.name];
|
|
351
|
-
if (nextField.isNestedContentField()) {
|
|
352
|
-
if (nextRawValue) {
|
|
353
|
-
assert(Value.isNestedContent(nextRawValue));
|
|
354
|
-
nextFieldValues.raw.push(...nextRawValue);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
else {
|
|
358
|
-
nextFieldValues.raw.push(nextRawValue);
|
|
359
|
-
nextFieldValues.display.push(nextDisplayValue);
|
|
360
|
-
}
|
|
361
|
-
});
|
|
362
|
-
const convertedItem = new Item(item.primaryKeys, item.label, item.imageId, item.classInfo, { [nextField.name]: nextFieldValues.raw }, { [nextField.name]: nextFieldValues.display }, item.mergedFieldNames, item.extendedData); // eslint-disable-line deprecation/deprecation
|
|
363
|
-
return { emptyNestedItem: false, convertedItem };
|
|
364
|
-
}
|
|
365
|
-
function convertNestedContentFieldHierarchyToStructArrayHierarchy(fieldHierarchy, parentFieldName) {
|
|
366
|
-
const fieldName = fieldHierarchy.field.name;
|
|
367
|
-
const convertedChildFieldHierarchies = fieldHierarchy.childFields.map((child) => {
|
|
368
|
-
if (child.field.isNestedContentField())
|
|
369
|
-
return convertNestedContentFieldHierarchyToStructArrayHierarchy(child, combineFieldNames(fieldName, parentFieldName));
|
|
370
|
-
return child;
|
|
371
|
-
});
|
|
372
|
-
const convertedFieldHierarchy = {
|
|
373
|
-
field: Object.assign(fieldHierarchy.field.clone(), {
|
|
374
|
-
type: {
|
|
375
|
-
valueFormat: PropertyValueFormat.Array,
|
|
376
|
-
typeName: `${fieldHierarchy.field.type.typeName}[]`,
|
|
377
|
-
memberType: {
|
|
378
|
-
valueFormat: PropertyValueFormat.Struct,
|
|
379
|
-
typeName: fieldHierarchy.field.type.typeName,
|
|
380
|
-
members: convertedChildFieldHierarchies.map((member) => ({
|
|
381
|
-
name: member.field.name,
|
|
382
|
-
label: member.field.label,
|
|
383
|
-
type: member.field.type,
|
|
384
|
-
})),
|
|
385
|
-
},
|
|
386
|
-
},
|
|
387
|
-
}),
|
|
388
|
-
childFields: convertedChildFieldHierarchies,
|
|
389
|
-
};
|
|
390
|
-
return convertedFieldHierarchy;
|
|
391
|
-
}
|
|
392
|
-
function convertNestedContentValuesToStructArrayValuesRecursive(fieldHierarchy, ncvs) {
|
|
393
|
-
const result = { raw: [], display: [], mergedFieldNames: [] };
|
|
394
|
-
ncvs.forEach((ncv) => {
|
|
395
|
-
const values = { ...ncv.values };
|
|
396
|
-
const displayValues = { ...ncv.displayValues };
|
|
397
|
-
const mergedFieldNames = [...ncv.mergedFieldNames];
|
|
398
|
-
fieldHierarchy.childFields.forEach((childFieldHierarchy) => {
|
|
399
|
-
const childFieldName = childFieldHierarchy.field.name;
|
|
400
|
-
if (-1 !== ncv.mergedFieldNames.indexOf(childFieldName)) {
|
|
401
|
-
return;
|
|
402
|
-
}
|
|
403
|
-
if (childFieldHierarchy.field.isNestedContentField()) {
|
|
404
|
-
const value = values[childFieldName];
|
|
405
|
-
assert(Value.isNestedContent(value));
|
|
406
|
-
const convertedValues = convertNestedContentValuesToStructArrayValuesRecursive(childFieldHierarchy, value);
|
|
407
|
-
values[childFieldName] = convertedValues.raw;
|
|
408
|
-
displayValues[childFieldName] = convertedValues.display;
|
|
409
|
-
mergedFieldNames.push(...convertedValues.mergedFieldNames);
|
|
410
|
-
}
|
|
411
|
-
});
|
|
412
|
-
result.raw.push(values);
|
|
413
|
-
result.display.push(displayValues);
|
|
414
|
-
result.mergedFieldNames.push(...mergedFieldNames);
|
|
415
|
-
});
|
|
416
|
-
return result;
|
|
417
|
-
}
|
|
418
|
-
function convertNestedContentFieldHierarchyItemToStructArrayItem(item, fieldHierarchy) {
|
|
419
|
-
const fieldName = fieldHierarchy.field.name;
|
|
420
|
-
const rawValue = item.values[fieldName];
|
|
421
|
-
assert(Value.isNestedContent(rawValue));
|
|
422
|
-
if (rawValue.length === 0)
|
|
423
|
-
return { emptyNestedItem: true, convertedItem: item };
|
|
424
|
-
const converted = convertNestedContentValuesToStructArrayValuesRecursive(fieldHierarchy, rawValue);
|
|
425
|
-
const convertedItem = new Item(item.primaryKeys, item.label, item.imageId, item.classInfo, { [fieldName]: converted.raw }, { [fieldName]: converted.display }, converted.mergedFieldNames, item.extendedData); // eslint-disable-line deprecation/deprecation
|
|
426
|
-
return { emptyNestedItem: false, convertedItem };
|
|
427
|
-
}
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/** @packageDocumentation
|
|
6
|
+
* @module Content
|
|
7
|
+
*/
|
|
8
|
+
import { assert, using } from "@itwin/core-bentley";
|
|
9
|
+
import { Content } from "./Content";
|
|
10
|
+
import { Field } from "./Fields";
|
|
11
|
+
import { Item } from "./Item";
|
|
12
|
+
import { PropertyValueFormat } from "./TypeDescription";
|
|
13
|
+
import { DisplayValue, Value } from "./Value";
|
|
14
|
+
/**
|
|
15
|
+
* An utility for traversing field hierarchy. Stops traversal as soon as `cb` returns `false`.
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export function traverseFieldHierarchy(hierarchy, cb) {
|
|
19
|
+
if (cb(hierarchy))
|
|
20
|
+
hierarchy.childFields.forEach((childHierarchy) => traverseFieldHierarchy(childHierarchy, cb));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* An utility to traverse content using provided visitor. Provides means to parse content into different formats,
|
|
24
|
+
* for different components.
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export function traverseContent(visitor, content) {
|
|
28
|
+
if (!visitor.startContent({ descriptor: content.descriptor }))
|
|
29
|
+
return;
|
|
30
|
+
try {
|
|
31
|
+
const fieldHierarchies = createFieldHierarchies(content.descriptor.fields);
|
|
32
|
+
visitor.processFieldHierarchies({ hierarchies: fieldHierarchies });
|
|
33
|
+
content.contentSet.forEach((item) => {
|
|
34
|
+
traverseContentItemFields(visitor, fieldHierarchies, item);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
visitor.finishContent();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* An utility for calling [[traverseContent]] when there's only one content item.
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
export function traverseContentItem(visitor, descriptor, item) {
|
|
46
|
+
traverseContent(visitor, new Content(descriptor, [item]));
|
|
47
|
+
}
|
|
48
|
+
class VisitedCategories {
|
|
49
|
+
constructor(_visitor, category) {
|
|
50
|
+
this._visitor = _visitor;
|
|
51
|
+
const stack = [];
|
|
52
|
+
let curr = category;
|
|
53
|
+
while (curr) {
|
|
54
|
+
stack.push(curr);
|
|
55
|
+
curr = curr.parent;
|
|
56
|
+
}
|
|
57
|
+
stack.reverse();
|
|
58
|
+
this._didVisitAllHierarchy = true;
|
|
59
|
+
this._visitedCategories = [];
|
|
60
|
+
for (curr of stack) {
|
|
61
|
+
if (this._visitor.startCategory({ category: curr })) {
|
|
62
|
+
this._visitedCategories.push(curr);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this._didVisitAllHierarchy = false;
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
dispose() {
|
|
71
|
+
while (this._visitedCategories.pop())
|
|
72
|
+
this._visitor.finishCategory();
|
|
73
|
+
}
|
|
74
|
+
get shouldContinue() { return this._didVisitAllHierarchy; }
|
|
75
|
+
}
|
|
76
|
+
function traverseContentItemFields(visitor, fieldHierarchies, item) {
|
|
77
|
+
if (!visitor.startItem({ item }))
|
|
78
|
+
return;
|
|
79
|
+
try {
|
|
80
|
+
fieldHierarchies.forEach((fieldHierarchy) => {
|
|
81
|
+
using(new VisitedCategories(visitor, fieldHierarchy.field.category), (res) => {
|
|
82
|
+
if (res.shouldContinue)
|
|
83
|
+
traverseContentItemField(visitor, fieldHierarchy, item);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
visitor.finishItem();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function traverseContentItemField(visitor, fieldHierarchy, item) {
|
|
92
|
+
if (!visitor.startField({ hierarchy: fieldHierarchy }))
|
|
93
|
+
return;
|
|
94
|
+
try {
|
|
95
|
+
const rootToThisField = createFieldPath(fieldHierarchy.field);
|
|
96
|
+
let parentFieldName;
|
|
97
|
+
const pathUpToField = rootToThisField.slice(undefined, -1);
|
|
98
|
+
for (let i = 0; i < pathUpToField.length; ++i) {
|
|
99
|
+
const parentField = pathUpToField[i];
|
|
100
|
+
const nextField = rootToThisField[i + 1];
|
|
101
|
+
if (item.isFieldMerged(parentField.name)) {
|
|
102
|
+
visitor.processMergedValue({ requestedField: fieldHierarchy.field, mergedField: parentField, parentFieldName });
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const { emptyNestedItem, convertedItem } = convertNestedContentItemToStructArrayItem(item, parentField, nextField);
|
|
106
|
+
if (emptyNestedItem)
|
|
107
|
+
return;
|
|
108
|
+
item = convertedItem;
|
|
109
|
+
parentFieldName = combineFieldNames(parentField.name, parentFieldName);
|
|
110
|
+
}
|
|
111
|
+
if (item.isFieldMerged(fieldHierarchy.field.name)) {
|
|
112
|
+
visitor.processMergedValue({ requestedField: fieldHierarchy.field, mergedField: fieldHierarchy.field, parentFieldName });
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (fieldHierarchy.field.isNestedContentField()) {
|
|
116
|
+
fieldHierarchy = convertNestedContentFieldHierarchyToStructArrayHierarchy(fieldHierarchy, parentFieldName);
|
|
117
|
+
const { emptyNestedItem, convertedItem } = convertNestedContentFieldHierarchyItemToStructArrayItem(item, fieldHierarchy);
|
|
118
|
+
if (emptyNestedItem)
|
|
119
|
+
return;
|
|
120
|
+
item = convertedItem;
|
|
121
|
+
}
|
|
122
|
+
else if (pathUpToField.length > 0) {
|
|
123
|
+
fieldHierarchy = {
|
|
124
|
+
...fieldHierarchy,
|
|
125
|
+
field: Object.assign(fieldHierarchy.field.clone(), {
|
|
126
|
+
type: {
|
|
127
|
+
valueFormat: PropertyValueFormat.Array,
|
|
128
|
+
typeName: `${fieldHierarchy.field.type.typeName}[]`,
|
|
129
|
+
memberType: fieldHierarchy.field.type,
|
|
130
|
+
},
|
|
131
|
+
}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
traverseContentItemFieldValue(visitor, fieldHierarchy, item.mergedFieldNames, fieldHierarchy.field.type, parentFieldName, item.values[fieldHierarchy.field.name], item.displayValues[fieldHierarchy.field.name]);
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
visitor.finishField();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function traverseContentItemFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue) {
|
|
141
|
+
if (rawValue !== undefined) {
|
|
142
|
+
if (valueType.valueFormat === PropertyValueFormat.Array) {
|
|
143
|
+
assert(Value.isArray(rawValue));
|
|
144
|
+
assert(DisplayValue.isArray(displayValue));
|
|
145
|
+
return traverseContentItemArrayFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);
|
|
146
|
+
}
|
|
147
|
+
if (valueType.valueFormat === PropertyValueFormat.Struct) {
|
|
148
|
+
assert(Value.isMap(rawValue));
|
|
149
|
+
assert(DisplayValue.isMap(displayValue));
|
|
150
|
+
return traverseContentItemStructFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
traverseContentItemPrimitiveFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);
|
|
154
|
+
}
|
|
155
|
+
function traverseContentItemArrayFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValues, displayValues) {
|
|
156
|
+
assert(rawValues.length === displayValues.length);
|
|
157
|
+
assert(valueType.valueFormat === PropertyValueFormat.Array);
|
|
158
|
+
if (!visitor.startArray({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues }))
|
|
159
|
+
return;
|
|
160
|
+
try {
|
|
161
|
+
const itemType = valueType.memberType;
|
|
162
|
+
rawValues.forEach((_, i) => {
|
|
163
|
+
traverseContentItemFieldValue(visitor, fieldHierarchy, mergedFieldNames, itemType, parentFieldName, rawValues[i], displayValues[i]);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
visitor.finishArray();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function traverseContentItemStructFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValues, displayValues) {
|
|
171
|
+
assert(valueType.valueFormat === PropertyValueFormat.Struct);
|
|
172
|
+
if (!visitor.startStruct({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues }))
|
|
173
|
+
return;
|
|
174
|
+
try {
|
|
175
|
+
if (fieldHierarchy.field.isNestedContentField())
|
|
176
|
+
parentFieldName = combineFieldNames(fieldHierarchy.field.name, parentFieldName);
|
|
177
|
+
valueType.members.forEach((memberDescription) => {
|
|
178
|
+
let memberField = fieldHierarchy.childFields.find((f) => f.field.name === memberDescription.name);
|
|
179
|
+
if (!memberField) {
|
|
180
|
+
// Not finding a member field means we're traversing an ECStruct. We still need to carry member information, so we
|
|
181
|
+
// create a fake field to represent the member
|
|
182
|
+
memberField = {
|
|
183
|
+
field: new Field(fieldHierarchy.field.category, memberDescription.name, memberDescription.label, memberDescription.type, fieldHierarchy.field.isReadonly, 0),
|
|
184
|
+
childFields: [],
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
traverseContentItemFieldValue(visitor, memberField, mergedFieldNames, memberDescription.type, parentFieldName, rawValues[memberDescription.name], displayValues[memberDescription.name]);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
visitor.finishStruct();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function traverseContentItemPrimitiveFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue) {
|
|
195
|
+
if (-1 !== mergedFieldNames.indexOf(fieldHierarchy.field.name)) {
|
|
196
|
+
visitor.processMergedValue({ mergedField: fieldHierarchy.field, requestedField: fieldHierarchy.field, parentFieldName });
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
visitor.processPrimitiveValue({ field: fieldHierarchy.field, valueType, parentFieldName, rawValue, displayValue });
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Parses a list of [[Field]] objects into a list of [[FieldHierarchy]].
|
|
203
|
+
*
|
|
204
|
+
* @param ignoreCategories Enables adding all of the `nestedFields` to parent field's `childFields`
|
|
205
|
+
* without considering categories.
|
|
206
|
+
*
|
|
207
|
+
* @public
|
|
208
|
+
*/
|
|
209
|
+
export function createFieldHierarchies(fields, ignoreCategories) {
|
|
210
|
+
const hierarchies = new Array();
|
|
211
|
+
const visitField = (category, field, parentField) => {
|
|
212
|
+
let childFields = [];
|
|
213
|
+
if (field.isNestedContentField()) {
|
|
214
|
+
// visit all nested fields
|
|
215
|
+
childFields = visitFields(field.nestedFields, field);
|
|
216
|
+
if (0 === childFields.length)
|
|
217
|
+
return undefined;
|
|
218
|
+
}
|
|
219
|
+
const fieldHierarchy = { field, childFields };
|
|
220
|
+
if (category === parentField?.category || ignoreCategories && parentField) {
|
|
221
|
+
// if categories of this field and its parent field match - return the field hierarchy without
|
|
222
|
+
// including it as a top level field
|
|
223
|
+
return fieldHierarchy;
|
|
224
|
+
}
|
|
225
|
+
addFieldHierarchy(hierarchies, fieldHierarchy);
|
|
226
|
+
return undefined;
|
|
227
|
+
};
|
|
228
|
+
const visitFields = (visitedFields, parentField) => {
|
|
229
|
+
const includedFields = [];
|
|
230
|
+
visitedFields.forEach((field) => {
|
|
231
|
+
const visitedField = visitField(field.category, field, parentField);
|
|
232
|
+
if (visitedField)
|
|
233
|
+
includedFields.push(visitedField);
|
|
234
|
+
});
|
|
235
|
+
return includedFields;
|
|
236
|
+
};
|
|
237
|
+
visitFields(fields, undefined);
|
|
238
|
+
return hierarchies;
|
|
239
|
+
}
|
|
240
|
+
function findRelatedFields(rootFields, hierarchy) {
|
|
241
|
+
// build a list of parent fields in hierarchy
|
|
242
|
+
const fields = [];
|
|
243
|
+
let currField = hierarchy.field;
|
|
244
|
+
while (currField) {
|
|
245
|
+
fields.push(currField);
|
|
246
|
+
currField = currField.parent;
|
|
247
|
+
}
|
|
248
|
+
for (let rootIndex = 0; rootIndex < rootFields.length; ++rootIndex) {
|
|
249
|
+
const rootFieldHierarchy = rootFields[rootIndex];
|
|
250
|
+
if (rootFieldHierarchy.field.category !== hierarchy.field.category) {
|
|
251
|
+
// only interested in fields with the same category
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
let first = true;
|
|
255
|
+
currField = rootFieldHierarchy.field;
|
|
256
|
+
while (currField) {
|
|
257
|
+
const index = fields.findIndex((f) => f.name === currField.name);
|
|
258
|
+
if (-1 !== index) {
|
|
259
|
+
return {
|
|
260
|
+
existing: {
|
|
261
|
+
field: currField,
|
|
262
|
+
hierarchy: first ? rootFieldHierarchy : undefined,
|
|
263
|
+
index: rootIndex,
|
|
264
|
+
},
|
|
265
|
+
matchingField: fields[index],
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
currField = currField.parent;
|
|
269
|
+
first = false;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return undefined;
|
|
273
|
+
}
|
|
274
|
+
function buildParentHierarchy(hierarchy, parentField) {
|
|
275
|
+
// note: parentField is found by walking up the parentship relationship
|
|
276
|
+
// from hierarchy.field, so we expect to always find it here
|
|
277
|
+
while (hierarchy.field !== parentField) {
|
|
278
|
+
const hierarchyParent = hierarchy.field.parent;
|
|
279
|
+
assert(hierarchyParent !== undefined);
|
|
280
|
+
hierarchy = { field: hierarchyParent, childFields: [hierarchy] };
|
|
281
|
+
}
|
|
282
|
+
return hierarchy;
|
|
283
|
+
}
|
|
284
|
+
function mergeHierarchies(lhs, rhs) {
|
|
285
|
+
assert(lhs.field.name === rhs.field.name);
|
|
286
|
+
const result = {
|
|
287
|
+
field: lhs.field.clone(),
|
|
288
|
+
childFields: [...lhs.childFields],
|
|
289
|
+
};
|
|
290
|
+
rhs.childFields.forEach((rhsChildHierarchy) => {
|
|
291
|
+
const indexInResult = result.childFields.findIndex((resultHierarchy) => resultHierarchy.field.name === rhsChildHierarchy.field.name);
|
|
292
|
+
if (indexInResult !== -1)
|
|
293
|
+
result.childFields[indexInResult] = mergeHierarchies(result.childFields[indexInResult], rhsChildHierarchy);
|
|
294
|
+
else
|
|
295
|
+
result.childFields.push(rhsChildHierarchy);
|
|
296
|
+
});
|
|
297
|
+
return result;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Adds a field hierarchy into root field hierarchies list. *
|
|
301
|
+
* @public
|
|
302
|
+
*/
|
|
303
|
+
export function addFieldHierarchy(rootHierarchies, hierarchy) {
|
|
304
|
+
const match = findRelatedFields(rootHierarchies, hierarchy);
|
|
305
|
+
if (!match) {
|
|
306
|
+
rootHierarchies.push(hierarchy);
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const targetHierarchy = rootHierarchies[match.existing.index];
|
|
310
|
+
const existingHierarchy = match.existing.hierarchy ?? buildParentHierarchy(targetHierarchy, match.existing.field);
|
|
311
|
+
const insertHierarchy = buildParentHierarchy(hierarchy, match.matchingField);
|
|
312
|
+
const mergedHierarchy = mergeHierarchies(existingHierarchy, insertHierarchy);
|
|
313
|
+
mergedHierarchy.field.category = hierarchy.field.category;
|
|
314
|
+
rootHierarchies[match.existing.index] = mergedHierarchy;
|
|
315
|
+
}
|
|
316
|
+
function createFieldPath(field) {
|
|
317
|
+
const path = [field];
|
|
318
|
+
let currField = field;
|
|
319
|
+
while (currField.parent) {
|
|
320
|
+
currField = currField.parent;
|
|
321
|
+
path.push(currField);
|
|
322
|
+
}
|
|
323
|
+
path.reverse();
|
|
324
|
+
return path;
|
|
325
|
+
}
|
|
326
|
+
/** @internal */
|
|
327
|
+
export const FIELD_NAMES_SEPARATOR = "$";
|
|
328
|
+
/**
|
|
329
|
+
* Combines given field names in a way that allows them to be parsed back into a list of individual names using the [[parseCombinedFieldNames]] function.
|
|
330
|
+
* @public
|
|
331
|
+
*/
|
|
332
|
+
export function combineFieldNames(fieldName, parentFieldName) {
|
|
333
|
+
return parentFieldName ? `${parentFieldName}${FIELD_NAMES_SEPARATOR}${fieldName}` : fieldName;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Parses given combined field names string, constructed using [[combineFieldNames]], into a list of individual field names.
|
|
337
|
+
* @public
|
|
338
|
+
*/
|
|
339
|
+
export function parseCombinedFieldNames(combinedName) {
|
|
340
|
+
return combinedName ? combinedName.split(FIELD_NAMES_SEPARATOR) : [];
|
|
341
|
+
}
|
|
342
|
+
function convertNestedContentItemToStructArrayItem(item, field, nextField) {
|
|
343
|
+
const value = item.values[field.name] ?? [];
|
|
344
|
+
assert(Value.isNestedContent(value));
|
|
345
|
+
if (value.length === 0)
|
|
346
|
+
return { emptyNestedItem: true, convertedItem: item };
|
|
347
|
+
const nextFieldValues = { raw: [], display: [] };
|
|
348
|
+
value.forEach((ncv) => {
|
|
349
|
+
const nextRawValue = ncv.values[nextField.name];
|
|
350
|
+
const nextDisplayValue = ncv.displayValues[nextField.name];
|
|
351
|
+
if (nextField.isNestedContentField()) {
|
|
352
|
+
if (nextRawValue) {
|
|
353
|
+
assert(Value.isNestedContent(nextRawValue));
|
|
354
|
+
nextFieldValues.raw.push(...nextRawValue);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
nextFieldValues.raw.push(nextRawValue);
|
|
359
|
+
nextFieldValues.display.push(nextDisplayValue);
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
const convertedItem = new Item(item.primaryKeys, item.label, item.imageId, item.classInfo, { [nextField.name]: nextFieldValues.raw }, { [nextField.name]: nextFieldValues.display }, item.mergedFieldNames, item.extendedData); // eslint-disable-line deprecation/deprecation
|
|
363
|
+
return { emptyNestedItem: false, convertedItem };
|
|
364
|
+
}
|
|
365
|
+
function convertNestedContentFieldHierarchyToStructArrayHierarchy(fieldHierarchy, parentFieldName) {
|
|
366
|
+
const fieldName = fieldHierarchy.field.name;
|
|
367
|
+
const convertedChildFieldHierarchies = fieldHierarchy.childFields.map((child) => {
|
|
368
|
+
if (child.field.isNestedContentField())
|
|
369
|
+
return convertNestedContentFieldHierarchyToStructArrayHierarchy(child, combineFieldNames(fieldName, parentFieldName));
|
|
370
|
+
return child;
|
|
371
|
+
});
|
|
372
|
+
const convertedFieldHierarchy = {
|
|
373
|
+
field: Object.assign(fieldHierarchy.field.clone(), {
|
|
374
|
+
type: {
|
|
375
|
+
valueFormat: PropertyValueFormat.Array,
|
|
376
|
+
typeName: `${fieldHierarchy.field.type.typeName}[]`,
|
|
377
|
+
memberType: {
|
|
378
|
+
valueFormat: PropertyValueFormat.Struct,
|
|
379
|
+
typeName: fieldHierarchy.field.type.typeName,
|
|
380
|
+
members: convertedChildFieldHierarchies.map((member) => ({
|
|
381
|
+
name: member.field.name,
|
|
382
|
+
label: member.field.label,
|
|
383
|
+
type: member.field.type,
|
|
384
|
+
})),
|
|
385
|
+
},
|
|
386
|
+
},
|
|
387
|
+
}),
|
|
388
|
+
childFields: convertedChildFieldHierarchies,
|
|
389
|
+
};
|
|
390
|
+
return convertedFieldHierarchy;
|
|
391
|
+
}
|
|
392
|
+
function convertNestedContentValuesToStructArrayValuesRecursive(fieldHierarchy, ncvs) {
|
|
393
|
+
const result = { raw: [], display: [], mergedFieldNames: [] };
|
|
394
|
+
ncvs.forEach((ncv) => {
|
|
395
|
+
const values = { ...ncv.values };
|
|
396
|
+
const displayValues = { ...ncv.displayValues };
|
|
397
|
+
const mergedFieldNames = [...ncv.mergedFieldNames];
|
|
398
|
+
fieldHierarchy.childFields.forEach((childFieldHierarchy) => {
|
|
399
|
+
const childFieldName = childFieldHierarchy.field.name;
|
|
400
|
+
if (-1 !== ncv.mergedFieldNames.indexOf(childFieldName)) {
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
if (childFieldHierarchy.field.isNestedContentField()) {
|
|
404
|
+
const value = values[childFieldName];
|
|
405
|
+
assert(Value.isNestedContent(value));
|
|
406
|
+
const convertedValues = convertNestedContentValuesToStructArrayValuesRecursive(childFieldHierarchy, value);
|
|
407
|
+
values[childFieldName] = convertedValues.raw;
|
|
408
|
+
displayValues[childFieldName] = convertedValues.display;
|
|
409
|
+
mergedFieldNames.push(...convertedValues.mergedFieldNames);
|
|
410
|
+
}
|
|
411
|
+
});
|
|
412
|
+
result.raw.push(values);
|
|
413
|
+
result.display.push(displayValues);
|
|
414
|
+
result.mergedFieldNames.push(...mergedFieldNames);
|
|
415
|
+
});
|
|
416
|
+
return result;
|
|
417
|
+
}
|
|
418
|
+
function convertNestedContentFieldHierarchyItemToStructArrayItem(item, fieldHierarchy) {
|
|
419
|
+
const fieldName = fieldHierarchy.field.name;
|
|
420
|
+
const rawValue = item.values[fieldName];
|
|
421
|
+
assert(Value.isNestedContent(rawValue));
|
|
422
|
+
if (rawValue.length === 0)
|
|
423
|
+
return { emptyNestedItem: true, convertedItem: item };
|
|
424
|
+
const converted = convertNestedContentValuesToStructArrayValuesRecursive(fieldHierarchy, rawValue);
|
|
425
|
+
const convertedItem = new Item(item.primaryKeys, item.label, item.imageId, item.classInfo, { [fieldName]: converted.raw }, { [fieldName]: converted.display }, converted.mergedFieldNames, item.extendedData); // eslint-disable-line deprecation/deprecation
|
|
426
|
+
return { emptyNestedItem: false, convertedItem };
|
|
427
|
+
}
|
|
428
428
|
//# sourceMappingURL=ContentTraverser.js.map
|