@itwin/presentation-common 4.5.0-dev.4 → 4.5.0-dev.41

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 (403) hide show
  1. package/CHANGELOG.md +63 -1
  2. package/LICENSE.md +1 -1
  3. package/README.md +1 -1
  4. package/Ruleset.schema.json +72 -19
  5. package/lib/cjs/assets/locales/en/Presentation.json +19 -19
  6. package/lib/cjs/presentation-common/AsyncTasks.d.ts.map +1 -1
  7. package/lib/cjs/presentation-common/AsyncTasks.js +6 -4
  8. package/lib/cjs/presentation-common/AsyncTasks.js.map +1 -1
  9. package/lib/cjs/presentation-common/CommonLoggerCategory.js +3 -3
  10. package/lib/cjs/presentation-common/CommonLoggerCategory.js.map +1 -1
  11. package/lib/cjs/presentation-common/Diagnostics.d.ts.map +1 -1
  12. package/lib/cjs/presentation-common/Diagnostics.js +27 -15
  13. package/lib/cjs/presentation-common/Diagnostics.js.map +1 -1
  14. package/lib/cjs/presentation-common/EC.d.ts +7 -4
  15. package/lib/cjs/presentation-common/EC.d.ts.map +1 -1
  16. package/lib/cjs/presentation-common/EC.js +22 -17
  17. package/lib/cjs/presentation-common/EC.js.map +1 -1
  18. package/lib/cjs/presentation-common/ElementProperties.js +3 -3
  19. package/lib/cjs/presentation-common/ElementProperties.js.map +1 -1
  20. package/lib/cjs/presentation-common/Error.d.ts.map +1 -1
  21. package/lib/cjs/presentation-common/Error.js +5 -4
  22. package/lib/cjs/presentation-common/Error.js.map +1 -1
  23. package/lib/cjs/presentation-common/InstanceFilterDefinition.d.ts.map +1 -1
  24. package/lib/cjs/presentation-common/InstanceFilterDefinition.js +3 -3
  25. package/lib/cjs/presentation-common/InstanceFilterDefinition.js.map +1 -1
  26. package/lib/cjs/presentation-common/KeySet.d.ts.map +1 -1
  27. package/lib/cjs/presentation-common/KeySet.js +90 -53
  28. package/lib/cjs/presentation-common/KeySet.js.map +1 -1
  29. package/lib/cjs/presentation-common/KoqPropertyValueFormatter.d.ts.map +1 -1
  30. package/lib/cjs/presentation-common/KoqPropertyValueFormatter.js.map +1 -1
  31. package/lib/cjs/presentation-common/LabelDefinition.d.ts.map +1 -1
  32. package/lib/cjs/presentation-common/LabelDefinition.js +5 -4
  33. package/lib/cjs/presentation-common/LabelDefinition.js.map +1 -1
  34. package/lib/cjs/presentation-common/LocalizationHelper.d.ts +1 -1
  35. package/lib/cjs/presentation-common/LocalizationHelper.d.ts.map +1 -1
  36. package/lib/cjs/presentation-common/LocalizationHelper.js +18 -1
  37. package/lib/cjs/presentation-common/LocalizationHelper.js.map +1 -1
  38. package/lib/cjs/presentation-common/PresentationIpcInterface.js +3 -3
  39. package/lib/cjs/presentation-common/PresentationIpcInterface.js.map +1 -1
  40. package/lib/cjs/presentation-common/PresentationManagerOptions.d.ts.map +1 -1
  41. package/lib/cjs/presentation-common/PresentationManagerOptions.js +3 -3
  42. package/lib/cjs/presentation-common/PresentationManagerOptions.js.map +1 -1
  43. package/lib/cjs/presentation-common/PresentationRpcInterface.d.ts.map +1 -1
  44. package/lib/cjs/presentation-common/PresentationRpcInterface.js +53 -21
  45. package/lib/cjs/presentation-common/PresentationRpcInterface.js.map +1 -1
  46. package/lib/cjs/presentation-common/RegisteredRuleset.d.ts.map +1 -1
  47. package/lib/cjs/presentation-common/RegisteredRuleset.js +21 -9
  48. package/lib/cjs/presentation-common/RegisteredRuleset.js.map +1 -1
  49. package/lib/cjs/presentation-common/RpcRequestsHandler.d.ts +1 -1
  50. package/lib/cjs/presentation-common/RpcRequestsHandler.d.ts.map +1 -1
  51. package/lib/cjs/presentation-common/RpcRequestsHandler.js +19 -15
  52. package/lib/cjs/presentation-common/RpcRequestsHandler.js.map +1 -1
  53. package/lib/cjs/presentation-common/RulesetVariables.d.ts.map +1 -1
  54. package/lib/cjs/presentation-common/RulesetVariables.js +7 -5
  55. package/lib/cjs/presentation-common/RulesetVariables.js.map +1 -1
  56. package/lib/cjs/presentation-common/RulesetsFactory.d.ts.map +1 -1
  57. package/lib/cjs/presentation-common/RulesetsFactory.js +42 -26
  58. package/lib/cjs/presentation-common/RulesetsFactory.js.map +1 -1
  59. package/lib/cjs/presentation-common/Update.d.ts.map +1 -1
  60. package/lib/cjs/presentation-common/Update.js +4 -3
  61. package/lib/cjs/presentation-common/Update.js.map +1 -1
  62. package/lib/cjs/presentation-common/Utils.js +3 -3
  63. package/lib/cjs/presentation-common/Utils.js.map +1 -1
  64. package/lib/cjs/presentation-common/content/Category.js +3 -3
  65. package/lib/cjs/presentation-common/content/Category.js.map +1 -1
  66. package/lib/cjs/presentation-common/content/Content.d.ts.map +1 -1
  67. package/lib/cjs/presentation-common/content/Content.js +10 -9
  68. package/lib/cjs/presentation-common/content/Content.js.map +1 -1
  69. package/lib/cjs/presentation-common/content/ContentTraverser.d.ts.map +1 -1
  70. package/lib/cjs/presentation-common/content/ContentTraverser.js +47 -25
  71. package/lib/cjs/presentation-common/content/ContentTraverser.js.map +1 -1
  72. package/lib/cjs/presentation-common/content/Descriptor.d.ts.map +1 -1
  73. package/lib/cjs/presentation-common/content/Descriptor.js +56 -21
  74. package/lib/cjs/presentation-common/content/Descriptor.js.map +1 -1
  75. package/lib/cjs/presentation-common/content/DisplayTypes.js +3 -3
  76. package/lib/cjs/presentation-common/content/DisplayTypes.js.map +1 -1
  77. package/lib/cjs/presentation-common/content/Editor.js +3 -3
  78. package/lib/cjs/presentation-common/content/Editor.js.map +1 -1
  79. package/lib/cjs/presentation-common/content/Fields.d.ts +78 -2
  80. package/lib/cjs/presentation-common/content/Fields.d.ts.map +1 -1
  81. package/lib/cjs/presentation-common/content/Fields.js +201 -45
  82. package/lib/cjs/presentation-common/content/Fields.js.map +1 -1
  83. package/lib/cjs/presentation-common/content/Item.d.ts.map +1 -1
  84. package/lib/cjs/presentation-common/content/Item.js +8 -6
  85. package/lib/cjs/presentation-common/content/Item.js.map +1 -1
  86. package/lib/cjs/presentation-common/content/Property.d.ts +1 -1
  87. package/lib/cjs/presentation-common/content/Property.d.ts.map +1 -1
  88. package/lib/cjs/presentation-common/content/Property.js +4 -4
  89. package/lib/cjs/presentation-common/content/Property.js.map +1 -1
  90. package/lib/cjs/presentation-common/content/PropertyValueFormatter.d.ts +6 -1
  91. package/lib/cjs/presentation-common/content/PropertyValueFormatter.d.ts.map +1 -1
  92. package/lib/cjs/presentation-common/content/PropertyValueFormatter.js +39 -11
  93. package/lib/cjs/presentation-common/content/PropertyValueFormatter.js.map +1 -1
  94. package/lib/cjs/presentation-common/content/Renderer.js +3 -3
  95. package/lib/cjs/presentation-common/content/Renderer.js.map +1 -1
  96. package/lib/cjs/presentation-common/content/TypeDescription.js +3 -3
  97. package/lib/cjs/presentation-common/content/TypeDescription.js.map +1 -1
  98. package/lib/cjs/presentation-common/content/Value.d.ts.map +1 -1
  99. package/lib/cjs/presentation-common/content/Value.js +46 -30
  100. package/lib/cjs/presentation-common/content/Value.js.map +1 -1
  101. package/lib/cjs/presentation-common/hierarchy/HierarchyLevel.js +3 -3
  102. package/lib/cjs/presentation-common/hierarchy/HierarchyLevel.js.map +1 -1
  103. package/lib/cjs/presentation-common/hierarchy/Key.d.ts.map +1 -1
  104. package/lib/cjs/presentation-common/hierarchy/Key.js +14 -8
  105. package/lib/cjs/presentation-common/hierarchy/Key.js.map +1 -1
  106. package/lib/cjs/presentation-common/hierarchy/Node.d.ts.map +1 -1
  107. package/lib/cjs/presentation-common/hierarchy/Node.js +7 -5
  108. package/lib/cjs/presentation-common/hierarchy/Node.js.map +1 -1
  109. package/lib/cjs/presentation-common/hierarchy/NodePathElement.d.ts.map +1 -1
  110. package/lib/cjs/presentation-common/hierarchy/NodePathElement.js +11 -7
  111. package/lib/cjs/presentation-common/hierarchy/NodePathElement.js.map +1 -1
  112. package/lib/cjs/presentation-common/rules/ClassSpecifications.js +3 -3
  113. package/lib/cjs/presentation-common/rules/ClassSpecifications.js.map +1 -1
  114. package/lib/cjs/presentation-common/rules/RelatedInstanceSpecification.d.ts +39 -11
  115. package/lib/cjs/presentation-common/rules/RelatedInstanceSpecification.d.ts.map +1 -1
  116. package/lib/cjs/presentation-common/rules/RelatedInstanceSpecification.js +3 -3
  117. package/lib/cjs/presentation-common/rules/RelatedInstanceSpecification.js.map +1 -1
  118. package/lib/cjs/presentation-common/rules/RelationshipDirection.js +3 -3
  119. package/lib/cjs/presentation-common/rules/RelationshipDirection.js.map +1 -1
  120. package/lib/cjs/presentation-common/rules/RelationshipPathSpecification.js +3 -3
  121. package/lib/cjs/presentation-common/rules/RelationshipPathSpecification.js.map +1 -1
  122. package/lib/cjs/presentation-common/rules/Rule.js +3 -3
  123. package/lib/cjs/presentation-common/rules/Rule.js.map +1 -1
  124. package/lib/cjs/presentation-common/rules/Ruleset.js +3 -3
  125. package/lib/cjs/presentation-common/rules/Ruleset.js.map +1 -1
  126. package/lib/cjs/presentation-common/rules/SchemasSpecification.js +3 -3
  127. package/lib/cjs/presentation-common/rules/SchemasSpecification.js.map +1 -1
  128. package/lib/cjs/presentation-common/rules/Variables.js +3 -3
  129. package/lib/cjs/presentation-common/rules/Variables.js.map +1 -1
  130. package/lib/cjs/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js +3 -3
  131. package/lib/cjs/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js.map +1 -1
  132. package/lib/cjs/presentation-common/rules/content/ContentRelatedInstancesSpecification.js +3 -3
  133. package/lib/cjs/presentation-common/rules/content/ContentRelatedInstancesSpecification.js.map +1 -1
  134. package/lib/cjs/presentation-common/rules/content/ContentRule.js +3 -3
  135. package/lib/cjs/presentation-common/rules/content/ContentRule.js.map +1 -1
  136. package/lib/cjs/presentation-common/rules/content/ContentSpecification.d.ts.map +1 -1
  137. package/lib/cjs/presentation-common/rules/content/ContentSpecification.js +3 -3
  138. package/lib/cjs/presentation-common/rules/content/ContentSpecification.js.map +1 -1
  139. package/lib/cjs/presentation-common/rules/content/DefaultPropertyCategoryOverride.js +3 -3
  140. package/lib/cjs/presentation-common/rules/content/DefaultPropertyCategoryOverride.js.map +1 -1
  141. package/lib/cjs/presentation-common/rules/content/PropertySpecification.js +3 -3
  142. package/lib/cjs/presentation-common/rules/content/PropertySpecification.js.map +1 -1
  143. package/lib/cjs/presentation-common/rules/content/SelectedNodeInstancesSpecification.js +3 -3
  144. package/lib/cjs/presentation-common/rules/content/SelectedNodeInstancesSpecification.js.map +1 -1
  145. package/lib/cjs/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js +3 -3
  146. package/lib/cjs/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js.map +1 -1
  147. package/lib/cjs/presentation-common/rules/content/modifiers/ContentModifier.js +3 -3
  148. package/lib/cjs/presentation-common/rules/content/modifiers/ContentModifier.js.map +1 -1
  149. package/lib/cjs/presentation-common/rules/content/modifiers/CustomRendererSpecification.js +3 -3
  150. package/lib/cjs/presentation-common/rules/content/modifiers/CustomRendererSpecification.js.map +1 -1
  151. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js +3 -3
  152. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js.map +1 -1
  153. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.d.ts.map +1 -1
  154. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js +3 -3
  155. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js.map +1 -1
  156. package/lib/cjs/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js +3 -3
  157. package/lib/cjs/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js.map +1 -1
  158. package/lib/cjs/presentation-common/rules/customization/CheckBoxRule.js +3 -3
  159. package/lib/cjs/presentation-common/rules/customization/CheckBoxRule.js.map +1 -1
  160. package/lib/cjs/presentation-common/rules/customization/CustomizationRule.d.ts +1 -5
  161. package/lib/cjs/presentation-common/rules/customization/CustomizationRule.d.ts.map +1 -1
  162. package/lib/cjs/presentation-common/rules/customization/CustomizationRule.js +3 -3
  163. package/lib/cjs/presentation-common/rules/customization/CustomizationRule.js.map +1 -1
  164. package/lib/cjs/presentation-common/rules/customization/ExtendedDataRule.js +3 -3
  165. package/lib/cjs/presentation-common/rules/customization/ExtendedDataRule.js.map +1 -1
  166. package/lib/cjs/presentation-common/rules/customization/GroupingRule.js +3 -3
  167. package/lib/cjs/presentation-common/rules/customization/GroupingRule.js.map +1 -1
  168. package/lib/cjs/presentation-common/rules/customization/ImageIdOverride.js +3 -3
  169. package/lib/cjs/presentation-common/rules/customization/ImageIdOverride.js.map +1 -1
  170. package/lib/cjs/presentation-common/rules/customization/InstanceLabelOverride.d.ts.map +1 -1
  171. package/lib/cjs/presentation-common/rules/customization/InstanceLabelOverride.js +3 -3
  172. package/lib/cjs/presentation-common/rules/customization/InstanceLabelOverride.js.map +1 -1
  173. package/lib/cjs/presentation-common/rules/customization/LabelOverride.js +3 -3
  174. package/lib/cjs/presentation-common/rules/customization/LabelOverride.js.map +1 -1
  175. package/lib/cjs/presentation-common/rules/customization/SortingRule.js +3 -3
  176. package/lib/cjs/presentation-common/rules/customization/SortingRule.js.map +1 -1
  177. package/lib/cjs/presentation-common/rules/customization/StyleOverride.js +3 -3
  178. package/lib/cjs/presentation-common/rules/customization/StyleOverride.js.map +1 -1
  179. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeRule.js +3 -3
  180. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeRule.js.map +1 -1
  181. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeSpecification.d.ts.map +1 -1
  182. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeSpecification.js +3 -3
  183. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeSpecification.js.map +1 -1
  184. package/lib/cjs/presentation-common/rules/hierarchy/CustomNodeSpecification.js +3 -3
  185. package/lib/cjs/presentation-common/rules/hierarchy/CustomNodeSpecification.js.map +1 -1
  186. package/lib/cjs/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js +3 -3
  187. package/lib/cjs/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js.map +1 -1
  188. package/lib/cjs/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js +3 -3
  189. package/lib/cjs/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js.map +1 -1
  190. package/lib/cjs/presentation-common/rules/hierarchy/NavigationRule.js +3 -3
  191. package/lib/cjs/presentation-common/rules/hierarchy/NavigationRule.js.map +1 -1
  192. package/lib/cjs/presentation-common/rules/hierarchy/NodeArtifactsRule.js +3 -3
  193. package/lib/cjs/presentation-common/rules/hierarchy/NodeArtifactsRule.js.map +1 -1
  194. package/lib/cjs/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js +3 -3
  195. package/lib/cjs/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js.map +1 -1
  196. package/lib/cjs/presentation-common/rules/hierarchy/RootNodeRule.js +3 -3
  197. package/lib/cjs/presentation-common/rules/hierarchy/RootNodeRule.js.map +1 -1
  198. package/lib/cjs/presentation-common/rules/hierarchy/SubCondition.js +3 -3
  199. package/lib/cjs/presentation-common/rules/hierarchy/SubCondition.js.map +1 -1
  200. package/lib/cjs/presentation-common/selection/SelectionScope.js +3 -3
  201. package/lib/cjs/presentation-common/selection/SelectionScope.js.map +1 -1
  202. package/lib/cjs/presentation-common.js +3 -3
  203. package/lib/cjs/presentation-common.js.map +1 -1
  204. package/lib/esm/presentation-common/AsyncTasks.d.ts.map +1 -1
  205. package/lib/esm/presentation-common/AsyncTasks.js +6 -4
  206. package/lib/esm/presentation-common/AsyncTasks.js.map +1 -1
  207. package/lib/esm/presentation-common/CommonLoggerCategory.js +3 -3
  208. package/lib/esm/presentation-common/CommonLoggerCategory.js.map +1 -1
  209. package/lib/esm/presentation-common/Diagnostics.d.ts.map +1 -1
  210. package/lib/esm/presentation-common/Diagnostics.js +27 -15
  211. package/lib/esm/presentation-common/Diagnostics.js.map +1 -1
  212. package/lib/esm/presentation-common/EC.d.ts +7 -4
  213. package/lib/esm/presentation-common/EC.d.ts.map +1 -1
  214. package/lib/esm/presentation-common/EC.js +22 -17
  215. package/lib/esm/presentation-common/EC.js.map +1 -1
  216. package/lib/esm/presentation-common/ElementProperties.js +3 -3
  217. package/lib/esm/presentation-common/ElementProperties.js.map +1 -1
  218. package/lib/esm/presentation-common/Error.d.ts.map +1 -1
  219. package/lib/esm/presentation-common/Error.js +5 -4
  220. package/lib/esm/presentation-common/Error.js.map +1 -1
  221. package/lib/esm/presentation-common/InstanceFilterDefinition.d.ts.map +1 -1
  222. package/lib/esm/presentation-common/InstanceFilterDefinition.js +3 -3
  223. package/lib/esm/presentation-common/InstanceFilterDefinition.js.map +1 -1
  224. package/lib/esm/presentation-common/KeySet.d.ts.map +1 -1
  225. package/lib/esm/presentation-common/KeySet.js +90 -53
  226. package/lib/esm/presentation-common/KeySet.js.map +1 -1
  227. package/lib/esm/presentation-common/KoqPropertyValueFormatter.d.ts.map +1 -1
  228. package/lib/esm/presentation-common/KoqPropertyValueFormatter.js.map +1 -1
  229. package/lib/esm/presentation-common/LabelDefinition.d.ts.map +1 -1
  230. package/lib/esm/presentation-common/LabelDefinition.js +5 -4
  231. package/lib/esm/presentation-common/LabelDefinition.js.map +1 -1
  232. package/lib/esm/presentation-common/LocalizationHelper.d.ts +1 -1
  233. package/lib/esm/presentation-common/LocalizationHelper.d.ts.map +1 -1
  234. package/lib/esm/presentation-common/LocalizationHelper.js +19 -2
  235. package/lib/esm/presentation-common/LocalizationHelper.js.map +1 -1
  236. package/lib/esm/presentation-common/PresentationIpcInterface.js +3 -3
  237. package/lib/esm/presentation-common/PresentationIpcInterface.js.map +1 -1
  238. package/lib/esm/presentation-common/PresentationManagerOptions.d.ts.map +1 -1
  239. package/lib/esm/presentation-common/PresentationManagerOptions.js +3 -3
  240. package/lib/esm/presentation-common/PresentationManagerOptions.js.map +1 -1
  241. package/lib/esm/presentation-common/PresentationRpcInterface.d.ts.map +1 -1
  242. package/lib/esm/presentation-common/PresentationRpcInterface.js +53 -21
  243. package/lib/esm/presentation-common/PresentationRpcInterface.js.map +1 -1
  244. package/lib/esm/presentation-common/RegisteredRuleset.d.ts.map +1 -1
  245. package/lib/esm/presentation-common/RegisteredRuleset.js +21 -9
  246. package/lib/esm/presentation-common/RegisteredRuleset.js.map +1 -1
  247. package/lib/esm/presentation-common/RpcRequestsHandler.d.ts +1 -1
  248. package/lib/esm/presentation-common/RpcRequestsHandler.d.ts.map +1 -1
  249. package/lib/esm/presentation-common/RpcRequestsHandler.js +20 -16
  250. package/lib/esm/presentation-common/RpcRequestsHandler.js.map +1 -1
  251. package/lib/esm/presentation-common/RulesetVariables.d.ts.map +1 -1
  252. package/lib/esm/presentation-common/RulesetVariables.js +7 -5
  253. package/lib/esm/presentation-common/RulesetVariables.js.map +1 -1
  254. package/lib/esm/presentation-common/RulesetsFactory.d.ts.map +1 -1
  255. package/lib/esm/presentation-common/RulesetsFactory.js +42 -26
  256. package/lib/esm/presentation-common/RulesetsFactory.js.map +1 -1
  257. package/lib/esm/presentation-common/Update.d.ts.map +1 -1
  258. package/lib/esm/presentation-common/Update.js +4 -3
  259. package/lib/esm/presentation-common/Update.js.map +1 -1
  260. package/lib/esm/presentation-common/Utils.js +3 -3
  261. package/lib/esm/presentation-common/Utils.js.map +1 -1
  262. package/lib/esm/presentation-common/content/Category.js +3 -3
  263. package/lib/esm/presentation-common/content/Category.js.map +1 -1
  264. package/lib/esm/presentation-common/content/Content.d.ts.map +1 -1
  265. package/lib/esm/presentation-common/content/Content.js +10 -9
  266. package/lib/esm/presentation-common/content/Content.js.map +1 -1
  267. package/lib/esm/presentation-common/content/ContentTraverser.d.ts.map +1 -1
  268. package/lib/esm/presentation-common/content/ContentTraverser.js +47 -25
  269. package/lib/esm/presentation-common/content/ContentTraverser.js.map +1 -1
  270. package/lib/esm/presentation-common/content/Descriptor.d.ts.map +1 -1
  271. package/lib/esm/presentation-common/content/Descriptor.js +56 -21
  272. package/lib/esm/presentation-common/content/Descriptor.js.map +1 -1
  273. package/lib/esm/presentation-common/content/DisplayTypes.js +3 -3
  274. package/lib/esm/presentation-common/content/DisplayTypes.js.map +1 -1
  275. package/lib/esm/presentation-common/content/Editor.js +3 -3
  276. package/lib/esm/presentation-common/content/Editor.js.map +1 -1
  277. package/lib/esm/presentation-common/content/Fields.d.ts +78 -2
  278. package/lib/esm/presentation-common/content/Fields.d.ts.map +1 -1
  279. package/lib/esm/presentation-common/content/Fields.js +198 -44
  280. package/lib/esm/presentation-common/content/Fields.js.map +1 -1
  281. package/lib/esm/presentation-common/content/Item.d.ts.map +1 -1
  282. package/lib/esm/presentation-common/content/Item.js +8 -6
  283. package/lib/esm/presentation-common/content/Item.js.map +1 -1
  284. package/lib/esm/presentation-common/content/Property.d.ts +1 -1
  285. package/lib/esm/presentation-common/content/Property.d.ts.map +1 -1
  286. package/lib/esm/presentation-common/content/Property.js +4 -4
  287. package/lib/esm/presentation-common/content/Property.js.map +1 -1
  288. package/lib/esm/presentation-common/content/PropertyValueFormatter.d.ts +6 -1
  289. package/lib/esm/presentation-common/content/PropertyValueFormatter.d.ts.map +1 -1
  290. package/lib/esm/presentation-common/content/PropertyValueFormatter.js +39 -11
  291. package/lib/esm/presentation-common/content/PropertyValueFormatter.js.map +1 -1
  292. package/lib/esm/presentation-common/content/Renderer.js +3 -3
  293. package/lib/esm/presentation-common/content/Renderer.js.map +1 -1
  294. package/lib/esm/presentation-common/content/TypeDescription.js +3 -3
  295. package/lib/esm/presentation-common/content/TypeDescription.js.map +1 -1
  296. package/lib/esm/presentation-common/content/Value.d.ts.map +1 -1
  297. package/lib/esm/presentation-common/content/Value.js +46 -30
  298. package/lib/esm/presentation-common/content/Value.js.map +1 -1
  299. package/lib/esm/presentation-common/hierarchy/HierarchyLevel.js +3 -3
  300. package/lib/esm/presentation-common/hierarchy/HierarchyLevel.js.map +1 -1
  301. package/lib/esm/presentation-common/hierarchy/Key.d.ts.map +1 -1
  302. package/lib/esm/presentation-common/hierarchy/Key.js +14 -8
  303. package/lib/esm/presentation-common/hierarchy/Key.js.map +1 -1
  304. package/lib/esm/presentation-common/hierarchy/Node.d.ts.map +1 -1
  305. package/lib/esm/presentation-common/hierarchy/Node.js +7 -5
  306. package/lib/esm/presentation-common/hierarchy/Node.js.map +1 -1
  307. package/lib/esm/presentation-common/hierarchy/NodePathElement.d.ts.map +1 -1
  308. package/lib/esm/presentation-common/hierarchy/NodePathElement.js +11 -7
  309. package/lib/esm/presentation-common/hierarchy/NodePathElement.js.map +1 -1
  310. package/lib/esm/presentation-common/rules/ClassSpecifications.js +3 -3
  311. package/lib/esm/presentation-common/rules/ClassSpecifications.js.map +1 -1
  312. package/lib/esm/presentation-common/rules/RelatedInstanceSpecification.d.ts +39 -11
  313. package/lib/esm/presentation-common/rules/RelatedInstanceSpecification.d.ts.map +1 -1
  314. package/lib/esm/presentation-common/rules/RelatedInstanceSpecification.js +3 -3
  315. package/lib/esm/presentation-common/rules/RelatedInstanceSpecification.js.map +1 -1
  316. package/lib/esm/presentation-common/rules/RelationshipDirection.js +3 -3
  317. package/lib/esm/presentation-common/rules/RelationshipDirection.js.map +1 -1
  318. package/lib/esm/presentation-common/rules/RelationshipPathSpecification.js +3 -3
  319. package/lib/esm/presentation-common/rules/RelationshipPathSpecification.js.map +1 -1
  320. package/lib/esm/presentation-common/rules/Rule.js +3 -3
  321. package/lib/esm/presentation-common/rules/Rule.js.map +1 -1
  322. package/lib/esm/presentation-common/rules/Ruleset.js +3 -3
  323. package/lib/esm/presentation-common/rules/Ruleset.js.map +1 -1
  324. package/lib/esm/presentation-common/rules/SchemasSpecification.js +3 -3
  325. package/lib/esm/presentation-common/rules/SchemasSpecification.js.map +1 -1
  326. package/lib/esm/presentation-common/rules/Variables.js +3 -3
  327. package/lib/esm/presentation-common/rules/Variables.js.map +1 -1
  328. package/lib/esm/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js +3 -3
  329. package/lib/esm/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js.map +1 -1
  330. package/lib/esm/presentation-common/rules/content/ContentRelatedInstancesSpecification.js +3 -3
  331. package/lib/esm/presentation-common/rules/content/ContentRelatedInstancesSpecification.js.map +1 -1
  332. package/lib/esm/presentation-common/rules/content/ContentRule.js +3 -3
  333. package/lib/esm/presentation-common/rules/content/ContentRule.js.map +1 -1
  334. package/lib/esm/presentation-common/rules/content/ContentSpecification.d.ts.map +1 -1
  335. package/lib/esm/presentation-common/rules/content/ContentSpecification.js +3 -3
  336. package/lib/esm/presentation-common/rules/content/ContentSpecification.js.map +1 -1
  337. package/lib/esm/presentation-common/rules/content/DefaultPropertyCategoryOverride.js +3 -3
  338. package/lib/esm/presentation-common/rules/content/DefaultPropertyCategoryOverride.js.map +1 -1
  339. package/lib/esm/presentation-common/rules/content/PropertySpecification.js +3 -3
  340. package/lib/esm/presentation-common/rules/content/PropertySpecification.js.map +1 -1
  341. package/lib/esm/presentation-common/rules/content/SelectedNodeInstancesSpecification.js +3 -3
  342. package/lib/esm/presentation-common/rules/content/SelectedNodeInstancesSpecification.js.map +1 -1
  343. package/lib/esm/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js +3 -3
  344. package/lib/esm/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js.map +1 -1
  345. package/lib/esm/presentation-common/rules/content/modifiers/ContentModifier.js +3 -3
  346. package/lib/esm/presentation-common/rules/content/modifiers/ContentModifier.js.map +1 -1
  347. package/lib/esm/presentation-common/rules/content/modifiers/CustomRendererSpecification.js +3 -3
  348. package/lib/esm/presentation-common/rules/content/modifiers/CustomRendererSpecification.js.map +1 -1
  349. package/lib/esm/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js +3 -3
  350. package/lib/esm/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js.map +1 -1
  351. package/lib/esm/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.d.ts.map +1 -1
  352. package/lib/esm/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js +3 -3
  353. package/lib/esm/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js.map +1 -1
  354. package/lib/esm/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js +3 -3
  355. package/lib/esm/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js.map +1 -1
  356. package/lib/esm/presentation-common/rules/customization/CheckBoxRule.js +3 -3
  357. package/lib/esm/presentation-common/rules/customization/CheckBoxRule.js.map +1 -1
  358. package/lib/esm/presentation-common/rules/customization/CustomizationRule.d.ts +1 -5
  359. package/lib/esm/presentation-common/rules/customization/CustomizationRule.d.ts.map +1 -1
  360. package/lib/esm/presentation-common/rules/customization/CustomizationRule.js +3 -3
  361. package/lib/esm/presentation-common/rules/customization/CustomizationRule.js.map +1 -1
  362. package/lib/esm/presentation-common/rules/customization/ExtendedDataRule.js +3 -3
  363. package/lib/esm/presentation-common/rules/customization/ExtendedDataRule.js.map +1 -1
  364. package/lib/esm/presentation-common/rules/customization/GroupingRule.js +3 -3
  365. package/lib/esm/presentation-common/rules/customization/GroupingRule.js.map +1 -1
  366. package/lib/esm/presentation-common/rules/customization/ImageIdOverride.js +3 -3
  367. package/lib/esm/presentation-common/rules/customization/ImageIdOverride.js.map +1 -1
  368. package/lib/esm/presentation-common/rules/customization/InstanceLabelOverride.d.ts.map +1 -1
  369. package/lib/esm/presentation-common/rules/customization/InstanceLabelOverride.js +3 -3
  370. package/lib/esm/presentation-common/rules/customization/InstanceLabelOverride.js.map +1 -1
  371. package/lib/esm/presentation-common/rules/customization/LabelOverride.js +3 -3
  372. package/lib/esm/presentation-common/rules/customization/LabelOverride.js.map +1 -1
  373. package/lib/esm/presentation-common/rules/customization/SortingRule.js +3 -3
  374. package/lib/esm/presentation-common/rules/customization/SortingRule.js.map +1 -1
  375. package/lib/esm/presentation-common/rules/customization/StyleOverride.js +3 -3
  376. package/lib/esm/presentation-common/rules/customization/StyleOverride.js.map +1 -1
  377. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeRule.js +3 -3
  378. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeRule.js.map +1 -1
  379. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeSpecification.d.ts.map +1 -1
  380. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeSpecification.js +3 -3
  381. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeSpecification.js.map +1 -1
  382. package/lib/esm/presentation-common/rules/hierarchy/CustomNodeSpecification.js +3 -3
  383. package/lib/esm/presentation-common/rules/hierarchy/CustomNodeSpecification.js.map +1 -1
  384. package/lib/esm/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js +3 -3
  385. package/lib/esm/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js.map +1 -1
  386. package/lib/esm/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js +3 -3
  387. package/lib/esm/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js.map +1 -1
  388. package/lib/esm/presentation-common/rules/hierarchy/NavigationRule.js +3 -3
  389. package/lib/esm/presentation-common/rules/hierarchy/NavigationRule.js.map +1 -1
  390. package/lib/esm/presentation-common/rules/hierarchy/NodeArtifactsRule.js +3 -3
  391. package/lib/esm/presentation-common/rules/hierarchy/NodeArtifactsRule.js.map +1 -1
  392. package/lib/esm/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js +3 -3
  393. package/lib/esm/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js.map +1 -1
  394. package/lib/esm/presentation-common/rules/hierarchy/RootNodeRule.js +3 -3
  395. package/lib/esm/presentation-common/rules/hierarchy/RootNodeRule.js.map +1 -1
  396. package/lib/esm/presentation-common/rules/hierarchy/SubCondition.js +3 -3
  397. package/lib/esm/presentation-common/rules/hierarchy/SubCondition.js.map +1 -1
  398. package/lib/esm/presentation-common/selection/SelectionScope.js +3 -3
  399. package/lib/esm/presentation-common/selection/SelectionScope.js.map +1 -1
  400. package/lib/esm/presentation-common.js +3 -3
  401. package/lib/esm/presentation-common.js.map +1 -1
  402. package/lib/public/locales/en/Presentation.json +19 -19
  403. package/package.json +14 -11
@@ -1,7 +1,7 @@
1
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
- *--------------------------------------------------------------------------------------------*/
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
5
  /** @packageDocumentation
6
6
  * @module Content
7
7
  */
@@ -16,8 +16,9 @@ import { DisplayValue, Value } from "./Value";
16
16
  * @public
17
17
  */
18
18
  export function traverseFieldHierarchy(hierarchy, cb) {
19
- if (cb(hierarchy))
19
+ if (cb(hierarchy)) {
20
20
  hierarchy.childFields.forEach((childHierarchy) => traverseFieldHierarchy(childHierarchy, cb));
21
+ }
21
22
  }
22
23
  /**
23
24
  * An utility to traverse content using provided visitor. Provides means to parse content into different formats,
@@ -25,8 +26,9 @@ export function traverseFieldHierarchy(hierarchy, cb) {
25
26
  * @public
26
27
  */
27
28
  export function traverseContent(visitor, content) {
28
- if (!visitor.startContent({ descriptor: content.descriptor }))
29
+ if (!visitor.startContent({ descriptor: content.descriptor })) {
29
30
  return;
31
+ }
30
32
  try {
31
33
  const fieldHierarchies = createFieldHierarchies(content.descriptor.fields);
32
34
  visitor.processFieldHierarchies({ hierarchies: fieldHierarchies });
@@ -68,19 +70,24 @@ class VisitedCategories {
68
70
  }
69
71
  }
70
72
  dispose() {
71
- while (this._visitedCategories.pop())
73
+ while (this._visitedCategories.pop()) {
72
74
  this._visitor.finishCategory();
75
+ }
76
+ }
77
+ get shouldContinue() {
78
+ return this._didVisitAllHierarchy;
73
79
  }
74
- get shouldContinue() { return this._didVisitAllHierarchy; }
75
80
  }
76
81
  function traverseContentItemFields(visitor, fieldHierarchies, item) {
77
- if (!visitor.startItem({ item }))
82
+ if (!visitor.startItem({ item })) {
78
83
  return;
84
+ }
79
85
  try {
80
86
  fieldHierarchies.forEach((fieldHierarchy) => {
81
87
  using(new VisitedCategories(visitor, fieldHierarchy.field.category), (res) => {
82
- if (res.shouldContinue)
88
+ if (res.shouldContinue) {
83
89
  traverseContentItemField(visitor, fieldHierarchy, item);
90
+ }
84
91
  });
85
92
  });
86
93
  }
@@ -89,8 +96,9 @@ function traverseContentItemFields(visitor, fieldHierarchies, item) {
89
96
  }
90
97
  }
91
98
  function traverseContentItemField(visitor, fieldHierarchy, item) {
92
- if (!visitor.startField({ hierarchy: fieldHierarchy }))
99
+ if (!visitor.startField({ hierarchy: fieldHierarchy })) {
93
100
  return;
101
+ }
94
102
  try {
95
103
  const rootToThisField = createFieldPath(fieldHierarchy.field);
96
104
  let parentFieldName;
@@ -103,8 +111,9 @@ function traverseContentItemField(visitor, fieldHierarchy, item) {
103
111
  return;
104
112
  }
105
113
  const { emptyNestedItem, convertedItem } = convertNestedContentItemToStructArrayItem(item, parentField, nextField);
106
- if (emptyNestedItem)
114
+ if (emptyNestedItem) {
107
115
  return;
116
+ }
108
117
  item = convertedItem;
109
118
  parentFieldName = combineFieldNames(parentField.name, parentFieldName);
110
119
  }
@@ -115,8 +124,9 @@ function traverseContentItemField(visitor, fieldHierarchy, item) {
115
124
  if (fieldHierarchy.field.isNestedContentField()) {
116
125
  fieldHierarchy = convertNestedContentFieldHierarchyToStructArrayHierarchy(fieldHierarchy, parentFieldName);
117
126
  const { emptyNestedItem, convertedItem } = convertNestedContentFieldHierarchyItemToStructArrayItem(item, fieldHierarchy);
118
- if (emptyNestedItem)
127
+ if (emptyNestedItem) {
119
128
  return;
129
+ }
120
130
  item = convertedItem;
121
131
  }
122
132
  else if (pathUpToField.length > 0) {
@@ -155,8 +165,9 @@ function traverseContentItemFieldValue(visitor, fieldHierarchy, mergedFieldNames
155
165
  function traverseContentItemArrayFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValues, displayValues) {
156
166
  assert(rawValues.length === displayValues.length);
157
167
  assert(valueType.valueFormat === PropertyValueFormat.Array);
158
- if (!visitor.startArray({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues }))
168
+ if (!visitor.startArray({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues })) {
159
169
  return;
170
+ }
160
171
  try {
161
172
  const itemType = valueType.memberType;
162
173
  rawValues.forEach((_, i) => {
@@ -169,11 +180,13 @@ function traverseContentItemArrayFieldValue(visitor, fieldHierarchy, mergedField
169
180
  }
170
181
  function traverseContentItemStructFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValues, displayValues) {
171
182
  assert(valueType.valueFormat === PropertyValueFormat.Struct);
172
- if (!visitor.startStruct({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues }))
183
+ if (!visitor.startStruct({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues })) {
173
184
  return;
185
+ }
174
186
  try {
175
- if (fieldHierarchy.field.isNestedContentField())
187
+ if (fieldHierarchy.field.isNestedContentField()) {
176
188
  parentFieldName = combineFieldNames(fieldHierarchy.field.name, parentFieldName);
189
+ }
177
190
  valueType.members.forEach((memberDescription) => {
178
191
  let memberField = fieldHierarchy.childFields.find((f) => f.field.name === memberDescription.name);
179
192
  if (!memberField) {
@@ -213,11 +226,12 @@ export function createFieldHierarchies(fields, ignoreCategories) {
213
226
  if (field.isNestedContentField()) {
214
227
  // visit all nested fields
215
228
  childFields = visitFields(field.nestedFields, field);
216
- if (0 === childFields.length)
229
+ if (0 === childFields.length) {
217
230
  return undefined;
231
+ }
218
232
  }
219
233
  const fieldHierarchy = { field, childFields };
220
- if (category === parentField?.category || ignoreCategories && parentField) {
234
+ if (category === parentField?.category || (ignoreCategories && parentField)) {
221
235
  // if categories of this field and its parent field match - return the field hierarchy without
222
236
  // including it as a top level field
223
237
  return fieldHierarchy;
@@ -229,8 +243,9 @@ export function createFieldHierarchies(fields, ignoreCategories) {
229
243
  const includedFields = [];
230
244
  visitedFields.forEach((field) => {
231
245
  const visitedField = visitField(field.category, field, parentField);
232
- if (visitedField)
246
+ if (visitedField) {
233
247
  includedFields.push(visitedField);
248
+ }
234
249
  });
235
250
  return includedFields;
236
251
  };
@@ -289,10 +304,12 @@ function mergeHierarchies(lhs, rhs) {
289
304
  };
290
305
  rhs.childFields.forEach((rhsChildHierarchy) => {
291
306
  const indexInResult = result.childFields.findIndex((resultHierarchy) => resultHierarchy.field.name === rhsChildHierarchy.field.name);
292
- if (indexInResult !== -1)
307
+ if (indexInResult !== -1) {
293
308
  result.childFields[indexInResult] = mergeHierarchies(result.childFields[indexInResult], rhsChildHierarchy);
294
- else
309
+ }
310
+ else {
295
311
  result.childFields.push(rhsChildHierarchy);
312
+ }
296
313
  });
297
314
  return result;
298
315
  }
@@ -342,8 +359,9 @@ export function parseCombinedFieldNames(combinedName) {
342
359
  function convertNestedContentItemToStructArrayItem(item, field, nextField) {
343
360
  const value = item.values[field.name] ?? [];
344
361
  assert(Value.isNestedContent(value));
345
- if (value.length === 0)
362
+ if (value.length === 0) {
346
363
  return { emptyNestedItem: true, convertedItem: item };
364
+ }
347
365
  const nextFieldValues = { raw: [], display: [] };
348
366
  value.forEach((ncv) => {
349
367
  const nextRawValue = ncv.values[nextField.name];
@@ -359,14 +377,16 @@ function convertNestedContentItemToStructArrayItem(item, field, nextField) {
359
377
  nextFieldValues.display.push(nextDisplayValue);
360
378
  }
361
379
  });
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
380
+ const convertedItem = new Item(item.primaryKeys, item.label, item.imageId, // eslint-disable-line deprecation/deprecation
381
+ item.classInfo, { [nextField.name]: nextFieldValues.raw }, { [nextField.name]: nextFieldValues.display }, item.mergedFieldNames, item.extendedData);
363
382
  return { emptyNestedItem: false, convertedItem };
364
383
  }
365
384
  function convertNestedContentFieldHierarchyToStructArrayHierarchy(fieldHierarchy, parentFieldName) {
366
385
  const fieldName = fieldHierarchy.field.name;
367
386
  const convertedChildFieldHierarchies = fieldHierarchy.childFields.map((child) => {
368
- if (child.field.isNestedContentField())
387
+ if (child.field.isNestedContentField()) {
369
388
  return convertNestedContentFieldHierarchyToStructArrayHierarchy(child, combineFieldNames(fieldName, parentFieldName));
389
+ }
370
390
  return child;
371
391
  });
372
392
  const convertedFieldHierarchy = {
@@ -419,10 +439,12 @@ function convertNestedContentFieldHierarchyItemToStructArrayItem(item, fieldHier
419
439
  const fieldName = fieldHierarchy.field.name;
420
440
  const rawValue = item.values[fieldName];
421
441
  assert(Value.isNestedContent(rawValue));
422
- if (rawValue.length === 0)
442
+ if (rawValue.length === 0) {
423
443
  return { emptyNestedItem: true, convertedItem: item };
444
+ }
424
445
  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
446
+ const convertedItem = new Item(item.primaryKeys, item.label, item.imageId, // eslint-disable-line deprecation/deprecation
447
+ item.classInfo, { [fieldName]: converted.raw }, { [fieldName]: converted.display }, converted.mergedFieldNames, item.extendedData);
426
448
  return { emptyNestedItem: false, convertedItem };
427
449
  }
428
450
  //# sourceMappingURL=ContentTraverser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContentTraverser.js","sourceRoot":"","sources":["../../../../src/presentation-common/content/ContentTraverser.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Content\r\n */\r\n\r\nimport { assert, IDisposable, using } from \"@itwin/core-bentley\";\r\nimport { CategoryDescription } from \"./Category\";\r\nimport { Content } from \"./Content\";\r\nimport { Descriptor } from \"./Descriptor\";\r\nimport { Field, NestedContentField } from \"./Fields\";\r\nimport { Item } from \"./Item\";\r\nimport { PropertyValueFormat, TypeDescription } from \"./TypeDescription\";\r\nimport { DisplayValue, DisplayValuesArray, DisplayValuesMap, NestedContentValue, Value, ValuesArray, ValuesMap } from \"./Value\";\r\n\r\n/**\r\n * A data structure to define a hierarchy of [[Field]] objects.\r\n * @public\r\n */\r\nexport interface FieldHierarchy {\r\n /** Parent field. */\r\n field: Field;\r\n /** Nested fields. */\r\n childFields: FieldHierarchy[];\r\n}\r\n\r\n/**\r\n * Props for the [[IContentVisitor.startContent]] call.\r\n * @public\r\n */\r\nexport interface StartContentProps {\r\n /** Descriptor of the visited content. */\r\n descriptor: Descriptor;\r\n}\r\n\r\n/**\r\n * Props for the [[IContentVisitor.processFieldHierarchies]] call.\r\n * @public\r\n */\r\nexport interface ProcessFieldHierarchiesProps {\r\n /**\r\n * The root list of fields, which may be mutated by the visitor to change order or the fields,\r\n * add new fields, etc.\r\n */\r\n hierarchies: FieldHierarchy[];\r\n}\r\n\r\n/**\r\n * Props for the [[IContentVisitor.startItem]] call.\r\n * @public\r\n */\r\nexport interface StartItemProps {\r\n /** The content item that's about to be visited. */\r\n item: Item;\r\n}\r\n\r\n/**\r\n * Props for the [[IContentVisitor.startCategory]] call.\r\n * @public\r\n */\r\nexport interface StartCategoryProps {\r\n /** The content category that's about to be visited. */\r\n category: CategoryDescription;\r\n}\r\n\r\n/**\r\n * Props for the [[IContentVisitor.startField]] call.\r\n * @public\r\n */\r\nexport interface StartFieldProps {\r\n /** The field that's about to be visited. */\r\n hierarchy: FieldHierarchy;\r\n}\r\n\r\n/**\r\n * Props for the [[IContentVisitor.startStruct]] call.\r\n * @public\r\n */\r\nexport interface StartStructProps {\r\n /** Field that describes the struct. */\r\n hierarchy: FieldHierarchy;\r\n /** Type of the struct. */\r\n valueType: TypeDescription;\r\n /** Name of the parent field (if there is one). */\r\n parentFieldName?: string;\r\n /** Member raw values. */\r\n rawValues: ValuesMap;\r\n /** Member display values. */\r\n displayValues: DisplayValuesMap;\r\n}\r\n\r\n/**\r\n * Props for the [[IContentVisitor.startArray]] call.\r\n * @public\r\n */\r\nexport interface StartArrayProps {\r\n /** Field that describes the array. */\r\n hierarchy: FieldHierarchy;\r\n /** Type of the array. */\r\n valueType: TypeDescription;\r\n /** Name of the parent field (if there is one). */\r\n parentFieldName?: string;\r\n /** Item raw values. */\r\n rawValues: ValuesArray;\r\n /** Item display values. */\r\n displayValues: DisplayValuesArray;\r\n}\r\n\r\n/**\r\n * Props for the [[IContentVisitor.processMergedValue]] call.\r\n * @public\r\n */\r\nexport interface ProcessMergedValueProps {\r\n /** The field whose values are merged. */\r\n mergedField: Field;\r\n /**\r\n * Generally this matches the [[mergedField]], but there are situations when a nested field is propagated\r\n * up to display it as if it wasn't nested its parent fields. In those cases, if one of the parent fields\r\n * is merged, the merged parent is going to be represented by [[mergedField]] and the field we wanted to\r\n * process is going to be represented by [[requestedField]].\r\n */\r\n requestedField: Field;\r\n /** Name of the parent field (if there is one). */\r\n parentFieldName?: string;\r\n}\r\n\r\n/**\r\n * Props for the [[IContentVisitor.processPrimitiveValue]] call.\r\n * @public\r\n */\r\nexport interface ProcessPrimitiveValueProps {\r\n /** Field whose value is being processed. */\r\n field: Field;\r\n /** Type of the value. */\r\n valueType: TypeDescription;\r\n /** Name of the parent field (if there is one). */\r\n parentFieldName?: string;\r\n /** Raw value. */\r\n rawValue: Value;\r\n /** Display value. */\r\n displayValue: DisplayValue;\r\n}\r\n\r\n/**\r\n * An interface for a visitor that can be passed to the [[traverseContent]] function\r\n * to be called on each piece of content.\r\n *\r\n * The order of calls when using the visitor with [[traverseContent]] or [[traverseContentItem]]:\r\n *\r\n * ```\r\n * startContent\r\n * processFieldHierarchies\r\n * for each content item:\r\n * startItem\r\n * for each field in root level:\r\n * for each category in field's category stack from root to field's category:\r\n * startCategory\r\n * startField\r\n * valueProcessing:\r\n * if item's value for this field is merged:\r\n * processMergedValue\r\n * else if the field is struct:\r\n * startStruct\r\n * for each struct member:\r\n * recurse into the valueProcessing step\r\n * finishStruct\r\n * else if the field is array:\r\n * startArray\r\n * for each array item:\r\n * recurse into the valueProcessing step\r\n * finishArray\r\n * else if the field is primitive:\r\n * processPrimitiveValue\r\n * finishField\r\n * finishItem\r\n * finishContent\r\n * ```\r\n * @public\r\n */\r\nexport interface IContentVisitor {\r\n /**\r\n * Called before starting [[Content]] processing. This is a good place to initialize various caches and prepare\r\n * for parsing content.\r\n *\r\n * Processing is skipped if the function returns `false` and [[finishContent]] is not called in that case.\r\n */\r\n startContent(props: StartContentProps): boolean;\r\n /** Called after processing of [[Content]] is complete. */\r\n finishContent(): void;\r\n\r\n /** Called to post-process field hierarchies after they're extracted from [[Descriptor]] in processed [[Content]]. */\r\n processFieldHierarchies(props: ProcessFieldHierarchiesProps): void;\r\n\r\n /**\r\n * Called before starting each [[Item]] processing. This is a good place to initialize for a new content item, e.g.\r\n * set up a new row in table.\r\n *\r\n * Processing is skipped if the function returns `false` and [[finishItem]] is not called in that case.\r\n */\r\n startItem(props: StartItemProps): boolean;\r\n /**\r\n * Called after processing of [[Item]] is complete. May be used to do any kind of post-processing after all\r\n * values for one content item have been processed.\r\n */\r\n finishItem(): void;\r\n\r\n /**\r\n * Called before processing a content item field ([[startField]] call) for each category in the field's\r\n * category stack, starting from the root and finishing with the field's category.\r\n *\r\n * Processing is skipped if the function returns `false` and [[finishCategory]] is not called in that case.\r\n */\r\n startCategory(props: StartCategoryProps): boolean;\r\n /** Called after processing of field is complete for every category in the field's category stack. */\r\n finishCategory(): void;\r\n\r\n /**\r\n * Called before starting [[Field]] processing for each individual [[Item]]. This is a good callback\r\n * to skip a field if it doesn't need to be handled.\r\n *\r\n * Processing is skipped if the function returns `false` and [[finishField]] is not called in that case.\r\n */\r\n startField(props: StartFieldProps): boolean;\r\n /** Called after processing of [[Field]] for individual [[Item]] is complete. */\r\n finishField(): void;\r\n\r\n /**\r\n * Called before processing a struct value. This is a good callback to skip handling the value or set up\r\n * for struct member values handling.\r\n *\r\n * Processing is skipped if the function returns `false` and [[finishStruct]] is not called in that case.\r\n */\r\n startStruct(props: StartStructProps): boolean;\r\n /** Called after processing of struct value is complete. */\r\n finishStruct(): void;\r\n\r\n /**\r\n * Called before processing an array value. This is a good callback to skip handling the value or set up\r\n * for array items handling.\r\n *\r\n * Processing is skipped if the function returns `false` and [[finishArray]] is not called in that case.\r\n */\r\n startArray(props: StartArrayProps): boolean;\r\n /** Called after processing of array value is complete. */\r\n finishArray(): void;\r\n\r\n /** Called to process a [merged value]($docs/presentation/content/Terminology.md#value-merging). */\r\n processMergedValue(props: ProcessMergedValueProps): void;\r\n /** Called to process a primitive value. */\r\n processPrimitiveValue(props: ProcessPrimitiveValueProps): void;\r\n}\r\n\r\n/**\r\n * An utility for traversing field hierarchy. Stops traversal as soon as `cb` returns `false`.\r\n * @public\r\n */\r\nexport function traverseFieldHierarchy(hierarchy: FieldHierarchy, cb: (h: FieldHierarchy) => boolean) {\r\n if (cb(hierarchy))\r\n hierarchy.childFields.forEach((childHierarchy) => traverseFieldHierarchy(childHierarchy, cb));\r\n}\r\n\r\n/**\r\n * An utility to traverse content using provided visitor. Provides means to parse content into different formats,\r\n * for different components.\r\n * @public\r\n */\r\nexport function traverseContent(visitor: IContentVisitor, content: Content) {\r\n if (!visitor.startContent({ descriptor: content.descriptor }))\r\n return;\r\n\r\n try {\r\n const fieldHierarchies = createFieldHierarchies(content.descriptor.fields);\r\n visitor.processFieldHierarchies({ hierarchies: fieldHierarchies });\r\n content.contentSet.forEach((item) => {\r\n traverseContentItemFields(visitor, fieldHierarchies, item);\r\n });\r\n } finally {\r\n visitor.finishContent();\r\n }\r\n}\r\n\r\n/**\r\n * An utility for calling [[traverseContent]] when there's only one content item.\r\n * @public\r\n */\r\nexport function traverseContentItem(visitor: IContentVisitor, descriptor: Descriptor, item: Item) {\r\n traverseContent(visitor, new Content(descriptor, [item]));\r\n}\r\n\r\nclass VisitedCategories implements IDisposable {\r\n private _visitedCategories: CategoryDescription[];\r\n private _didVisitAllHierarchy: boolean;\r\n constructor(private _visitor: IContentVisitor, category: CategoryDescription) {\r\n const stack: CategoryDescription[] = [];\r\n let curr: CategoryDescription | undefined = category;\r\n while (curr) {\r\n stack.push(curr);\r\n curr = curr.parent;\r\n }\r\n stack.reverse();\r\n\r\n this._didVisitAllHierarchy = true;\r\n this._visitedCategories = [];\r\n for (curr of stack) {\r\n if (this._visitor.startCategory({ category: curr })) {\r\n this._visitedCategories.push(curr);\r\n } else {\r\n this._didVisitAllHierarchy = false;\r\n break;\r\n }\r\n }\r\n }\r\n public dispose() {\r\n while (this._visitedCategories.pop())\r\n this._visitor.finishCategory();\r\n }\r\n public get shouldContinue(): boolean { return this._didVisitAllHierarchy; }\r\n}\r\n\r\nfunction traverseContentItemFields(visitor: IContentVisitor, fieldHierarchies: FieldHierarchy[], item: Item) {\r\n if (!visitor.startItem({ item }))\r\n return;\r\n\r\n try {\r\n fieldHierarchies.forEach((fieldHierarchy) => {\r\n using(new VisitedCategories(visitor, fieldHierarchy.field.category), (res) => {\r\n if (res.shouldContinue)\r\n traverseContentItemField(visitor, fieldHierarchy, item);\r\n });\r\n });\r\n } finally {\r\n visitor.finishItem();\r\n }\r\n}\r\n\r\nfunction traverseContentItemField(visitor: IContentVisitor, fieldHierarchy: FieldHierarchy, item: Item) {\r\n if (!visitor.startField({ hierarchy: fieldHierarchy }))\r\n return;\r\n\r\n try {\r\n const rootToThisField = createFieldPath(fieldHierarchy.field);\r\n let parentFieldName: string | undefined;\r\n const pathUpToField = rootToThisField.slice(undefined, -1);\r\n for (let i = 0; i < pathUpToField.length; ++i) {\r\n const parentField = pathUpToField[i] as NestedContentField;\r\n const nextField = rootToThisField[i + 1];\r\n\r\n if (item.isFieldMerged(parentField.name)) {\r\n visitor.processMergedValue({ requestedField: fieldHierarchy.field, mergedField: parentField, parentFieldName });\r\n return;\r\n }\r\n\r\n const { emptyNestedItem, convertedItem } = convertNestedContentItemToStructArrayItem(item, parentField, nextField);\r\n if (emptyNestedItem)\r\n return;\r\n\r\n item = convertedItem;\r\n parentFieldName = combineFieldNames(parentField.name, parentFieldName);\r\n }\r\n\r\n if (item.isFieldMerged(fieldHierarchy.field.name)) {\r\n visitor.processMergedValue({ requestedField: fieldHierarchy.field, mergedField: fieldHierarchy.field, parentFieldName });\r\n return;\r\n }\r\n\r\n if (fieldHierarchy.field.isNestedContentField()) {\r\n fieldHierarchy = convertNestedContentFieldHierarchyToStructArrayHierarchy(fieldHierarchy, parentFieldName);\r\n const { emptyNestedItem, convertedItem } = convertNestedContentFieldHierarchyItemToStructArrayItem(item, fieldHierarchy);\r\n if (emptyNestedItem)\r\n return;\r\n item = convertedItem;\r\n } else if (pathUpToField.length > 0) {\r\n fieldHierarchy = {\r\n ...fieldHierarchy,\r\n field: Object.assign(fieldHierarchy.field.clone(), {\r\n type: {\r\n valueFormat: PropertyValueFormat.Array,\r\n typeName: `${fieldHierarchy.field.type.typeName}[]`,\r\n memberType: fieldHierarchy.field.type,\r\n },\r\n }),\r\n };\r\n }\r\n\r\n traverseContentItemFieldValue(visitor, fieldHierarchy, item.mergedFieldNames, fieldHierarchy.field.type, parentFieldName, item.values[fieldHierarchy.field.name], item.displayValues[fieldHierarchy.field.name]);\r\n\r\n } finally {\r\n visitor.finishField();\r\n }\r\n}\r\n\r\nfunction traverseContentItemFieldValue(visitor: IContentVisitor, fieldHierarchy: FieldHierarchy, mergedFieldNames: string[], valueType: TypeDescription, parentFieldName: string | undefined, rawValue: Value, displayValue: DisplayValue) {\r\n if (rawValue !== undefined) {\r\n if (valueType.valueFormat === PropertyValueFormat.Array) {\r\n assert(Value.isArray(rawValue));\r\n assert(DisplayValue.isArray(displayValue));\r\n return traverseContentItemArrayFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);\r\n }\r\n if (valueType.valueFormat === PropertyValueFormat.Struct) {\r\n assert(Value.isMap(rawValue));\r\n assert(DisplayValue.isMap(displayValue));\r\n return traverseContentItemStructFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);\r\n }\r\n }\r\n traverseContentItemPrimitiveFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);\r\n}\r\n\r\nfunction traverseContentItemArrayFieldValue(visitor: IContentVisitor, fieldHierarchy: FieldHierarchy, mergedFieldNames: string[], valueType: TypeDescription, parentFieldName: string | undefined, rawValues: ValuesArray, displayValues: DisplayValuesArray) {\r\n assert(rawValues.length === displayValues.length);\r\n assert(valueType.valueFormat === PropertyValueFormat.Array);\r\n if (!visitor.startArray({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues }))\r\n return;\r\n\r\n try {\r\n const itemType = valueType.memberType;\r\n rawValues.forEach((_, i) => {\r\n traverseContentItemFieldValue(visitor, fieldHierarchy, mergedFieldNames, itemType, parentFieldName, rawValues[i], displayValues[i]);\r\n });\r\n } finally {\r\n visitor.finishArray();\r\n }\r\n}\r\n\r\nfunction traverseContentItemStructFieldValue(visitor: IContentVisitor, fieldHierarchy: FieldHierarchy, mergedFieldNames: string[], valueType: TypeDescription, parentFieldName: string | undefined, rawValues: ValuesMap, displayValues: DisplayValuesMap) {\r\n assert(valueType.valueFormat === PropertyValueFormat.Struct);\r\n if (!visitor.startStruct({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues }))\r\n return;\r\n\r\n try {\r\n if (fieldHierarchy.field.isNestedContentField())\r\n parentFieldName = combineFieldNames(fieldHierarchy.field.name, parentFieldName);\r\n\r\n valueType.members.forEach((memberDescription) => {\r\n let memberField = fieldHierarchy.childFields.find((f) => f.field.name === memberDescription.name);\r\n if (!memberField) {\r\n // Not finding a member field means we're traversing an ECStruct. We still need to carry member information, so we\r\n // create a fake field to represent the member\r\n memberField = {\r\n field: new Field(fieldHierarchy.field.category, memberDescription.name, memberDescription.label, memberDescription.type, fieldHierarchy.field.isReadonly, 0),\r\n childFields: [],\r\n };\r\n }\r\n traverseContentItemFieldValue(visitor, memberField, mergedFieldNames, memberDescription.type, parentFieldName, rawValues[memberDescription.name], displayValues[memberDescription.name]);\r\n });\r\n } finally {\r\n visitor.finishStruct();\r\n }\r\n}\r\n\r\nfunction traverseContentItemPrimitiveFieldValue(visitor: IContentVisitor, fieldHierarchy: FieldHierarchy, mergedFieldNames: string[], valueType: TypeDescription, parentFieldName: string | undefined, rawValue: Value, displayValue: DisplayValue) {\r\n if (-1 !== mergedFieldNames.indexOf(fieldHierarchy.field.name)) {\r\n visitor.processMergedValue({ mergedField: fieldHierarchy.field, requestedField: fieldHierarchy.field, parentFieldName });\r\n return;\r\n }\r\n\r\n visitor.processPrimitiveValue({ field: fieldHierarchy.field, valueType, parentFieldName, rawValue, displayValue });\r\n}\r\n\r\n/**\r\n * Parses a list of [[Field]] objects into a list of [[FieldHierarchy]].\r\n *\r\n * @param ignoreCategories Enables adding all of the `nestedFields` to parent field's `childFields`\r\n * without considering categories.\r\n *\r\n * @public\r\n */\r\nexport function createFieldHierarchies(fields: Field[], ignoreCategories?: Boolean) {\r\n const hierarchies = new Array<FieldHierarchy>();\r\n const visitField = (category: CategoryDescription, field: Field, parentField: Field | undefined): FieldHierarchy | undefined => {\r\n let childFields: FieldHierarchy[] = [];\r\n if (field.isNestedContentField()) {\r\n // visit all nested fields\r\n childFields = visitFields(field.nestedFields, field);\r\n if (0 === childFields.length)\r\n return undefined;\r\n }\r\n const fieldHierarchy = { field, childFields };\r\n if (category === parentField?.category || ignoreCategories && parentField) {\r\n // if categories of this field and its parent field match - return the field hierarchy without\r\n // including it as a top level field\r\n return fieldHierarchy;\r\n }\r\n addFieldHierarchy(hierarchies, fieldHierarchy);\r\n return undefined;\r\n };\r\n const visitFields = (visitedFields: Field[], parentField: NestedContentField | undefined) => {\r\n const includedFields: FieldHierarchy[] = [];\r\n visitedFields.forEach((field) => {\r\n const visitedField = visitField(field.category, field, parentField);\r\n if (visitedField)\r\n includedFields.push(visitedField);\r\n });\r\n return includedFields;\r\n };\r\n visitFields(fields, undefined);\r\n return hierarchies;\r\n}\r\n\r\nfunction findRelatedFields(rootFields: FieldHierarchy[], hierarchy: FieldHierarchy) {\r\n // build a list of parent fields in hierarchy\r\n const fields: Field[] = [];\r\n let currField: Field | undefined = hierarchy.field;\r\n while (currField) {\r\n fields.push(currField);\r\n currField = currField.parent;\r\n }\r\n\r\n for (let rootIndex = 0; rootIndex < rootFields.length; ++rootIndex) {\r\n const rootFieldHierarchy = rootFields[rootIndex];\r\n if (rootFieldHierarchy.field.category !== hierarchy.field.category) {\r\n // only interested in fields with the same category\r\n continue;\r\n }\r\n\r\n let first = true;\r\n currField = rootFieldHierarchy.field;\r\n while (currField) {\r\n const index = fields.findIndex((f) => f.name === currField!.name);\r\n if (-1 !== index) {\r\n return {\r\n existing: {\r\n field: currField,\r\n hierarchy: first ? rootFieldHierarchy : undefined,\r\n index: rootIndex,\r\n },\r\n matchingField: fields[index]!,\r\n };\r\n }\r\n currField = currField.parent;\r\n first = false;\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction buildParentHierarchy(hierarchy: FieldHierarchy, parentField: Field) {\r\n // note: parentField is found by walking up the parentship relationship\r\n // from hierarchy.field, so we expect to always find it here\r\n while (hierarchy.field !== parentField) {\r\n const hierarchyParent = hierarchy.field.parent;\r\n assert(hierarchyParent !== undefined);\r\n hierarchy = { field: hierarchyParent, childFields: [hierarchy] };\r\n }\r\n return hierarchy;\r\n}\r\n\r\nfunction mergeHierarchies(lhs: FieldHierarchy, rhs: FieldHierarchy) {\r\n assert(lhs.field.name === rhs.field.name);\r\n const result: FieldHierarchy = {\r\n field: lhs.field.clone(),\r\n childFields: [...lhs.childFields],\r\n };\r\n rhs.childFields.forEach((rhsChildHierarchy) => {\r\n const indexInResult = result.childFields.findIndex((resultHierarchy) => resultHierarchy.field.name === rhsChildHierarchy.field.name);\r\n if (indexInResult !== -1)\r\n result.childFields[indexInResult] = mergeHierarchies(result.childFields[indexInResult], rhsChildHierarchy);\r\n else\r\n result.childFields.push(rhsChildHierarchy);\r\n });\r\n return result;\r\n}\r\n\r\n/**\r\n * Adds a field hierarchy into root field hierarchies list. *\r\n * @public\r\n */\r\nexport function addFieldHierarchy(rootHierarchies: FieldHierarchy[], hierarchy: FieldHierarchy): void {\r\n const match = findRelatedFields(rootHierarchies, hierarchy);\r\n if (!match) {\r\n rootHierarchies.push(hierarchy);\r\n return;\r\n }\r\n\r\n const targetHierarchy = rootHierarchies[match.existing.index];\r\n const existingHierarchy = match.existing.hierarchy ?? buildParentHierarchy(targetHierarchy, match.existing.field);\r\n const insertHierarchy = buildParentHierarchy(hierarchy, match.matchingField);\r\n const mergedHierarchy = mergeHierarchies(existingHierarchy, insertHierarchy);\r\n mergedHierarchy.field.category = hierarchy.field.category;\r\n rootHierarchies[match.existing.index] = mergedHierarchy;\r\n}\r\n\r\nfunction createFieldPath(field: Field): Field[] {\r\n const path = [field];\r\n let currField = field;\r\n while (currField.parent) {\r\n currField = currField.parent;\r\n path.push(currField);\r\n }\r\n path.reverse();\r\n return path;\r\n}\r\n\r\n/** @internal */\r\nexport const FIELD_NAMES_SEPARATOR = \"$\";\r\n/**\r\n * Combines given field names in a way that allows them to be parsed back into a list of individual names using the [[parseCombinedFieldNames]] function.\r\n * @public\r\n */\r\nexport function combineFieldNames(fieldName: string, parentFieldName?: string) {\r\n return parentFieldName ? `${parentFieldName}${FIELD_NAMES_SEPARATOR}${fieldName}` : fieldName;\r\n}\r\n/**\r\n * Parses given combined field names string, constructed using [[combineFieldNames]], into a list of individual field names.\r\n * @public\r\n */\r\nexport function parseCombinedFieldNames(combinedName: string) {\r\n return combinedName ? combinedName.split(FIELD_NAMES_SEPARATOR) : [];\r\n}\r\n\r\ninterface NestedItemConversionResult {\r\n emptyNestedItem: boolean;\r\n convertedItem: Item;\r\n}\r\n\r\nfunction convertNestedContentItemToStructArrayItem(item: Readonly<Item>, field: Field, nextField: Field): NestedItemConversionResult {\r\n const value = item.values[field.name] ?? [];\r\n assert(Value.isNestedContent(value));\r\n if (value.length === 0)\r\n return { emptyNestedItem: true, convertedItem: item };\r\n\r\n const nextFieldValues: { raw: ValuesArray, display: DisplayValuesArray } = { raw: [], display: [] };\r\n value.forEach((ncv) => {\r\n const nextRawValue = ncv.values[nextField.name];\r\n const nextDisplayValue = ncv.displayValues[nextField.name];\r\n if (nextField.isNestedContentField()) {\r\n if (nextRawValue) {\r\n assert(Value.isNestedContent(nextRawValue));\r\n nextFieldValues.raw.push(...nextRawValue);\r\n }\r\n } else {\r\n nextFieldValues.raw.push(nextRawValue);\r\n nextFieldValues.display.push(nextDisplayValue);\r\n }\r\n });\r\n 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\r\n return { emptyNestedItem: false, convertedItem };\r\n}\r\n\r\nfunction convertNestedContentFieldHierarchyToStructArrayHierarchy(fieldHierarchy: FieldHierarchy, parentFieldName: string | undefined) {\r\n const fieldName = fieldHierarchy.field.name;\r\n const convertedChildFieldHierarchies = fieldHierarchy.childFields.map((child) => {\r\n if (child.field.isNestedContentField())\r\n return convertNestedContentFieldHierarchyToStructArrayHierarchy(child, combineFieldNames(fieldName, parentFieldName));\r\n return child;\r\n });\r\n const convertedFieldHierarchy: FieldHierarchy = {\r\n field: Object.assign(fieldHierarchy.field.clone(), {\r\n type: {\r\n valueFormat: PropertyValueFormat.Array,\r\n typeName: `${fieldHierarchy.field.type.typeName}[]`,\r\n memberType: {\r\n valueFormat: PropertyValueFormat.Struct,\r\n typeName: fieldHierarchy.field.type.typeName,\r\n members: convertedChildFieldHierarchies.map((member) => ({\r\n name: member.field.name,\r\n label: member.field.label,\r\n type: member.field.type,\r\n })),\r\n },\r\n } as TypeDescription,\r\n }),\r\n childFields: convertedChildFieldHierarchies,\r\n };\r\n return convertedFieldHierarchy;\r\n}\r\n\r\nfunction convertNestedContentValuesToStructArrayValuesRecursive(fieldHierarchy: FieldHierarchy, ncvs: ReadonlyArray<NestedContentValue>) {\r\n const result: { raw: ValuesArray, display: DisplayValuesArray, mergedFieldNames: string[] } = { raw: [], display: [], mergedFieldNames: [] };\r\n ncvs.forEach((ncv) => {\r\n const values: ValuesMap = { ...ncv.values };\r\n const displayValues: DisplayValuesMap = { ...ncv.displayValues };\r\n const mergedFieldNames: string[] = [...ncv.mergedFieldNames];\r\n fieldHierarchy.childFields.forEach((childFieldHierarchy) => {\r\n const childFieldName = childFieldHierarchy.field.name;\r\n if (-1 !== ncv.mergedFieldNames.indexOf(childFieldName)) {\r\n return;\r\n }\r\n if (childFieldHierarchy.field.isNestedContentField()) {\r\n const value = values[childFieldName];\r\n assert(Value.isNestedContent(value));\r\n const convertedValues = convertNestedContentValuesToStructArrayValuesRecursive(childFieldHierarchy, value);\r\n values[childFieldName] = convertedValues.raw;\r\n displayValues[childFieldName] = convertedValues.display;\r\n mergedFieldNames.push(...convertedValues.mergedFieldNames);\r\n }\r\n });\r\n result.raw.push(values);\r\n result.display.push(displayValues);\r\n result.mergedFieldNames.push(...mergedFieldNames);\r\n });\r\n return result;\r\n}\r\n\r\nfunction convertNestedContentFieldHierarchyItemToStructArrayItem(item: Readonly<Item>, fieldHierarchy: FieldHierarchy): NestedItemConversionResult {\r\n const fieldName = fieldHierarchy.field.name;\r\n const rawValue = item.values[fieldName];\r\n assert(Value.isNestedContent(rawValue));\r\n if (rawValue.length === 0)\r\n return { emptyNestedItem: true, convertedItem: item };\r\n\r\n const converted = convertNestedContentValuesToStructArrayValuesRecursive(fieldHierarchy, rawValue);\r\n 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\r\n return { emptyNestedItem: false, convertedItem };\r\n}\r\n"]}
1
+ {"version":3,"file":"ContentTraverser.js","sourceRoot":"","sources":["../../../../src/presentation-common/content/ContentTraverser.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 *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Content\n */\n\nimport { assert, IDisposable, using } from \"@itwin/core-bentley\";\nimport { CategoryDescription } from \"./Category\";\nimport { Content } from \"./Content\";\nimport { Descriptor } from \"./Descriptor\";\nimport { Field, NestedContentField } from \"./Fields\";\nimport { Item } from \"./Item\";\nimport { PropertyValueFormat, TypeDescription } from \"./TypeDescription\";\nimport { DisplayValue, DisplayValuesArray, DisplayValuesMap, NestedContentValue, Value, ValuesArray, ValuesMap } from \"./Value\";\n\n/**\n * A data structure to define a hierarchy of [[Field]] objects.\n * @public\n */\nexport interface FieldHierarchy {\n /** Parent field. */\n field: Field;\n /** Nested fields. */\n childFields: FieldHierarchy[];\n}\n\n/**\n * Props for the [[IContentVisitor.startContent]] call.\n * @public\n */\nexport interface StartContentProps {\n /** Descriptor of the visited content. */\n descriptor: Descriptor;\n}\n\n/**\n * Props for the [[IContentVisitor.processFieldHierarchies]] call.\n * @public\n */\nexport interface ProcessFieldHierarchiesProps {\n /**\n * The root list of fields, which may be mutated by the visitor to change order or the fields,\n * add new fields, etc.\n */\n hierarchies: FieldHierarchy[];\n}\n\n/**\n * Props for the [[IContentVisitor.startItem]] call.\n * @public\n */\nexport interface StartItemProps {\n /** The content item that's about to be visited. */\n item: Item;\n}\n\n/**\n * Props for the [[IContentVisitor.startCategory]] call.\n * @public\n */\nexport interface StartCategoryProps {\n /** The content category that's about to be visited. */\n category: CategoryDescription;\n}\n\n/**\n * Props for the [[IContentVisitor.startField]] call.\n * @public\n */\nexport interface StartFieldProps {\n /** The field that's about to be visited. */\n hierarchy: FieldHierarchy;\n}\n\n/**\n * Props for the [[IContentVisitor.startStruct]] call.\n * @public\n */\nexport interface StartStructProps {\n /** Field that describes the struct. */\n hierarchy: FieldHierarchy;\n /** Type of the struct. */\n valueType: TypeDescription;\n /** Name of the parent field (if there is one). */\n parentFieldName?: string;\n /** Member raw values. */\n rawValues: ValuesMap;\n /** Member display values. */\n displayValues: DisplayValuesMap;\n}\n\n/**\n * Props for the [[IContentVisitor.startArray]] call.\n * @public\n */\nexport interface StartArrayProps {\n /** Field that describes the array. */\n hierarchy: FieldHierarchy;\n /** Type of the array. */\n valueType: TypeDescription;\n /** Name of the parent field (if there is one). */\n parentFieldName?: string;\n /** Item raw values. */\n rawValues: ValuesArray;\n /** Item display values. */\n displayValues: DisplayValuesArray;\n}\n\n/**\n * Props for the [[IContentVisitor.processMergedValue]] call.\n * @public\n */\nexport interface ProcessMergedValueProps {\n /** The field whose values are merged. */\n mergedField: Field;\n /**\n * Generally this matches the [[mergedField]], but there are situations when a nested field is propagated\n * up to display it as if it wasn't nested its parent fields. In those cases, if one of the parent fields\n * is merged, the merged parent is going to be represented by [[mergedField]] and the field we wanted to\n * process is going to be represented by [[requestedField]].\n */\n requestedField: Field;\n /** Name of the parent field (if there is one). */\n parentFieldName?: string;\n}\n\n/**\n * Props for the [[IContentVisitor.processPrimitiveValue]] call.\n * @public\n */\nexport interface ProcessPrimitiveValueProps {\n /** Field whose value is being processed. */\n field: Field;\n /** Type of the value. */\n valueType: TypeDescription;\n /** Name of the parent field (if there is one). */\n parentFieldName?: string;\n /** Raw value. */\n rawValue: Value;\n /** Display value. */\n displayValue: DisplayValue;\n}\n\n/**\n * An interface for a visitor that can be passed to the [[traverseContent]] function\n * to be called on each piece of content.\n *\n * The order of calls when using the visitor with [[traverseContent]] or [[traverseContentItem]]:\n *\n * ```\n * startContent\n * processFieldHierarchies\n * for each content item:\n * startItem\n * for each field in root level:\n * for each category in field's category stack from root to field's category:\n * startCategory\n * startField\n * valueProcessing:\n * if item's value for this field is merged:\n * processMergedValue\n * else if the field is struct:\n * startStruct\n * for each struct member:\n * recurse into the valueProcessing step\n * finishStruct\n * else if the field is array:\n * startArray\n * for each array item:\n * recurse into the valueProcessing step\n * finishArray\n * else if the field is primitive:\n * processPrimitiveValue\n * finishField\n * finishItem\n * finishContent\n * ```\n * @public\n */\nexport interface IContentVisitor {\n /**\n * Called before starting [[Content]] processing. This is a good place to initialize various caches and prepare\n * for parsing content.\n *\n * Processing is skipped if the function returns `false` and [[finishContent]] is not called in that case.\n */\n startContent(props: StartContentProps): boolean;\n /** Called after processing of [[Content]] is complete. */\n finishContent(): void;\n\n /** Called to post-process field hierarchies after they're extracted from [[Descriptor]] in processed [[Content]]. */\n processFieldHierarchies(props: ProcessFieldHierarchiesProps): void;\n\n /**\n * Called before starting each [[Item]] processing. This is a good place to initialize for a new content item, e.g.\n * set up a new row in table.\n *\n * Processing is skipped if the function returns `false` and [[finishItem]] is not called in that case.\n */\n startItem(props: StartItemProps): boolean;\n /**\n * Called after processing of [[Item]] is complete. May be used to do any kind of post-processing after all\n * values for one content item have been processed.\n */\n finishItem(): void;\n\n /**\n * Called before processing a content item field ([[startField]] call) for each category in the field's\n * category stack, starting from the root and finishing with the field's category.\n *\n * Processing is skipped if the function returns `false` and [[finishCategory]] is not called in that case.\n */\n startCategory(props: StartCategoryProps): boolean;\n /** Called after processing of field is complete for every category in the field's category stack. */\n finishCategory(): void;\n\n /**\n * Called before starting [[Field]] processing for each individual [[Item]]. This is a good callback\n * to skip a field if it doesn't need to be handled.\n *\n * Processing is skipped if the function returns `false` and [[finishField]] is not called in that case.\n */\n startField(props: StartFieldProps): boolean;\n /** Called after processing of [[Field]] for individual [[Item]] is complete. */\n finishField(): void;\n\n /**\n * Called before processing a struct value. This is a good callback to skip handling the value or set up\n * for struct member values handling.\n *\n * Processing is skipped if the function returns `false` and [[finishStruct]] is not called in that case.\n */\n startStruct(props: StartStructProps): boolean;\n /** Called after processing of struct value is complete. */\n finishStruct(): void;\n\n /**\n * Called before processing an array value. This is a good callback to skip handling the value or set up\n * for array items handling.\n *\n * Processing is skipped if the function returns `false` and [[finishArray]] is not called in that case.\n */\n startArray(props: StartArrayProps): boolean;\n /** Called after processing of array value is complete. */\n finishArray(): void;\n\n /** Called to process a [merged value]($docs/presentation/content/Terminology.md#value-merging). */\n processMergedValue(props: ProcessMergedValueProps): void;\n /** Called to process a primitive value. */\n processPrimitiveValue(props: ProcessPrimitiveValueProps): void;\n}\n\n/**\n * An utility for traversing field hierarchy. Stops traversal as soon as `cb` returns `false`.\n * @public\n */\nexport function traverseFieldHierarchy(hierarchy: FieldHierarchy, cb: (h: FieldHierarchy) => boolean) {\n if (cb(hierarchy)) {\n hierarchy.childFields.forEach((childHierarchy) => traverseFieldHierarchy(childHierarchy, cb));\n }\n}\n\n/**\n * An utility to traverse content using provided visitor. Provides means to parse content into different formats,\n * for different components.\n * @public\n */\nexport function traverseContent(visitor: IContentVisitor, content: Content) {\n if (!visitor.startContent({ descriptor: content.descriptor })) {\n return;\n }\n\n try {\n const fieldHierarchies = createFieldHierarchies(content.descriptor.fields);\n visitor.processFieldHierarchies({ hierarchies: fieldHierarchies });\n content.contentSet.forEach((item) => {\n traverseContentItemFields(visitor, fieldHierarchies, item);\n });\n } finally {\n visitor.finishContent();\n }\n}\n\n/**\n * An utility for calling [[traverseContent]] when there's only one content item.\n * @public\n */\nexport function traverseContentItem(visitor: IContentVisitor, descriptor: Descriptor, item: Item) {\n traverseContent(visitor, new Content(descriptor, [item]));\n}\n\nclass VisitedCategories implements IDisposable {\n private _visitedCategories: CategoryDescription[];\n private _didVisitAllHierarchy: boolean;\n constructor(\n private _visitor: IContentVisitor,\n category: CategoryDescription,\n ) {\n const stack: CategoryDescription[] = [];\n let curr: CategoryDescription | undefined = category;\n while (curr) {\n stack.push(curr);\n curr = curr.parent;\n }\n stack.reverse();\n\n this._didVisitAllHierarchy = true;\n this._visitedCategories = [];\n for (curr of stack) {\n if (this._visitor.startCategory({ category: curr })) {\n this._visitedCategories.push(curr);\n } else {\n this._didVisitAllHierarchy = false;\n break;\n }\n }\n }\n public dispose() {\n while (this._visitedCategories.pop()) {\n this._visitor.finishCategory();\n }\n }\n public get shouldContinue(): boolean {\n return this._didVisitAllHierarchy;\n }\n}\n\nfunction traverseContentItemFields(visitor: IContentVisitor, fieldHierarchies: FieldHierarchy[], item: Item) {\n if (!visitor.startItem({ item })) {\n return;\n }\n\n try {\n fieldHierarchies.forEach((fieldHierarchy) => {\n using(new VisitedCategories(visitor, fieldHierarchy.field.category), (res) => {\n if (res.shouldContinue) {\n traverseContentItemField(visitor, fieldHierarchy, item);\n }\n });\n });\n } finally {\n visitor.finishItem();\n }\n}\n\nfunction traverseContentItemField(visitor: IContentVisitor, fieldHierarchy: FieldHierarchy, item: Item) {\n if (!visitor.startField({ hierarchy: fieldHierarchy })) {\n return;\n }\n\n try {\n const rootToThisField = createFieldPath(fieldHierarchy.field);\n let parentFieldName: string | undefined;\n const pathUpToField = rootToThisField.slice(undefined, -1);\n for (let i = 0; i < pathUpToField.length; ++i) {\n const parentField = pathUpToField[i] as NestedContentField;\n const nextField = rootToThisField[i + 1];\n\n if (item.isFieldMerged(parentField.name)) {\n visitor.processMergedValue({ requestedField: fieldHierarchy.field, mergedField: parentField, parentFieldName });\n return;\n }\n\n const { emptyNestedItem, convertedItem } = convertNestedContentItemToStructArrayItem(item, parentField, nextField);\n if (emptyNestedItem) {\n return;\n }\n\n item = convertedItem;\n parentFieldName = combineFieldNames(parentField.name, parentFieldName);\n }\n\n if (item.isFieldMerged(fieldHierarchy.field.name)) {\n visitor.processMergedValue({ requestedField: fieldHierarchy.field, mergedField: fieldHierarchy.field, parentFieldName });\n return;\n }\n\n if (fieldHierarchy.field.isNestedContentField()) {\n fieldHierarchy = convertNestedContentFieldHierarchyToStructArrayHierarchy(fieldHierarchy, parentFieldName);\n const { emptyNestedItem, convertedItem } = convertNestedContentFieldHierarchyItemToStructArrayItem(item, fieldHierarchy);\n if (emptyNestedItem) {\n return;\n }\n item = convertedItem;\n } else if (pathUpToField.length > 0) {\n fieldHierarchy = {\n ...fieldHierarchy,\n field: Object.assign(fieldHierarchy.field.clone(), {\n type: {\n valueFormat: PropertyValueFormat.Array,\n typeName: `${fieldHierarchy.field.type.typeName}[]`,\n memberType: fieldHierarchy.field.type,\n },\n }),\n };\n }\n\n traverseContentItemFieldValue(\n visitor,\n fieldHierarchy,\n item.mergedFieldNames,\n fieldHierarchy.field.type,\n parentFieldName,\n item.values[fieldHierarchy.field.name],\n item.displayValues[fieldHierarchy.field.name],\n );\n } finally {\n visitor.finishField();\n }\n}\n\nfunction traverseContentItemFieldValue(\n visitor: IContentVisitor,\n fieldHierarchy: FieldHierarchy,\n mergedFieldNames: string[],\n valueType: TypeDescription,\n parentFieldName: string | undefined,\n rawValue: Value,\n displayValue: DisplayValue,\n) {\n if (rawValue !== undefined) {\n if (valueType.valueFormat === PropertyValueFormat.Array) {\n assert(Value.isArray(rawValue));\n assert(DisplayValue.isArray(displayValue));\n return traverseContentItemArrayFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);\n }\n if (valueType.valueFormat === PropertyValueFormat.Struct) {\n assert(Value.isMap(rawValue));\n assert(DisplayValue.isMap(displayValue));\n return traverseContentItemStructFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);\n }\n }\n traverseContentItemPrimitiveFieldValue(visitor, fieldHierarchy, mergedFieldNames, valueType, parentFieldName, rawValue, displayValue);\n}\n\nfunction traverseContentItemArrayFieldValue(\n visitor: IContentVisitor,\n fieldHierarchy: FieldHierarchy,\n mergedFieldNames: string[],\n valueType: TypeDescription,\n parentFieldName: string | undefined,\n rawValues: ValuesArray,\n displayValues: DisplayValuesArray,\n) {\n assert(rawValues.length === displayValues.length);\n assert(valueType.valueFormat === PropertyValueFormat.Array);\n if (!visitor.startArray({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues })) {\n return;\n }\n\n try {\n const itemType = valueType.memberType;\n rawValues.forEach((_, i) => {\n traverseContentItemFieldValue(visitor, fieldHierarchy, mergedFieldNames, itemType, parentFieldName, rawValues[i], displayValues[i]);\n });\n } finally {\n visitor.finishArray();\n }\n}\n\nfunction traverseContentItemStructFieldValue(\n visitor: IContentVisitor,\n fieldHierarchy: FieldHierarchy,\n mergedFieldNames: string[],\n valueType: TypeDescription,\n parentFieldName: string | undefined,\n rawValues: ValuesMap,\n displayValues: DisplayValuesMap,\n) {\n assert(valueType.valueFormat === PropertyValueFormat.Struct);\n if (!visitor.startStruct({ hierarchy: fieldHierarchy, valueType, parentFieldName, rawValues, displayValues })) {\n return;\n }\n\n try {\n if (fieldHierarchy.field.isNestedContentField()) {\n parentFieldName = combineFieldNames(fieldHierarchy.field.name, parentFieldName);\n }\n\n valueType.members.forEach((memberDescription) => {\n let memberField = fieldHierarchy.childFields.find((f) => f.field.name === memberDescription.name);\n if (!memberField) {\n // Not finding a member field means we're traversing an ECStruct. We still need to carry member information, so we\n // create a fake field to represent the member\n memberField = {\n field: new Field(\n fieldHierarchy.field.category,\n memberDescription.name,\n memberDescription.label,\n memberDescription.type,\n fieldHierarchy.field.isReadonly,\n 0,\n ),\n childFields: [],\n };\n }\n traverseContentItemFieldValue(\n visitor,\n memberField,\n mergedFieldNames,\n memberDescription.type,\n parentFieldName,\n rawValues[memberDescription.name],\n displayValues[memberDescription.name],\n );\n });\n } finally {\n visitor.finishStruct();\n }\n}\n\nfunction traverseContentItemPrimitiveFieldValue(\n visitor: IContentVisitor,\n fieldHierarchy: FieldHierarchy,\n mergedFieldNames: string[],\n valueType: TypeDescription,\n parentFieldName: string | undefined,\n rawValue: Value,\n displayValue: DisplayValue,\n) {\n if (-1 !== mergedFieldNames.indexOf(fieldHierarchy.field.name)) {\n visitor.processMergedValue({ mergedField: fieldHierarchy.field, requestedField: fieldHierarchy.field, parentFieldName });\n return;\n }\n\n visitor.processPrimitiveValue({ field: fieldHierarchy.field, valueType, parentFieldName, rawValue, displayValue });\n}\n\n/**\n * Parses a list of [[Field]] objects into a list of [[FieldHierarchy]].\n *\n * @param ignoreCategories Enables adding all of the `nestedFields` to parent field's `childFields`\n * without considering categories.\n *\n * @public\n */\nexport function createFieldHierarchies(fields: Field[], ignoreCategories?: Boolean) {\n const hierarchies = new Array<FieldHierarchy>();\n const visitField = (category: CategoryDescription, field: Field, parentField: Field | undefined): FieldHierarchy | undefined => {\n let childFields: FieldHierarchy[] = [];\n if (field.isNestedContentField()) {\n // visit all nested fields\n childFields = visitFields(field.nestedFields, field);\n if (0 === childFields.length) {\n return undefined;\n }\n }\n const fieldHierarchy = { field, childFields };\n if (category === parentField?.category || (ignoreCategories && parentField)) {\n // if categories of this field and its parent field match - return the field hierarchy without\n // including it as a top level field\n return fieldHierarchy;\n }\n addFieldHierarchy(hierarchies, fieldHierarchy);\n return undefined;\n };\n const visitFields = (visitedFields: Field[], parentField: NestedContentField | undefined) => {\n const includedFields: FieldHierarchy[] = [];\n visitedFields.forEach((field) => {\n const visitedField = visitField(field.category, field, parentField);\n if (visitedField) {\n includedFields.push(visitedField);\n }\n });\n return includedFields;\n };\n visitFields(fields, undefined);\n return hierarchies;\n}\n\nfunction findRelatedFields(rootFields: FieldHierarchy[], hierarchy: FieldHierarchy) {\n // build a list of parent fields in hierarchy\n const fields: Field[] = [];\n let currField: Field | undefined = hierarchy.field;\n while (currField) {\n fields.push(currField);\n currField = currField.parent;\n }\n\n for (let rootIndex = 0; rootIndex < rootFields.length; ++rootIndex) {\n const rootFieldHierarchy = rootFields[rootIndex];\n if (rootFieldHierarchy.field.category !== hierarchy.field.category) {\n // only interested in fields with the same category\n continue;\n }\n\n let first = true;\n currField = rootFieldHierarchy.field;\n while (currField) {\n const index = fields.findIndex((f) => f.name === currField!.name);\n if (-1 !== index) {\n return {\n existing: {\n field: currField,\n hierarchy: first ? rootFieldHierarchy : undefined,\n index: rootIndex,\n },\n matchingField: fields[index]!,\n };\n }\n currField = currField.parent;\n first = false;\n }\n }\n\n return undefined;\n}\n\nfunction buildParentHierarchy(hierarchy: FieldHierarchy, parentField: Field) {\n // note: parentField is found by walking up the parentship relationship\n // from hierarchy.field, so we expect to always find it here\n while (hierarchy.field !== parentField) {\n const hierarchyParent = hierarchy.field.parent;\n assert(hierarchyParent !== undefined);\n hierarchy = { field: hierarchyParent, childFields: [hierarchy] };\n }\n return hierarchy;\n}\n\nfunction mergeHierarchies(lhs: FieldHierarchy, rhs: FieldHierarchy) {\n assert(lhs.field.name === rhs.field.name);\n const result: FieldHierarchy = {\n field: lhs.field.clone(),\n childFields: [...lhs.childFields],\n };\n rhs.childFields.forEach((rhsChildHierarchy) => {\n const indexInResult = result.childFields.findIndex((resultHierarchy) => resultHierarchy.field.name === rhsChildHierarchy.field.name);\n if (indexInResult !== -1) {\n result.childFields[indexInResult] = mergeHierarchies(result.childFields[indexInResult], rhsChildHierarchy);\n } else {\n result.childFields.push(rhsChildHierarchy);\n }\n });\n return result;\n}\n\n/**\n * Adds a field hierarchy into root field hierarchies list. *\n * @public\n */\nexport function addFieldHierarchy(rootHierarchies: FieldHierarchy[], hierarchy: FieldHierarchy): void {\n const match = findRelatedFields(rootHierarchies, hierarchy);\n if (!match) {\n rootHierarchies.push(hierarchy);\n return;\n }\n\n const targetHierarchy = rootHierarchies[match.existing.index];\n const existingHierarchy = match.existing.hierarchy ?? buildParentHierarchy(targetHierarchy, match.existing.field);\n const insertHierarchy = buildParentHierarchy(hierarchy, match.matchingField);\n const mergedHierarchy = mergeHierarchies(existingHierarchy, insertHierarchy);\n mergedHierarchy.field.category = hierarchy.field.category;\n rootHierarchies[match.existing.index] = mergedHierarchy;\n}\n\nfunction createFieldPath(field: Field): Field[] {\n const path = [field];\n let currField = field;\n while (currField.parent) {\n currField = currField.parent;\n path.push(currField);\n }\n path.reverse();\n return path;\n}\n\n/** @internal */\nexport const FIELD_NAMES_SEPARATOR = \"$\";\n/**\n * Combines given field names in a way that allows them to be parsed back into a list of individual names using the [[parseCombinedFieldNames]] function.\n * @public\n */\nexport function combineFieldNames(fieldName: string, parentFieldName?: string) {\n return parentFieldName ? `${parentFieldName}${FIELD_NAMES_SEPARATOR}${fieldName}` : fieldName;\n}\n/**\n * Parses given combined field names string, constructed using [[combineFieldNames]], into a list of individual field names.\n * @public\n */\nexport function parseCombinedFieldNames(combinedName: string) {\n return combinedName ? combinedName.split(FIELD_NAMES_SEPARATOR) : [];\n}\n\ninterface NestedItemConversionResult {\n emptyNestedItem: boolean;\n convertedItem: Item;\n}\n\nfunction convertNestedContentItemToStructArrayItem(item: Readonly<Item>, field: Field, nextField: Field): NestedItemConversionResult {\n const value = item.values[field.name] ?? [];\n assert(Value.isNestedContent(value));\n if (value.length === 0) {\n return { emptyNestedItem: true, convertedItem: item };\n }\n\n const nextFieldValues: { raw: ValuesArray; display: DisplayValuesArray } = { raw: [], display: [] };\n value.forEach((ncv) => {\n const nextRawValue = ncv.values[nextField.name];\n const nextDisplayValue = ncv.displayValues[nextField.name];\n if (nextField.isNestedContentField()) {\n if (nextRawValue) {\n assert(Value.isNestedContent(nextRawValue));\n nextFieldValues.raw.push(...nextRawValue);\n }\n } else {\n nextFieldValues.raw.push(nextRawValue);\n nextFieldValues.display.push(nextDisplayValue);\n }\n });\n const convertedItem = new Item(\n item.primaryKeys,\n item.label,\n item.imageId, // eslint-disable-line deprecation/deprecation\n item.classInfo,\n { [nextField.name]: nextFieldValues.raw },\n { [nextField.name]: nextFieldValues.display },\n item.mergedFieldNames,\n item.extendedData,\n );\n return { emptyNestedItem: false, convertedItem };\n}\n\nfunction convertNestedContentFieldHierarchyToStructArrayHierarchy(fieldHierarchy: FieldHierarchy, parentFieldName: string | undefined) {\n const fieldName = fieldHierarchy.field.name;\n const convertedChildFieldHierarchies = fieldHierarchy.childFields.map((child) => {\n if (child.field.isNestedContentField()) {\n return convertNestedContentFieldHierarchyToStructArrayHierarchy(child, combineFieldNames(fieldName, parentFieldName));\n }\n return child;\n });\n const convertedFieldHierarchy: FieldHierarchy = {\n field: Object.assign(fieldHierarchy.field.clone(), {\n type: {\n valueFormat: PropertyValueFormat.Array,\n typeName: `${fieldHierarchy.field.type.typeName}[]`,\n memberType: {\n valueFormat: PropertyValueFormat.Struct,\n typeName: fieldHierarchy.field.type.typeName,\n members: convertedChildFieldHierarchies.map((member) => ({\n name: member.field.name,\n label: member.field.label,\n type: member.field.type,\n })),\n },\n } as TypeDescription,\n }),\n childFields: convertedChildFieldHierarchies,\n };\n return convertedFieldHierarchy;\n}\n\nfunction convertNestedContentValuesToStructArrayValuesRecursive(fieldHierarchy: FieldHierarchy, ncvs: ReadonlyArray<NestedContentValue>) {\n const result: { raw: ValuesArray; display: DisplayValuesArray; mergedFieldNames: string[] } = { raw: [], display: [], mergedFieldNames: [] };\n ncvs.forEach((ncv) => {\n const values: ValuesMap = { ...ncv.values };\n const displayValues: DisplayValuesMap = { ...ncv.displayValues };\n const mergedFieldNames: string[] = [...ncv.mergedFieldNames];\n fieldHierarchy.childFields.forEach((childFieldHierarchy) => {\n const childFieldName = childFieldHierarchy.field.name;\n if (-1 !== ncv.mergedFieldNames.indexOf(childFieldName)) {\n return;\n }\n if (childFieldHierarchy.field.isNestedContentField()) {\n const value = values[childFieldName];\n assert(Value.isNestedContent(value));\n const convertedValues = convertNestedContentValuesToStructArrayValuesRecursive(childFieldHierarchy, value);\n values[childFieldName] = convertedValues.raw;\n displayValues[childFieldName] = convertedValues.display;\n mergedFieldNames.push(...convertedValues.mergedFieldNames);\n }\n });\n result.raw.push(values);\n result.display.push(displayValues);\n result.mergedFieldNames.push(...mergedFieldNames);\n });\n return result;\n}\n\nfunction convertNestedContentFieldHierarchyItemToStructArrayItem(item: Readonly<Item>, fieldHierarchy: FieldHierarchy): NestedItemConversionResult {\n const fieldName = fieldHierarchy.field.name;\n const rawValue = item.values[fieldName];\n assert(Value.isNestedContent(rawValue));\n if (rawValue.length === 0) {\n return { emptyNestedItem: true, convertedItem: item };\n }\n\n const converted = convertNestedContentValuesToStructArrayValuesRecursive(fieldHierarchy, rawValue);\n const convertedItem = new Item(\n item.primaryKeys,\n item.label,\n item.imageId, // eslint-disable-line deprecation/deprecation\n item.classInfo,\n { [fieldName]: converted.raw },\n { [fieldName]: converted.display },\n converted.mergedFieldNames,\n item.extendedData,\n );\n return { emptyNestedItem: false, convertedItem };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Descriptor.d.ts","sourceRoot":"","sources":["../../../../src/presentation-common/content/Descriptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Descriptor.d.ts","sourceRoot":"","sources":["../../../../src/presentation-common/content/Descriptor.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
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
- *--------------------------------------------------------------------------------------------*/
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
5
  /** @packageDocumentation
6
6
  * @module Content
7
7
  */
@@ -18,10 +18,20 @@ export var SelectClassInfo;
18
18
  return {
19
19
  selectClassInfo: { id: json.selectClassInfo, ...classesMap[json.selectClassInfo] },
20
20
  isSelectPolymorphic: json.isSelectPolymorphic,
21
- ...(json.navigationPropertyClasses ? { navigationPropertyClasses: json.navigationPropertyClasses.map((item) => RelatedClassInfo.fromCompressedJSON(item, classesMap)) } : undefined),
22
- ...(json.relatedInstancePaths ? { relatedInstancePaths: json.relatedInstancePaths.map((rip) => rip.map((item) => RelatedClassInfo.fromCompressedJSON(item, classesMap))) } : undefined),
23
- ...(json.pathFromInputToSelectClass ? { pathFromInputToSelectClass: json.pathFromInputToSelectClass.map((item) => RelatedClassInfoWithOptionalRelationship.fromCompressedJSON(item, classesMap)) } : undefined),
24
- ...(json.relatedPropertyPaths ? { relatedPropertyPaths: json.relatedPropertyPaths.map((path) => path.map((item) => RelatedClassInfo.fromCompressedJSON(item, classesMap))) } : undefined),
21
+ ...(json.navigationPropertyClasses
22
+ ? { navigationPropertyClasses: json.navigationPropertyClasses.map((item) => RelatedClassInfo.fromCompressedJSON(item, classesMap)) }
23
+ : undefined),
24
+ ...(json.relatedInstancePaths
25
+ ? { relatedInstancePaths: json.relatedInstancePaths.map((rip) => rip.map((item) => RelatedClassInfo.fromCompressedJSON(item, classesMap))) }
26
+ : undefined),
27
+ ...(json.pathFromInputToSelectClass
28
+ ? {
29
+ pathFromInputToSelectClass: json.pathFromInputToSelectClass.map((item) => RelatedClassInfoWithOptionalRelationship.fromCompressedJSON(item, classesMap)),
30
+ }
31
+ : undefined),
32
+ ...(json.relatedPropertyPaths
33
+ ? { relatedPropertyPaths: json.relatedPropertyPaths.map((path) => path.map((item) => RelatedClassInfo.fromCompressedJSON(item, classesMap))) }
34
+ : undefined),
25
35
  };
26
36
  }
27
37
  SelectClassInfo.fromCompressedJSON = fromCompressedJSON;
@@ -32,10 +42,24 @@ export var SelectClassInfo;
32
42
  return {
33
43
  selectClassInfo: id,
34
44
  isSelectPolymorphic: selectClass.isSelectPolymorphic,
35
- ...(selectClass.relatedInstancePaths ? { relatedInstancePaths: selectClass.relatedInstancePaths.map((rip) => rip.map((item) => RelatedClassInfo.toCompressedJSON(item, classesMap))) } : undefined),
36
- ...(selectClass.navigationPropertyClasses ? { navigationPropertyClasses: selectClass.navigationPropertyClasses.map((propertyClass) => RelatedClassInfo.toCompressedJSON(propertyClass, classesMap)) } : undefined),
37
- ...(selectClass.pathFromInputToSelectClass ? { pathFromInputToSelectClass: selectClass.pathFromInputToSelectClass.map((item) => RelatedClassInfoWithOptionalRelationship.toCompressedJSON(item, classesMap)) } : undefined),
38
- ...(selectClass.relatedPropertyPaths ? { relatedPropertyPaths: selectClass.relatedPropertyPaths.map((path) => path.map((relatedClass) => RelatedClassInfo.toCompressedJSON(relatedClass, classesMap))) } : undefined),
45
+ ...(selectClass.relatedInstancePaths
46
+ ? { relatedInstancePaths: selectClass.relatedInstancePaths.map((rip) => rip.map((item) => RelatedClassInfo.toCompressedJSON(item, classesMap))) }
47
+ : undefined),
48
+ ...(selectClass.navigationPropertyClasses
49
+ ? {
50
+ navigationPropertyClasses: selectClass.navigationPropertyClasses.map((propertyClass) => RelatedClassInfo.toCompressedJSON(propertyClass, classesMap)),
51
+ }
52
+ : undefined),
53
+ ...(selectClass.pathFromInputToSelectClass
54
+ ? {
55
+ pathFromInputToSelectClass: selectClass.pathFromInputToSelectClass.map((item) => RelatedClassInfoWithOptionalRelationship.toCompressedJSON(item, classesMap)),
56
+ }
57
+ : undefined),
58
+ ...(selectClass.relatedPropertyPaths
59
+ ? {
60
+ relatedPropertyPaths: selectClass.relatedPropertyPaths.map((path) => path.map((relatedClass) => RelatedClassInfo.toCompressedJSON(relatedClass, classesMap))),
61
+ }
62
+ : undefined),
39
63
  };
40
64
  }
41
65
  SelectClassInfo.toCompressedJSON = toCompressedJSON;
@@ -137,8 +161,9 @@ export class Descriptor {
137
161
  }
138
162
  /** Deserialize [[Descriptor]] from JSON */
139
163
  static fromJSON(json) {
140
- if (!json)
164
+ if (!json) {
141
165
  return undefined;
166
+ }
142
167
  const { classesMap, ...leftOverJson } = json;
143
168
  const categories = CategoryDescription.listFromJSON(json.categories);
144
169
  const selectClasses = SelectClassInfo.listFromCompressedJSON(json.selectClasses, classesMap);
@@ -152,12 +177,15 @@ export class Descriptor {
152
177
  });
153
178
  }
154
179
  static getFieldsFromJSON(json, factory) {
155
- return json.map((fieldJson) => {
180
+ return json
181
+ .map((fieldJson) => {
156
182
  const field = factory(fieldJson);
157
- if (field)
183
+ if (field) {
158
184
  field.rebuildParentship();
185
+ }
159
186
  return field;
160
- }).filter((field) => !!field);
187
+ })
188
+ .filter((field) => !!field);
161
189
  }
162
190
  /**
163
191
  * Get field by its name
@@ -180,16 +208,23 @@ export class Descriptor {
180
208
  */
181
209
  createDescriptorOverrides() {
182
210
  const overrides = {};
183
- if (this.displayType)
211
+ if (this.displayType) {
184
212
  overrides.displayType = this.displayType;
185
- if (this.contentFlags !== 0)
213
+ }
214
+ if (this.contentFlags !== 0) {
186
215
  overrides.contentFlags = this.contentFlags;
187
- if (this.filterExpression || this.fieldsFilterExpression) // eslint-disable-line deprecation/deprecation
188
- overrides.fieldsFilterExpression = this.fieldsFilterExpression ?? this.filterExpression; // eslint-disable-line deprecation/deprecation
189
- if (this.instanceFilter)
216
+ }
217
+ // eslint-disable-next-line deprecation/deprecation
218
+ if (this.filterExpression || this.fieldsFilterExpression) {
219
+ // eslint-disable-next-line deprecation/deprecation
220
+ overrides.fieldsFilterExpression = this.fieldsFilterExpression ?? this.filterExpression;
221
+ }
222
+ if (this.instanceFilter) {
190
223
  overrides.instanceFilter = this.instanceFilter;
191
- if (this.sortingField)
224
+ }
225
+ if (this.sortingField) {
192
226
  overrides.sorting = { field: this.sortingField.getFieldDescriptor(), direction: this.sortDirection ?? SortDirection.Ascending };
227
+ }
193
228
  return overrides;
194
229
  }
195
230
  }