@itwin/grouping-mapping-widget 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/lib/cjs/grouping-mapping-widget.d.ts +3 -0
  2. package/lib/cjs/grouping-mapping-widget.js +7 -1
  3. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  4. package/lib/cjs/test/GroupingMappingCustomUI.test.js +2 -2
  5. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  6. package/lib/cjs/widget/components/CalculatedPropertyAction.js +7 -119
  7. package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
  8. package/lib/cjs/widget/components/CalculatedPropertyAction.scss +1 -12
  9. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.d.ts +12 -0
  10. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js +154 -0
  11. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -0
  12. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.scss +27 -0
  13. package/lib/cjs/widget/components/ConfirmMappingsImport.js +1 -1
  14. package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
  15. package/lib/cjs/widget/components/GroupAction.js +50 -66
  16. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  17. package/lib/cjs/widget/components/GroupAction.scss +0 -18
  18. package/lib/cjs/widget/components/GroupColorLegend.d.ts +10 -0
  19. package/lib/cjs/widget/components/GroupColorLegend.js +20 -0
  20. package/lib/cjs/widget/components/GroupColorLegend.js.map +1 -0
  21. package/lib/cjs/widget/components/GroupColorLegend.scss +9 -0
  22. package/lib/cjs/widget/components/GroupColorToggle.d.ts +9 -0
  23. package/lib/cjs/widget/components/GroupColorToggle.js +69 -0
  24. package/lib/cjs/widget/components/GroupColorToggle.js.map +1 -0
  25. package/lib/cjs/widget/components/GroupDetails.d.ts +13 -0
  26. package/lib/cjs/widget/components/GroupDetails.js +34 -0
  27. package/lib/cjs/widget/components/GroupDetails.js.map +1 -0
  28. package/lib/cjs/widget/components/GroupDetailsActionPanel.d.ts +8 -0
  29. package/lib/cjs/widget/components/GroupDetailsActionPanel.js +19 -0
  30. package/lib/cjs/widget/components/GroupDetailsActionPanel.js.map +1 -0
  31. package/lib/cjs/widget/components/GroupDetailsStep.d.ts +13 -0
  32. package/lib/cjs/widget/components/GroupDetailsStep.js +25 -0
  33. package/lib/cjs/widget/components/GroupDetailsStep.js.map +1 -0
  34. package/lib/cjs/widget/components/GroupDetailsStep.scss +11 -0
  35. package/lib/cjs/widget/components/GroupItem.d.ts +12 -0
  36. package/lib/cjs/widget/components/GroupItem.js +19 -0
  37. package/lib/cjs/widget/components/GroupItem.js.map +1 -0
  38. package/lib/cjs/widget/components/GroupMenuActions.d.ts +13 -0
  39. package/lib/cjs/widget/components/GroupMenuActions.js +68 -0
  40. package/lib/cjs/widget/components/GroupMenuActions.js.map +1 -0
  41. package/lib/cjs/widget/components/GroupMenuActions.scss +13 -0
  42. package/lib/cjs/widget/components/Grouping.d.ts +9 -5
  43. package/lib/cjs/widget/components/Grouping.js +15 -144
  44. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  45. package/lib/cjs/widget/components/Grouping.scss +0 -16
  46. package/lib/cjs/widget/components/GroupingMapping.js +4 -6
  47. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  48. package/lib/cjs/widget/components/GroupingMappingContent.js +1 -1
  49. package/lib/cjs/widget/components/GroupingMappingContent.js.map +1 -1
  50. package/lib/cjs/widget/components/GroupingMappingContext.js +1 -1
  51. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
  52. package/lib/cjs/widget/components/GroupingMappingHeader.d.ts +1 -2
  53. package/lib/cjs/widget/components/GroupingMappingHeader.js +9 -2
  54. package/lib/cjs/widget/components/GroupingMappingHeader.js.map +1 -1
  55. package/lib/cjs/widget/components/GroupingMappingRouter.js +20 -21
  56. package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -1
  57. package/lib/cjs/widget/components/GroupsAddButton.d.ts +3 -2
  58. package/lib/cjs/widget/components/GroupsAddButton.js +4 -3
  59. package/lib/cjs/widget/components/GroupsAddButton.js.map +1 -1
  60. package/lib/cjs/widget/components/GroupsAddButton.scss +2 -0
  61. package/lib/cjs/widget/components/GroupsShowHideButtons.d.ts +11 -0
  62. package/lib/cjs/widget/components/GroupsShowHideButtons.js +45 -0
  63. package/lib/cjs/widget/components/GroupsShowHideButtons.js.map +1 -0
  64. package/lib/cjs/widget/components/GroupsVisualization.d.ts +9 -0
  65. package/lib/cjs/widget/components/GroupsVisualization.js +137 -0
  66. package/lib/cjs/widget/components/GroupsVisualization.js.map +1 -0
  67. package/lib/cjs/widget/components/GroupsVisualization.scss +12 -0
  68. package/lib/cjs/widget/components/GroupsVisualizationActions.d.ts +10 -0
  69. package/lib/cjs/widget/components/GroupsVisualizationActions.js +27 -0
  70. package/lib/cjs/widget/components/GroupsVisualizationActions.js.map +1 -0
  71. package/lib/cjs/widget/components/GroupsVisualizationActions.scss +9 -0
  72. package/lib/cjs/widget/components/Mapping.js +2 -3
  73. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  74. package/lib/cjs/widget/components/MappingAction.js +1 -1
  75. package/lib/cjs/widget/components/MappingAction.js.map +1 -1
  76. package/lib/cjs/widget/components/MappingImportWizardModal.js +1 -1
  77. package/lib/cjs/widget/components/MappingImportWizardModal.js.map +1 -1
  78. package/lib/cjs/widget/components/PropertyAction.d.ts +8 -0
  79. package/lib/cjs/widget/components/PropertyAction.js +100 -0
  80. package/lib/cjs/widget/components/PropertyAction.js.map +1 -0
  81. package/lib/cjs/widget/components/PropertyAction.scss +9 -0
  82. package/lib/cjs/widget/components/PropertyMenu.d.ts +1 -2
  83. package/lib/cjs/widget/components/PropertyMenu.js +6 -49
  84. package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
  85. package/lib/cjs/widget/components/PropertyMenu.scss +2 -17
  86. package/lib/cjs/widget/components/PropertyMenuWithVisualization.d.ts +8 -0
  87. package/lib/cjs/widget/components/PropertyMenuWithVisualization.js +45 -0
  88. package/lib/cjs/widget/components/PropertyMenuWithVisualization.js.map +1 -0
  89. package/lib/cjs/widget/components/PropertyMenuWithVisualization.scss +16 -0
  90. package/lib/cjs/widget/components/QueryBuilder.d.ts +1 -1
  91. package/lib/cjs/widget/components/QueryBuilder.js +4 -4
  92. package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
  93. package/lib/cjs/widget/components/QueryBuilderActionPanel.d.ts +6 -0
  94. package/lib/cjs/widget/components/QueryBuilderActionPanel.js +17 -0
  95. package/lib/cjs/widget/components/QueryBuilderActionPanel.js.map +1 -0
  96. package/lib/cjs/widget/components/QueryBuilderCustomUI.d.ts +13 -0
  97. package/lib/cjs/widget/components/QueryBuilderCustomUI.js +28 -0
  98. package/lib/cjs/widget/components/QueryBuilderCustomUI.js.map +1 -0
  99. package/lib/cjs/widget/components/QueryBuilderStep.d.ts +16 -0
  100. package/lib/cjs/widget/components/QueryBuilderStep.js +30 -0
  101. package/lib/cjs/widget/components/QueryBuilderStep.js.map +1 -0
  102. package/lib/cjs/widget/components/QueryBuilderStep.scss +18 -0
  103. package/lib/cjs/widget/components/SelectMappings.js +1 -1
  104. package/lib/cjs/widget/components/SelectMappings.js.map +1 -1
  105. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.d.ts +16 -0
  106. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.js +62 -0
  107. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.js.map +1 -0
  108. package/lib/cjs/widget/components/StatusIcon.d.ts +15 -0
  109. package/lib/cjs/widget/components/StatusIcon.js +26 -0
  110. package/lib/cjs/widget/components/StatusIcon.js.map +1 -0
  111. package/lib/cjs/widget/components/StatusIcon.scss +26 -0
  112. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.d.ts +2 -2
  113. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js +1 -1
  114. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  115. package/lib/cjs/widget/components/context/PropertyGridWrapperContext.d.ts +1 -3
  116. package/lib/cjs/widget/components/context/PropertyGridWrapperContext.js +0 -2
  117. package/lib/cjs/widget/components/context/PropertyGridWrapperContext.js.map +1 -1
  118. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +1 -1
  119. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js +51 -32
  120. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  121. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.scss +25 -17
  122. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.d.ts +4 -0
  123. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  124. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -1
  125. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js +3 -3
  126. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  127. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.scss +1 -0
  128. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js +1 -1
  129. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  130. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.scss +1 -0
  131. package/lib/cjs/widget/components/groupsHelpers.d.ts +1 -1
  132. package/lib/cjs/widget/components/groupsHelpers.js +11 -14
  133. package/lib/cjs/widget/components/groupsHelpers.js.map +1 -1
  134. package/lib/cjs/widget/components/utils.d.ts +1 -1
  135. package/lib/cjs/widget/components/utils.js.map +1 -1
  136. package/lib/esm/grouping-mapping-widget.d.ts +3 -0
  137. package/lib/esm/grouping-mapping-widget.js +3 -0
  138. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  139. package/lib/esm/test/GroupingMappingCustomUI.test.js +2 -2
  140. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  141. package/lib/esm/widget/components/CalculatedPropertyAction.js +9 -121
  142. package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
  143. package/lib/esm/widget/components/CalculatedPropertyAction.scss +1 -12
  144. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.d.ts +12 -0
  145. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js +128 -0
  146. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -0
  147. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.scss +27 -0
  148. package/lib/esm/widget/components/ConfirmMappingsImport.js +1 -1
  149. package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
  150. package/lib/esm/widget/components/GroupAction.js +53 -69
  151. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  152. package/lib/esm/widget/components/GroupAction.scss +0 -18
  153. package/lib/esm/widget/components/GroupColorLegend.d.ts +10 -0
  154. package/lib/esm/widget/components/GroupColorLegend.js +13 -0
  155. package/lib/esm/widget/components/GroupColorLegend.js.map +1 -0
  156. package/lib/esm/widget/components/GroupColorLegend.scss +9 -0
  157. package/lib/esm/widget/components/GroupColorToggle.d.ts +9 -0
  158. package/lib/esm/widget/components/GroupColorToggle.js +46 -0
  159. package/lib/esm/widget/components/GroupColorToggle.js.map +1 -0
  160. package/lib/esm/widget/components/GroupDetails.d.ts +13 -0
  161. package/lib/esm/widget/components/GroupDetails.js +27 -0
  162. package/lib/esm/widget/components/GroupDetails.js.map +1 -0
  163. package/lib/esm/widget/components/GroupDetailsActionPanel.d.ts +8 -0
  164. package/lib/esm/widget/components/GroupDetailsActionPanel.js +12 -0
  165. package/lib/esm/widget/components/GroupDetailsActionPanel.js.map +1 -0
  166. package/lib/esm/widget/components/GroupDetailsStep.d.ts +13 -0
  167. package/lib/esm/widget/components/GroupDetailsStep.js +18 -0
  168. package/lib/esm/widget/components/GroupDetailsStep.js.map +1 -0
  169. package/lib/esm/widget/components/GroupDetailsStep.scss +11 -0
  170. package/lib/esm/widget/components/GroupItem.d.ts +12 -0
  171. package/lib/esm/widget/components/GroupItem.js +12 -0
  172. package/lib/esm/widget/components/GroupItem.js.map +1 -0
  173. package/lib/esm/widget/components/GroupMenuActions.d.ts +13 -0
  174. package/lib/esm/widget/components/GroupMenuActions.js +45 -0
  175. package/lib/esm/widget/components/GroupMenuActions.js.map +1 -0
  176. package/lib/esm/widget/components/GroupMenuActions.scss +13 -0
  177. package/lib/esm/widget/components/Grouping.d.ts +9 -5
  178. package/lib/esm/widget/components/Grouping.js +18 -147
  179. package/lib/esm/widget/components/Grouping.js.map +1 -1
  180. package/lib/esm/widget/components/Grouping.scss +0 -16
  181. package/lib/esm/widget/components/GroupingMapping.js +4 -6
  182. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  183. package/lib/esm/widget/components/GroupingMappingContent.js +1 -1
  184. package/lib/esm/widget/components/GroupingMappingContent.js.map +1 -1
  185. package/lib/esm/widget/components/GroupingMappingContext.js +1 -1
  186. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
  187. package/lib/esm/widget/components/GroupingMappingHeader.d.ts +1 -2
  188. package/lib/esm/widget/components/GroupingMappingHeader.js +9 -2
  189. package/lib/esm/widget/components/GroupingMappingHeader.js.map +1 -1
  190. package/lib/esm/widget/components/GroupingMappingRouter.js +20 -21
  191. package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -1
  192. package/lib/esm/widget/components/GroupsAddButton.d.ts +3 -2
  193. package/lib/esm/widget/components/GroupsAddButton.js +5 -4
  194. package/lib/esm/widget/components/GroupsAddButton.js.map +1 -1
  195. package/lib/esm/widget/components/GroupsAddButton.scss +2 -0
  196. package/lib/esm/widget/components/GroupsShowHideButtons.d.ts +11 -0
  197. package/lib/esm/widget/components/GroupsShowHideButtons.js +22 -0
  198. package/lib/esm/widget/components/GroupsShowHideButtons.js.map +1 -0
  199. package/lib/esm/widget/components/GroupsVisualization.d.ts +9 -0
  200. package/lib/esm/widget/components/GroupsVisualization.js +114 -0
  201. package/lib/esm/widget/components/GroupsVisualization.js.map +1 -0
  202. package/lib/esm/widget/components/GroupsVisualization.scss +12 -0
  203. package/lib/esm/widget/components/GroupsVisualizationActions.d.ts +10 -0
  204. package/lib/esm/widget/components/GroupsVisualizationActions.js +20 -0
  205. package/lib/esm/widget/components/GroupsVisualizationActions.js.map +1 -0
  206. package/lib/esm/widget/components/GroupsVisualizationActions.scss +9 -0
  207. package/lib/esm/widget/components/Mapping.js +2 -3
  208. package/lib/esm/widget/components/Mapping.js.map +1 -1
  209. package/lib/esm/widget/components/MappingAction.js +1 -1
  210. package/lib/esm/widget/components/MappingAction.js.map +1 -1
  211. package/lib/esm/widget/components/MappingImportWizardModal.js +1 -1
  212. package/lib/esm/widget/components/MappingImportWizardModal.js.map +1 -1
  213. package/lib/esm/widget/components/PropertyAction.d.ts +8 -0
  214. package/lib/esm/widget/components/PropertyAction.js +77 -0
  215. package/lib/esm/widget/components/PropertyAction.js.map +1 -0
  216. package/lib/esm/widget/components/PropertyAction.scss +9 -0
  217. package/lib/esm/widget/components/PropertyMenu.d.ts +1 -2
  218. package/lib/esm/widget/components/PropertyMenu.js +7 -50
  219. package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
  220. package/lib/esm/widget/components/PropertyMenu.scss +2 -17
  221. package/lib/esm/widget/components/PropertyMenuWithVisualization.d.ts +8 -0
  222. package/lib/esm/widget/components/PropertyMenuWithVisualization.js +22 -0
  223. package/lib/esm/widget/components/PropertyMenuWithVisualization.js.map +1 -0
  224. package/lib/esm/widget/components/PropertyMenuWithVisualization.scss +16 -0
  225. package/lib/esm/widget/components/QueryBuilder.d.ts +1 -1
  226. package/lib/esm/widget/components/QueryBuilder.js +4 -4
  227. package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
  228. package/lib/esm/widget/components/QueryBuilderActionPanel.d.ts +6 -0
  229. package/lib/esm/widget/components/QueryBuilderActionPanel.js +10 -0
  230. package/lib/esm/widget/components/QueryBuilderActionPanel.js.map +1 -0
  231. package/lib/esm/widget/components/QueryBuilderCustomUI.d.ts +13 -0
  232. package/lib/esm/widget/components/QueryBuilderCustomUI.js +21 -0
  233. package/lib/esm/widget/components/QueryBuilderCustomUI.js.map +1 -0
  234. package/lib/esm/widget/components/QueryBuilderStep.d.ts +16 -0
  235. package/lib/esm/widget/components/QueryBuilderStep.js +23 -0
  236. package/lib/esm/widget/components/QueryBuilderStep.js.map +1 -0
  237. package/lib/esm/widget/components/QueryBuilderStep.scss +18 -0
  238. package/lib/esm/widget/components/SelectMappings.js +1 -1
  239. package/lib/esm/widget/components/SelectMappings.js.map +1 -1
  240. package/lib/esm/widget/components/SharedCalculatedPropertyForms.d.ts +16 -0
  241. package/lib/esm/widget/components/SharedCalculatedPropertyForms.js +39 -0
  242. package/lib/esm/widget/components/SharedCalculatedPropertyForms.js.map +1 -0
  243. package/lib/esm/widget/components/StatusIcon.d.ts +15 -0
  244. package/lib/esm/widget/components/StatusIcon.js +19 -0
  245. package/lib/esm/widget/components/StatusIcon.js.map +1 -0
  246. package/lib/esm/widget/components/StatusIcon.scss +26 -0
  247. package/lib/esm/widget/components/context/GroupHilitedElementsContext.d.ts +2 -2
  248. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js +1 -1
  249. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  250. package/lib/esm/widget/components/context/PropertyGridWrapperContext.d.ts +1 -3
  251. package/lib/esm/widget/components/context/PropertyGridWrapperContext.js +0 -2
  252. package/lib/esm/widget/components/context/PropertyGridWrapperContext.js.map +1 -1
  253. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +1 -1
  254. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js +53 -34
  255. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  256. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.scss +25 -17
  257. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.d.ts +4 -0
  258. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  259. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -1
  260. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js +4 -4
  261. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  262. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.scss +1 -0
  263. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js +2 -2
  264. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  265. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.scss +1 -0
  266. package/lib/esm/widget/components/groupsHelpers.d.ts +1 -1
  267. package/lib/esm/widget/components/groupsHelpers.js +11 -14
  268. package/lib/esm/widget/components/groupsHelpers.js.map +1 -1
  269. package/lib/esm/widget/components/utils.d.ts +1 -1
  270. package/lib/esm/widget/components/utils.js.map +1 -1
  271. package/package.json +1 -1
  272. package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.d.ts +0 -32
  273. package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.js +0 -91
  274. package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.js.map +0 -1
  275. package/lib/cjs/widget/components/property-grid/PrimitivePropertyRenderer.d.ts +0 -26
  276. package/lib/cjs/widget/components/property-grid/PrimitivePropertyRenderer.js +0 -62
  277. package/lib/cjs/widget/components/property-grid/PrimitivePropertyRenderer.js.map +0 -1
  278. package/lib/cjs/widget/components/property-grid/PropertyGrid.d.ts +0 -67
  279. package/lib/cjs/widget/components/property-grid/PropertyGrid.js +0 -198
  280. package/lib/cjs/widget/components/property-grid/PropertyGrid.js.map +0 -1
  281. package/lib/cjs/widget/components/property-grid/PropertyGrid.scss +0 -71
  282. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.d.ts +0 -23
  283. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +0 -77
  284. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +0 -1
  285. package/lib/cjs/widget/components/property-grid/PropertyList.d.ts +0 -69
  286. package/lib/cjs/widget/components/property-grid/PropertyList.js +0 -87
  287. package/lib/cjs/widget/components/property-grid/PropertyList.js.map +0 -1
  288. package/lib/cjs/widget/components/property-grid/PropertyRender.d.ts +0 -92
  289. package/lib/cjs/widget/components/property-grid/PropertyRender.js +0 -109
  290. package/lib/cjs/widget/components/property-grid/PropertyRender.js.map +0 -1
  291. package/lib/cjs/widget/components/property-grid/PropertyView.d.ts +0 -22
  292. package/lib/cjs/widget/components/property-grid/PropertyView.js +0 -232
  293. package/lib/cjs/widget/components/property-grid/PropertyView.js.map +0 -1
  294. package/lib/cjs/widget/components/property-grid/PropertyView.scss +0 -77
  295. package/lib/cjs/widget/components/property-grid/countMatchesInString.d.ts +0 -8
  296. package/lib/cjs/widget/components/property-grid/countMatchesInString.js +0 -32
  297. package/lib/cjs/widget/components/property-grid/countMatchesInString.js.map +0 -1
  298. package/lib/cjs/widget/components/property-grid/createNewDisplayValue.d.ts +0 -10
  299. package/lib/cjs/widget/components/property-grid/createNewDisplayValue.js +0 -65
  300. package/lib/cjs/widget/components/property-grid/createNewDisplayValue.js.map +0 -1
  301. package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.d.ts +0 -32
  302. package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.js +0 -68
  303. package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.js.map +0 -1
  304. package/lib/esm/widget/components/property-grid/PrimitivePropertyRenderer.d.ts +0 -26
  305. package/lib/esm/widget/components/property-grid/PrimitivePropertyRenderer.js +0 -39
  306. package/lib/esm/widget/components/property-grid/PrimitivePropertyRenderer.js.map +0 -1
  307. package/lib/esm/widget/components/property-grid/PropertyGrid.d.ts +0 -67
  308. package/lib/esm/widget/components/property-grid/PropertyGrid.js +0 -172
  309. package/lib/esm/widget/components/property-grid/PropertyGrid.js.map +0 -1
  310. package/lib/esm/widget/components/property-grid/PropertyGrid.scss +0 -71
  311. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.d.ts +0 -23
  312. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +0 -54
  313. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +0 -1
  314. package/lib/esm/widget/components/property-grid/PropertyList.d.ts +0 -69
  315. package/lib/esm/widget/components/property-grid/PropertyList.js +0 -60
  316. package/lib/esm/widget/components/property-grid/PropertyList.js.map +0 -1
  317. package/lib/esm/widget/components/property-grid/PropertyRender.d.ts +0 -92
  318. package/lib/esm/widget/components/property-grid/PropertyRender.js +0 -86
  319. package/lib/esm/widget/components/property-grid/PropertyRender.js.map +0 -1
  320. package/lib/esm/widget/components/property-grid/PropertyView.d.ts +0 -22
  321. package/lib/esm/widget/components/property-grid/PropertyView.js +0 -209
  322. package/lib/esm/widget/components/property-grid/PropertyView.js.map +0 -1
  323. package/lib/esm/widget/components/property-grid/PropertyView.scss +0 -77
  324. package/lib/esm/widget/components/property-grid/countMatchesInString.d.ts +0 -8
  325. package/lib/esm/widget/components/property-grid/countMatchesInString.js +0 -28
  326. package/lib/esm/widget/components/property-grid/countMatchesInString.js.map +0 -1
  327. package/lib/esm/widget/components/property-grid/createNewDisplayValue.d.ts +0 -10
  328. package/lib/esm/widget/components/property-grid/createNewDisplayValue.js +0 -42
  329. package/lib/esm/widget/components/property-grid/createNewDisplayValue.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SearchGroupingCustomUI.js","sourceRoot":"","sources":["../../../../../src/widget/components/customUI/SearchGroupingCustomUI.tsx"],"names":[],"mappings":";;;;;;AAAA;;;+FAG+F;AAC/F,kDAA0B;AAC1B,wDAAqE;AAErE,oCAA0C;AAC1C,yCAAuC;AAEhC,MAAM,sBAAsB,GAAG,CAAC,EACrC,WAAW,EACX,UAAU,EACV,SAAS,GACa,EAAE,EAAE;IAC1B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzD,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CACvB,KAAa,EACb,KAAa,EACb,WAAqB,EACrB,EAAE,CACF,iBAAiB,CAAC,KAAK,CAAC;QACxB,CAAC,KAAK,KAAK,CAAC,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,MAAM,mBAAmB,GAAG,CAAC,WAAqB,EAAE,EAAE;QACpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,WAAW,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO;SACR;QAED,IAAI,oBAAoB,GAAG,sEAAsE,CAAC;QAClG,oBAAoB,IAAI,8IAA8I,CAAC;QACvK,oBAAoB,IAAI,yEAAyE,CAAC;QAClG,oBAAoB,IAAI,SAAS,CAAC;QAClC,oBAAoB,IAAI,KAAK,WAAW;aACrC,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,GAAG,KAAK,KAAK,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC;gBAC3C,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IACN,wBAAwB,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KACxE,IAAI,CACP;aACA,IAAI,CAAC,GAAG,CAAC,SAAS,WAAW;aAC7B,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,GAAG,KAAK,KAAK,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC;gBAC3C,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IACN,wBAAwB,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KACxE,IAAI,CACP;aACA,IAAI,CAAC,GAAG,CAAC,WAAW,WAAW;aAC/B,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,GAAG,KAAK,KAAK,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC;gBAC3C,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IACN,yBAAyB,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KACzE,IAAI,CACP;aACA,IAAI,CAAC,GAAG,CAAC,SAAS,WAAW;aAC7B,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,GAAG,KAAK,KAAK,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC;gBAC3C,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IACN,yBAAyB,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KACzE,IAAI,CACP;aACA,IAAI,CAAC,GAAG,CAAC,UAAU,WAAW;aAC9B,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,GAAG,KAAK,KAAK,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC;gBAC3C,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IACN,oBAAoB,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KACpE,IAAI,CACP;aACA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAChB,iBAAiB;QACjB,oBAAoB,IAAI,SAAS,WAAW;aACzC,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,GAAG,KAAK,KAAK,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC;gBAC3C,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IACN,wBAAwB,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KACxE,IAAI,CACP;aACA,IAAI,CAAC,GAAG,CAAC,SAAS,WAAW;aAC7B,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,GAAG,KAAK,KAAK,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC;gBAC3C,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IACN,wBAAwB,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KACxE,IAAI,CACP;aACA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAElB,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO,CACL,uCAAK,SAAS,EAAC,iBAAiB;QAC9B,8BAAC,oBAAI,kHAGE;QACP,8BAAC,+BAAe,IACd,KAAK,EAAC,gBAAgB,EACtB,QAAQ,QACR,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACvD,QAAQ,EAAE,UAAU,EACpB,WAAW,EAAE,kBAAkB,GAC/B;QACF,uCAAK,SAAS,EAAC,oBAAoB;YAChC,UAAU,IAAI,8BAAC,sBAAc,OAAG;YACjC,8BAAC,sBAAM,IACL,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,GAAG,EAAE,CACZ,mBAAmB,CACjB,WAAW;oBACT,CAAC,CAAC,WAAW;yBACV,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;yBAC7B,IAAI,EAAE;yBACN,KAAK,CAAC,GAAG,CAAC;oBACb,CAAC,CAAC,EAAE,CACP,YAII;YACT,8BAAC,sBAAM,IACL,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,WAAW,CAAC,EAAE,CAAC,CAAC;oBAChB,cAAc,CAAC,EAAE,CAAC,CAAC;oBACnB,IAAI,SAAS,EAAE;wBACb,MAAM,SAAS,EAAE,CAAC;qBACnB;gBACH,CAAC,YAGM,CACL,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AA9JW,QAAA,sBAAsB,0BA8JjC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport { Button, LabeledTextarea, Text } from \"@itwin/itwinui-react\";\nimport type { GroupingCustomUIProps } from \"./GroupingMappingCustomUI\";\nimport { LoadingSpinner } from \"../utils\";\nimport \"./SearchGroupingCustomUI.scss\";\n\nexport const SearchGroupingCustomUI = ({\n updateQuery,\n isUpdating,\n resetView,\n}: GroupingCustomUIProps) => {\n const [searchInput, setSearchInput] = React.useState(\"\");\n const isWrappedInQuotes = (text: string) => {\n return text.startsWith(`\"`) && text.endsWith(`\"`);\n };\n\n const needsAndOperator = (\n token: string,\n index: number,\n searchQuery: string[],\n ) =>\n isWrappedInQuotes(token) ||\n (index === 1 && isWrappedInQuotes(searchQuery[0]));\n\n const generateSearchQuery = (searchQuery: string[]) => {\n if (searchQuery.length === 0) {\n updateQuery(\"\");\n return;\n }\n\n let generatedSearchQuery = `SELECT be.ECInstanceId, be.ECClassId FROM bis.geometricelement3d be `;\n generatedSearchQuery += `LEFT JOIN bis.SpatialCategory cat ON be.Category.Id = cat.ECInstanceID LEFT JOIN ecdbmeta.ECClassDef ecc ON be.ECClassId = ecc.ECInstanceId `;\n generatedSearchQuery += `LEFT JOIN bis.PhysicalType pt ON be.TypeDefinition.Id = pt.ECInstanceID`;\n generatedSearchQuery += ` WHERE `;\n generatedSearchQuery += `((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } be.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } be.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) OR ((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } cat.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } cat.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } ecc.name LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})`;\n // Physical Types\n generatedSearchQuery += ` OR ((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } pt.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } pt.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) `;\n\n updateQuery(generatedSearchQuery);\n };\n\n return (\n <div className='gmw-search-form'>\n <Text>\n Generate a query by keywords. Keywords wrapped in double quotes will be\n considered a required criteria.\n </Text>\n <LabeledTextarea\n label='Query Keywords'\n required\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n disabled={isUpdating}\n placeholder={`E.g. \"red\" chair`}\n />\n <div className='gmw-search-actions'>\n {isUpdating && <LoadingSpinner />}\n <Button\n disabled={isUpdating}\n onClick={() =>\n generateSearchQuery(\n searchInput\n ? searchInput\n .replace(/(\\r\\n|\\n|\\r)/gm, \"\")\n .trim()\n .split(\" \")\n : [],\n )\n }\n >\n Apply\n </Button>\n <Button\n disabled={isUpdating}\n onClick={async () => {\n updateQuery(\"\");\n setSearchInput(\"\");\n if (resetView) {\n await resetView();\n }\n }}\n >\n Clear\n </Button>\n </div>\n </div>\n );\n};\n\n"]}
1
+ {"version":3,"file":"SearchGroupingCustomUI.js","sourceRoot":"","sources":["../../../../../src/widget/components/customUI/SearchGroupingCustomUI.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport { Alert, Button, LabeledTextarea } from \"@itwin/itwinui-react\";\nimport type { GroupingCustomUIProps } from \"./GroupingMappingCustomUI\";\nimport { LoadingSpinner } from \"../utils\";\nimport \"./SearchGroupingCustomUI.scss\";\n\nexport const SearchGroupingCustomUI = ({\n updateQuery,\n isUpdating,\n resetView,\n}: GroupingCustomUIProps) => {\n const [searchInput, setSearchInput] = React.useState(\"\");\n const isWrappedInQuotes = (text: string) => {\n return text.startsWith(`\"`) && text.endsWith(`\"`);\n };\n\n const needsAndOperator = (\n token: string,\n index: number,\n searchQuery: string[],\n ) =>\n isWrappedInQuotes(token) ||\n (index === 1 && isWrappedInQuotes(searchQuery[0]));\n\n const generateSearchQuery = (searchQuery: string[]) => {\n if (searchQuery.length === 0) {\n updateQuery(\"\");\n return;\n }\n\n let generatedSearchQuery = `SELECT be.ECInstanceId, be.ECClassId FROM bis.geometricelement3d be `;\n generatedSearchQuery += `LEFT JOIN bis.SpatialCategory cat ON be.Category.Id = cat.ECInstanceID LEFT JOIN ecdbmeta.ECClassDef ecc ON be.ECClassId = ecc.ECInstanceId `;\n generatedSearchQuery += `LEFT JOIN bis.PhysicalType pt ON be.TypeDefinition.Id = pt.ECInstanceID`;\n generatedSearchQuery += ` WHERE `;\n generatedSearchQuery += `((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } be.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } be.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) OR ((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } cat.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } cat.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } ecc.name LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})`;\n // Physical Types\n generatedSearchQuery += ` OR ((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } pt.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } pt.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) `;\n\n updateQuery(generatedSearchQuery);\n };\n\n return (\n <div className='gmw-search-form'>\n <Alert type='informational'>\n Generate a query by keywords. Keywords wrapped in double quotes will be\n considered a required criteria.\n </Alert>\n <LabeledTextarea\n label='Query Keywords'\n required\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n disabled={isUpdating}\n placeholder={`E.g. \"red\" chair`}\n />\n <div className='gmw-search-actions'>\n {isUpdating && <LoadingSpinner />}\n <Button\n disabled={isUpdating}\n onClick={() =>\n generateSearchQuery(\n searchInput\n ? searchInput\n .replace(/(\\r\\n|\\n|\\r)/gm, \"\")\n .trim()\n .split(\" \")\n : [],\n )\n }\n >\n Apply\n </Button>\n <Button\n disabled={isUpdating}\n onClick={async () => {\n updateQuery(\"\");\n setSearchInput(\"\");\n if (resetView) {\n await resetView();\n }\n }}\n >\n Clear\n </Button>\n </div>\n </div>\n );\n};\n\n"]}
@@ -8,6 +8,7 @@
8
8
  display: flex;
9
9
  flex-direction: column;
10
10
  gap: $iui-baseline;
11
+ overflow: auto;
11
12
  margin-top: $iui-baseline;
12
13
  > .gmw-search-actions {
13
14
  display: flex;
@@ -5,6 +5,6 @@ export declare const getGroupColor: (index: number) => string;
5
5
  export declare const getHiliteIdsFromGroups: (iModelConnection: IModelConnection, groups: Group[], hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>) => Promise<string[]>;
6
6
  export declare const hideGroups: (iModelConnection: IModelConnection, viewGroups: Group[], hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>) => Promise<void>;
7
7
  export declare const hideGroup: (iModelConnection: IModelConnection, viewGroup: Group, hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>) => Promise<void>;
8
- export declare const visualizeGroupColors: (iModelConnection: IModelConnection, groups: Group[], viewGroups: Group[], hiddenGroupsIds: string[], hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>, doEmphasizeElements?: boolean) => Promise<void>;
8
+ export declare const visualizeGroupColors: (iModelConnection: IModelConnection, groups: Group[], hiddenGroupsIds: Set<string>, hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>, doEmphasizeElements?: boolean) => Promise<void>;
9
9
  export declare const getHiliteIdsAndKeysetFromGroup: (iModelConnection: IModelConnection, group: Group, hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>) => Promise<QueryCacheItem>;
10
10
  //# sourceMappingURL=groupsHelpers.d.ts.map
@@ -45,21 +45,18 @@ const hideGroup = async (iModelConnection, viewGroup, hilitedElementsQueryCache)
45
45
  viewerUtils_1.hideElements(result.ids);
46
46
  };
47
47
  exports.hideGroup = hideGroup;
48
- const visualizeGroupColors = async (iModelConnection, groups, viewGroups, hiddenGroupsIds, hilitedElementsQueryCache, doEmphasizeElements = true) => {
48
+ const processGroupVisualization = async (iModelConnection, group, hiddenGroupsIds, hilitedElementsQueryCache, doEmphasizeElements, groupColor) => {
49
+ const result = await exports.getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);
50
+ const hilitedIds = result.ids;
51
+ viewerUtils_1.overrideElements(hilitedIds, groupColor, core_common_1.FeatureOverrideType.ColorAndAlpha);
52
+ doEmphasizeElements && viewerUtils_1.emphasizeElements(hilitedIds, undefined);
53
+ return hiddenGroupsIds.has(group.id) ? [] : hilitedIds;
54
+ };
55
+ const visualizeGroupColors = async (iModelConnection, groups, hiddenGroupsIds, hilitedElementsQueryCache, doEmphasizeElements = true) => {
49
56
  viewerUtils_1.clearEmphasizedOverriddenElements();
50
- let allIds = [];
51
- for (const group of viewGroups) {
52
- const index = viewGroups.length > groups.length
53
- ? viewGroups.findIndex((g) => g.id === group.id)
54
- : groups.findIndex((g) => g.id === group.id);
55
- const result = await exports.getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);
56
- const hilitedIds = result.ids;
57
- viewerUtils_1.overrideElements(hilitedIds, exports.getGroupColor(index), core_common_1.FeatureOverrideType.ColorAndAlpha);
58
- doEmphasizeElements && viewerUtils_1.emphasizeElements(hilitedIds, undefined);
59
- if (!hiddenGroupsIds.includes(group.id)) {
60
- allIds = allIds.concat(hilitedIds);
61
- }
62
- }
57
+ const allIdsPromises = groups.map(async (group, index) => processGroupVisualization(iModelConnection, group, hiddenGroupsIds, hilitedElementsQueryCache, doEmphasizeElements, exports.getGroupColor(index)));
58
+ const allIdsArrays = await Promise.all(allIdsPromises);
59
+ const allIds = allIdsArrays.flat();
63
60
  await viewerUtils_1.zoomToElements(allIds);
64
61
  };
65
62
  exports.visualizeGroupColors = visualizeGroupColors;
@@ -1 +1 @@
1
- {"version":3,"file":"groupsHelpers.js","sourceRoot":"","sources":["../../../../src/widget/components/groupsHelpers.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,oDAAyD;AAGzD,wDAA+C;AAC/C,oEAAoD;AAEpD,+CAAmJ;AAEnJ,MAAM,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtC,MAAM,aAAa,GAAG,UAAU,KAAa;IAClD,OAAO,OAAO,KAAK,GAAG,WAAW,GAAG,EAAE,cAAc,CAAC;AACvD,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB;AAEK,MAAM,sBAAsB,GAAG,KAAK,EACzC,gBAAkC,EAClC,MAAe,EACf,yBAA8E,EAC9E,EAAE;IACF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,MAAM,QAAQ,GAAiC,EAAE,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACrC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,sCAA8B,CAAC,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC,CAAC;SACnG;KACF;IACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAhBW,QAAA,sBAAsB,0BAgBjC;AAEK,MAAM,UAAU,GAAG,KAAK,EAC7B,gBAAkC,EAClC,UAAmB,EACnB,yBAA8E,EAC9E,EAAE;IACF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;QAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACzC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,iBAAS,CAAC,gBAAgB,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC,CAAC;SAClF;KACF;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAC;AAfW,QAAA,UAAU,cAerB;AAEK,MAAM,SAAS,GAAG,KAAK,EAC5B,gBAAkC,EAClC,SAAgB,EAChB,yBAA8E,EAC9E,EAAE;IACF,MAAM,MAAM,GAAG,MAAM,sCAA8B,CAAC,gBAAgB,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;IAC5G,0BAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC,CAAC;AAPW,QAAA,SAAS,aAOpB;AAEK,MAAM,oBAAoB,GAAG,KAAK,EACvC,gBAAkC,EAClC,MAAe,EACf,UAAmB,EACnB,eAAyB,EACzB,yBAA8E,EAC9E,sBAA+B,IAAI,EACnC,EAAE;IACF,+CAAiC,EAAE,CAAC;IACpC,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;QAC9B,MAAM,KAAK,GACT,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;YAC/B,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,sCAA8B,CAAC,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;QACxG,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC;QAC9B,8BAAgB,CACd,UAAU,EACV,qBAAa,CAAC,KAAK,CAAC,EACpB,iCAAmB,CAAC,aAAa,CAClC,CAAC;QACF,mBAAmB,IAAI,+BAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAChE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACvC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SACpC;KACF;IAED,MAAM,4BAAc,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC,CAAC;AA7BW,QAAA,oBAAoB,wBA6B/B;AAEK,MAAM,8BAA8B,GAAG,KAAK,EACjD,gBAAkC,EAClC,KAAY,EACZ,yBAA8E,EAC9E,EAAE;;IACF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,yBAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAChD,OAAO,MAAA,yBAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAI,CAAC,EAAE,MAAM,EAAE,IAAI,4BAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;KAC5F;IACD,IAAI;QACF,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,aAAa,KAAK,CAAC,EAAE;YACvB,uBAAO,CAAC,OAAO,CACb,GAAG,KAAK,CAAC,SAAS,4CAA4C,CAC/D,CAAC;SACH;QACD,MAAM,MAAM,GAAG,MAAM,0BAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAC3D,yBAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;KACf;IAAC,MAAM;QACN,uBAAO,CAAC,QAAQ,CACd,8BAA8B,CAC/B,CAAC;QACF,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,4BAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;KAC5C;AAEH,CAAC,CAAC;AA1BW,QAAA,8BAA8B,kCA0BzC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { FeatureOverrideType } from \"@itwin/core-common\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { toaster } from \"@itwin/itwinui-react\";\nimport { KeySet } from \"@itwin/presentation-common\";\nimport type { QueryCacheItem } from \"./context/GroupHilitedElementsContext\";\nimport { clearEmphasizedOverriddenElements, emphasizeElements, getHiliteIds, hideElements, overrideElements, zoomToElements } from \"./viewerUtils\";\n\nconst goldenAngle = 180 * (3 - Math.sqrt(5));\n\nexport const getGroupColor = function (index: number) {\n return `hsl(${index * goldenAngle + 60}, 100%, 50%)`;\n};\n\nexport const getHiliteIdsFromGroups = async (\n iModelConnection: IModelConnection,\n groups: Group[],\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>\n) => {\n const distinctQueries = new Set<string>();\n const promises: Promise<{ ids: string[] }>[] = [];\n for (const group of groups) {\n if (!distinctQueries.has(group.query)) {\n distinctQueries.add(group.query);\n promises.push(getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache));\n }\n }\n const results = await Promise.all(promises);\n const allIds = results.flatMap((result) => result.ids);\n return allIds;\n};\n\nexport const hideGroups = async (\n iModelConnection: IModelConnection,\n viewGroups: Group[],\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>\n) => {\n const distinctQueries = new Set<string>();\n const promises: Promise<void>[] = [];\n\n for (const viewGroup of viewGroups) {\n if (!distinctQueries.has(viewGroup.query)) {\n distinctQueries.add(viewGroup.query);\n promises.push(hideGroup(iModelConnection, viewGroup, hilitedElementsQueryCache));\n }\n }\n await Promise.all(promises);\n};\n\nexport const hideGroup = async (\n iModelConnection: IModelConnection,\n viewGroup: Group,\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>\n) => {\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, viewGroup, hilitedElementsQueryCache);\n hideElements(result.ids);\n};\n\nexport const visualizeGroupColors = async (\n iModelConnection: IModelConnection,\n groups: Group[],\n viewGroups: Group[],\n hiddenGroupsIds: string[],\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>,\n doEmphasizeElements: boolean = true\n) => {\n clearEmphasizedOverriddenElements();\n let allIds: string[] = [];\n for (const group of viewGroups) {\n const index =\n viewGroups.length > groups.length\n ? viewGroups.findIndex((g) => g.id === group.id)\n : groups.findIndex((g) => g.id === group.id);\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);\n const hilitedIds = result.ids;\n overrideElements(\n hilitedIds,\n getGroupColor(index),\n FeatureOverrideType.ColorAndAlpha,\n );\n doEmphasizeElements && emphasizeElements(hilitedIds, undefined);\n if (!hiddenGroupsIds.includes(group.id)) {\n allIds = allIds.concat(hilitedIds);\n }\n }\n\n await zoomToElements(allIds);\n};\n\nexport const getHiliteIdsAndKeysetFromGroup = async (\n iModelConnection: IModelConnection,\n group: Group,\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>\n) => {\n const query = group.query;\n if (hilitedElementsQueryCache.current.has(query)) {\n return hilitedElementsQueryCache.current.get(query) ?? ({ keySet: new KeySet(), ids: [] });\n }\n try {\n const queryRowCount = await iModelConnection.queryRowCount(query);\n if (queryRowCount === 0) {\n toaster.warning(\n `${group.groupName}'s query is valid but produced no results.`\n );\n }\n const result = await getHiliteIds(query, iModelConnection);\n hilitedElementsQueryCache.current.set(query, result);\n return result;\n } catch {\n toaster.negative(\n `Query could not be resolved.`\n );\n return ({ keySet: new KeySet(), ids: [] });\n }\n\n};\n"]}
1
+ {"version":3,"file":"groupsHelpers.js","sourceRoot":"","sources":["../../../../src/widget/components/groupsHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { FeatureOverrideType } from \"@itwin/core-common\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { toaster } from \"@itwin/itwinui-react\";\nimport { KeySet } from \"@itwin/presentation-common\";\nimport type { QueryCacheItem } from \"./context/GroupHilitedElementsContext\";\nimport { clearEmphasizedOverriddenElements, emphasizeElements, getHiliteIds, hideElements, overrideElements, zoomToElements } from \"./viewerUtils\";\n\nconst goldenAngle = 180 * (3 - Math.sqrt(5));\n\nexport const getGroupColor = function (index: number) {\n return `hsl(${index * goldenAngle + 60}, 100%, 50%)`;\n};\n\nexport const getHiliteIdsFromGroups = async (\n iModelConnection: IModelConnection,\n groups: Group[],\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>\n) => {\n const distinctQueries = new Set<string>();\n const promises: Promise<{ ids: string[] }>[] = [];\n for (const group of groups) {\n if (!distinctQueries.has(group.query)) {\n distinctQueries.add(group.query);\n promises.push(getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache));\n }\n }\n const results = await Promise.all(promises);\n const allIds = results.flatMap((result) => result.ids);\n return allIds;\n};\n\nexport const hideGroups = async (\n iModelConnection: IModelConnection,\n viewGroups: Group[],\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>\n) => {\n const distinctQueries = new Set<string>();\n const promises: Promise<void>[] = [];\n\n for (const viewGroup of viewGroups) {\n if (!distinctQueries.has(viewGroup.query)) {\n distinctQueries.add(viewGroup.query);\n promises.push(hideGroup(iModelConnection, viewGroup, hilitedElementsQueryCache));\n }\n }\n await Promise.all(promises);\n};\n\nexport const hideGroup = async (\n iModelConnection: IModelConnection,\n viewGroup: Group,\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>\n) => {\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, viewGroup, hilitedElementsQueryCache);\n hideElements(result.ids);\n};\n\nconst processGroupVisualization = async (\n iModelConnection: IModelConnection,\n group: Group,\n hiddenGroupsIds: Set<string>,\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>,\n doEmphasizeElements: boolean,\n groupColor: string\n) => {\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);\n const hilitedIds = result.ids;\n overrideElements(hilitedIds, groupColor, FeatureOverrideType.ColorAndAlpha);\n\n doEmphasizeElements && emphasizeElements(hilitedIds, undefined);\n\n return hiddenGroupsIds.has(group.id) ? [] : hilitedIds;\n};\n\nexport const visualizeGroupColors = async (\n iModelConnection: IModelConnection,\n groups: Group[],\n hiddenGroupsIds: Set<string>,\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>,\n doEmphasizeElements: boolean = true\n) => {\n clearEmphasizedOverriddenElements();\n\n const allIdsPromises = groups.map(async (group, index) =>\n processGroupVisualization(\n iModelConnection,\n group,\n hiddenGroupsIds,\n hilitedElementsQueryCache,\n doEmphasizeElements,\n getGroupColor(index)\n )\n );\n\n const allIdsArrays = await Promise.all(allIdsPromises);\n const allIds = allIdsArrays.flat();\n\n await zoomToElements(allIds);\n};\n\nexport const getHiliteIdsAndKeysetFromGroup = async (\n iModelConnection: IModelConnection,\n group: Group,\n hilitedElementsQueryCache: React.MutableRefObject<Map<string, QueryCacheItem>>\n) => {\n const query = group.query;\n if (hilitedElementsQueryCache.current.has(query)) {\n return hilitedElementsQueryCache.current.get(query) ?? ({ keySet: new KeySet(), ids: [] });\n }\n try {\n const queryRowCount = await iModelConnection.queryRowCount(query);\n if (queryRowCount === 0) {\n toaster.warning(\n `${group.groupName}'s query is valid but produced no results.`\n );\n }\n const result = await getHiliteIds(query, iModelConnection);\n hilitedElementsQueryCache.current.set(query, result);\n return result;\n } catch {\n toaster.negative(\n `Query could not be resolved.`\n );\n return ({ keySet: new KeySet(), ids: [] });\n }\n\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  import "./utils.scss";
2
2
  import React from "react";
3
3
  import type { IModelConnection } from "@itwin/core-frontend";
4
- export declare const handleInputChange: <T>(e: React.ChangeEvent<HTMLInputElement>, values: T, setValues: React.Dispatch<React.SetStateAction<T>>) => void;
4
+ export declare const handleInputChange: <T>(e: React.ChangeEvent<HTMLInputElement>, values: T, setValues: (newValues: T) => void) => void;
5
5
  export declare const fetchIdsFromQuery: (query: string, iModelConnection: IModelConnection) => Promise<string[]>;
6
6
  export declare const handleError: (errorStatus: number) => void;
7
7
  export declare const LoadingOverlay: () => JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/widget/components/utils.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { ProgressRadial, Text, toaster } from \"@itwin/itwinui-react\";\nimport \"./utils.scss\";\nimport React from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\n\nexport const handleInputChange = <T,>(\n e: React.ChangeEvent<HTMLInputElement>,\n values: T,\n setValues: React.Dispatch<React.SetStateAction<T>>,\n) => {\n const { name, value } = e.target;\n\n setValues({\n ...values,\n [name]: value,\n });\n};\n\nexport const fetchIdsFromQuery = async (\n query: string,\n iModelConnection: IModelConnection,\n) => {\n if (query === \"\") {\n return [];\n }\n const ids: string[] = [];\n const rowIterator = iModelConnection.query(query, undefined, {\n rowFormat: QueryRowFormat.UseJsPropertyNames,\n });\n while (true) {\n const { done, value } = await rowIterator.next();\n if (done) {\n break;\n }\n if (Object.keys(value).includes(\"id\")) {\n ids.push(value.id);\n } else if (Object.keys(value).includes(\"element.id\")) {\n ids.push(value[\"element.id\"]);\n } else if (Object.keys(value).includes(\"eCInstanceId\")) {\n ids.push(value.eCInstanceId);\n }\n }\n return ids;\n};\n\nexport const handleError = (errorStatus: number) => {\n let errorMessage = \"Error! \";\n switch (errorStatus) {\n case 401:\n errorMessage += `You are unauthorized to do this operation.`;\n break;\n case 403:\n errorMessage += `You don't have permission to access the requested resource.`;\n break;\n case 404:\n errorMessage += `The requested resource was not found.`;\n break;\n case 409:\n errorMessage += `This property name is already being used.`;\n break;\n case 422:\n errorMessage += `Unable to process the request.`;\n break;\n case 429:\n errorMessage += `Too many requests.`;\n break;\n case 500:\n errorMessage += `Internal server error.`;\n break;\n case 502:\n errorMessage += `Bad gateway.`;\n break;\n case 503:\n errorMessage += `Service unavailable.`;\n break;\n default:\n errorMessage += `Something went wrong!`;\n }\n toaster.negative(errorMessage);\n\n};\n\nexport const LoadingOverlay = () => (\n <div className='gmw-center-overlay'>\n <Text>Loading</Text>\n <ProgressRadial indeterminate />\n <Text>Please wait...</Text>\n </div>\n);\n\ninterface EmptyMessageProps {\n message: string;\n}\n\nexport const EmptyMessage = ({ message }: EmptyMessageProps) => (\n <div className='gmw-center-overlay'>\n <Text>{message}</Text>\n </div>\n);\n\nexport const LoadingSpinner = () => {\n return (\n <div className=\"gmw-loading-spinner\">\n <ProgressRadial size=\"small\" indeterminate />\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/widget/components/utils.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { ProgressRadial, Text, toaster } from \"@itwin/itwinui-react\";\nimport \"./utils.scss\";\nimport React from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\n\nexport const handleInputChange = <T,>(\n e: React.ChangeEvent<HTMLInputElement>,\n values: T,\n setValues: (newValues: T) => void,\n) => {\n const { name, value } = e.target;\n\n setValues({\n ...values,\n [name]: value,\n });\n};\n\nexport const fetchIdsFromQuery = async (\n query: string,\n iModelConnection: IModelConnection,\n) => {\n if (query === \"\") {\n return [];\n }\n const ids: string[] = [];\n const rowIterator = iModelConnection.query(query, undefined, {\n rowFormat: QueryRowFormat.UseJsPropertyNames,\n });\n while (true) {\n const { done, value } = await rowIterator.next();\n if (done) {\n break;\n }\n if (Object.keys(value).includes(\"id\")) {\n ids.push(value.id);\n } else if (Object.keys(value).includes(\"element.id\")) {\n ids.push(value[\"element.id\"]);\n } else if (Object.keys(value).includes(\"eCInstanceId\")) {\n ids.push(value.eCInstanceId);\n }\n }\n return ids;\n};\n\nexport const handleError = (errorStatus: number) => {\n let errorMessage = \"Error! \";\n switch (errorStatus) {\n case 401:\n errorMessage += `You are unauthorized to do this operation.`;\n break;\n case 403:\n errorMessage += `You don't have permission to access the requested resource.`;\n break;\n case 404:\n errorMessage += `The requested resource was not found.`;\n break;\n case 409:\n errorMessage += `This property name is already being used.`;\n break;\n case 422:\n errorMessage += `Unable to process the request.`;\n break;\n case 429:\n errorMessage += `Too many requests.`;\n break;\n case 500:\n errorMessage += `Internal server error.`;\n break;\n case 502:\n errorMessage += `Bad gateway.`;\n break;\n case 503:\n errorMessage += `Service unavailable.`;\n break;\n default:\n errorMessage += `Something went wrong!`;\n }\n toaster.negative(errorMessage);\n\n};\n\nexport const LoadingOverlay = () => (\n <div className='gmw-center-overlay'>\n <Text>Loading</Text>\n <ProgressRadial indeterminate />\n <Text>Please wait...</Text>\n </div>\n);\n\ninterface EmptyMessageProps {\n message: string;\n}\n\nexport const EmptyMessage = ({ message }: EmptyMessageProps) => (\n <div className='gmw-center-overlay'>\n <Text>{message}</Text>\n </div>\n);\n\nexport const LoadingSpinner = () => {\n return (\n <div className=\"gmw-loading-spinner\">\n <ProgressRadial size=\"small\" indeterminate />\n </div>\n );\n};\n"]}
@@ -9,10 +9,13 @@ export { Mappings, MappingsProps } from "./widget/components/Mapping";
9
9
  export { MappingAction, MappingActionProps } from "./widget/components/MappingAction";
10
10
  export { GroupingMappingContext, GroupingMappingContextProps } from "./widget/components/GroupingMappingContext";
11
11
  export { Groupings, GroupingProps } from "./widget/components/Grouping";
12
+ export { GroupsVisualization, GroupsVisualizationProps } from "./widget/components/GroupsVisualization";
12
13
  export { GroupAction, GroupActionProps } from "./widget/components/GroupAction";
13
14
  export { PropertyMenu, PropertyMenuProps } from "./widget/components/PropertyMenu";
15
+ export { PropertyMenuWithVisualization, PropertyMenuWithVisualizationProps } from "./widget/components/PropertyMenuWithVisualization";
14
16
  export { GroupPropertyAction, GroupPropertyActionProps } from "./widget/components/GroupPropertyAction";
15
17
  export { CalculatedPropertyAction, CalculatedPropertyActionProps } from "./widget/components/CalculatedPropertyAction";
18
+ export { CalculatedPropertyActionWithVisuals, CalculatedPropertyActionWithVisualsProps } from "./widget/components/CalculatedPropertyActionWithVisuals";
16
19
  export { CustomCalculationAction, CustomCalculationActionProps } from "./widget/components/CustomCalculationAction";
17
20
  export { SearchGroupingCustomUI } from "./widget/components/customUI/SearchGroupingCustomUI";
18
21
  export { ManualGroupingCustomUI } from "./widget/components/customUI/ManualGroupingCustomUI";
@@ -13,10 +13,13 @@ export { Mappings } from "./widget/components/Mapping";
13
13
  export { MappingAction } from "./widget/components/MappingAction";
14
14
  export { GroupingMappingContext } from "./widget/components/GroupingMappingContext";
15
15
  export { Groupings } from "./widget/components/Grouping";
16
+ export { GroupsVisualization } from "./widget/components/GroupsVisualization";
16
17
  export { GroupAction } from "./widget/components/GroupAction";
17
18
  export { PropertyMenu } from "./widget/components/PropertyMenu";
19
+ export { PropertyMenuWithVisualization } from "./widget/components/PropertyMenuWithVisualization";
18
20
  export { GroupPropertyAction } from "./widget/components/GroupPropertyAction";
19
21
  export { CalculatedPropertyAction } from "./widget/components/CalculatedPropertyAction";
22
+ export { CalculatedPropertyActionWithVisuals } from "./widget/components/CalculatedPropertyActionWithVisuals";
20
23
  export { CustomCalculationAction } from "./widget/components/CustomCalculationAction";
21
24
  export { SearchGroupingCustomUI } from "./widget/components/customUI/SearchGroupingCustomUI";
22
25
  export { ManualGroupingCustomUI } from "./widget/components/customUI/ManualGroupingCustomUI";
@@ -1 +1 @@
1
- {"version":3,"file":"grouping-mapping-widget.js","sourceRoot":"","sources":["../../src/grouping-mapping-widget.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,cAAc,gCAAgC,CAAC;AAE/C,0EAA0E;AAC1E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAC3J,OAAO,EAA4D,+BAA+B,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AAC9L,cAAc,wBAAwB,CAAC;AAEvC,yCAAyC;AACzC,OAAO,EAAE,QAAQ,EAAiB,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAsB,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAA+B,MAAM,4CAA4C,CAAC;AACjH,OAAO,EAAE,SAAS,EAAiB,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAoB,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAqB,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAA4B,MAAM,yCAAyC,CAAC;AACxG,OAAO,EAAE,wBAAwB,EAAiC,MAAM,8CAA8C,CAAC;AACvH,OAAO,EAAE,uBAAuB,EAAgC,MAAM,6CAA6C,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAA2B,2BAA2B,EAAkF,MAAM,sDAAsD,CAAC;AAE5M,gCAAgC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/GroupingMappingWidget\";\n\n/** Interfaces for providing custom MappingClient and API configuration */\nexport { createDefaultMappingClient, createMappingClient, MappingClientContext, useMappingClient } from \"./widget/components/context/MappingClientContext\";\nexport { ClientPrefix, GetAccessTokenFn, GroupingMappingApiConfig, GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from \"./widget/components/context/GroupingApiConfigContext\";\nexport * from \"@itwin/insights-client\";\n\n/** Internal components for custom UIs */\nexport { Mappings, MappingsProps } from \"./widget/components/Mapping\";\nexport { MappingAction, MappingActionProps } from \"./widget/components/MappingAction\";\nexport { GroupingMappingContext, GroupingMappingContextProps } from \"./widget/components/GroupingMappingContext\";\nexport { Groupings, GroupingProps } from \"./widget/components/Grouping\";\nexport { GroupAction, GroupActionProps } from \"./widget/components/GroupAction\";\nexport { PropertyMenu, PropertyMenuProps } from \"./widget/components/PropertyMenu\";\nexport { GroupPropertyAction, GroupPropertyActionProps } from \"./widget/components/GroupPropertyAction\";\nexport { CalculatedPropertyAction, CalculatedPropertyActionProps } from \"./widget/components/CalculatedPropertyAction\";\nexport { CustomCalculationAction, CustomCalculationActionProps } from \"./widget/components/CustomCalculationAction\";\nexport { SearchGroupingCustomUI } from \"./widget/components/customUI/SearchGroupingCustomUI\";\nexport { ManualGroupingCustomUI } from \"./widget/components/customUI/ManualGroupingCustomUI\";\nexport { GroupQueryBuilderCustomUI } from \"./widget/components/customUI/GroupQueryBuilderCustomUI\";\nexport { GroupingMappingCustomUI, GroupingMappingCustomUIType, ContextCustomUI, GroupingCustomUI, GroupingCustomUIProps, ContextCustomUIProps } from \"./widget/components/customUI/GroupingMappingCustomUI\";\n\n/** Formula DataType resolver */\nexport { resolveFormulaDataType } from \"./formula/FormulaDataTypeResolver\";\nexport { DataType, PropertyMap } from \"./formula/Types\";\nexport { IResult } from \"./formula/IResult\";\n"]}
1
+ {"version":3,"file":"grouping-mapping-widget.js","sourceRoot":"","sources":["../../src/grouping-mapping-widget.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,cAAc,gCAAgC,CAAC;AAE/C,0EAA0E;AAC1E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAC3J,OAAO,EAA4D,+BAA+B,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AAC9L,cAAc,wBAAwB,CAAC;AAEvC,yCAAyC;AACzC,OAAO,EAAE,QAAQ,EAAiB,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAsB,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAA+B,MAAM,4CAA4C,CAAC;AACjH,OAAO,EAAE,SAAS,EAAiB,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAA4B,MAAM,yCAAyC,CAAC;AACxG,OAAO,EAAE,WAAW,EAAoB,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAqB,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,6BAA6B,EAAsC,MAAM,mDAAmD,CAAC;AACtI,OAAO,EAAE,mBAAmB,EAA4B,MAAM,yCAAyC,CAAC;AACxG,OAAO,EAAE,wBAAwB,EAAiC,MAAM,8CAA8C,CAAC;AACvH,OAAO,EAAE,mCAAmC,EAA4C,MAAM,yDAAyD,CAAC;AACxJ,OAAO,EAAE,uBAAuB,EAAgC,MAAM,6CAA6C,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAA2B,2BAA2B,EAAkF,MAAM,sDAAsD,CAAC;AAE5M,gCAAgC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/GroupingMappingWidget\";\n\n/** Interfaces for providing custom MappingClient and API configuration */\nexport { createDefaultMappingClient, createMappingClient, MappingClientContext, useMappingClient } from \"./widget/components/context/MappingClientContext\";\nexport { ClientPrefix, GetAccessTokenFn, GroupingMappingApiConfig, GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from \"./widget/components/context/GroupingApiConfigContext\";\nexport * from \"@itwin/insights-client\";\n\n/** Internal components for custom UIs */\nexport { Mappings, MappingsProps } from \"./widget/components/Mapping\";\nexport { MappingAction, MappingActionProps } from \"./widget/components/MappingAction\";\nexport { GroupingMappingContext, GroupingMappingContextProps } from \"./widget/components/GroupingMappingContext\";\nexport { Groupings, GroupingProps } from \"./widget/components/Grouping\";\nexport { GroupsVisualization, GroupsVisualizationProps } from \"./widget/components/GroupsVisualization\";\nexport { GroupAction, GroupActionProps } from \"./widget/components/GroupAction\";\nexport { PropertyMenu, PropertyMenuProps } from \"./widget/components/PropertyMenu\";\nexport { PropertyMenuWithVisualization, PropertyMenuWithVisualizationProps } from \"./widget/components/PropertyMenuWithVisualization\";\nexport { GroupPropertyAction, GroupPropertyActionProps } from \"./widget/components/GroupPropertyAction\";\nexport { CalculatedPropertyAction, CalculatedPropertyActionProps } from \"./widget/components/CalculatedPropertyAction\";\nexport { CalculatedPropertyActionWithVisuals, CalculatedPropertyActionWithVisualsProps } from \"./widget/components/CalculatedPropertyActionWithVisuals\";\nexport { CustomCalculationAction, CustomCalculationActionProps } from \"./widget/components/CustomCalculationAction\";\nexport { SearchGroupingCustomUI } from \"./widget/components/customUI/SearchGroupingCustomUI\";\nexport { ManualGroupingCustomUI } from \"./widget/components/customUI/ManualGroupingCustomUI\";\nexport { GroupQueryBuilderCustomUI } from \"./widget/components/customUI/GroupQueryBuilderCustomUI\";\nexport { GroupingMappingCustomUI, GroupingMappingCustomUIType, ContextCustomUI, GroupingCustomUI, GroupingCustomUIProps, ContextCustomUIProps } from \"./widget/components/customUI/GroupingMappingCustomUI\";\n\n/** Formula DataType resolver */\nexport { resolveFormulaDataType } from \"./formula/FormulaDataTypeResolver\";\nexport { DataType, PropertyMap } from \"./formula/Types\";\nexport { IResult } from \"./formula/IResult\";\n"]}
@@ -178,7 +178,7 @@ describe("Groupings View", () => {
178
178
  // Click on the context ui
179
179
  await user.click(contextMenuItems[0]);
180
180
  // Callback should have been called with correct parameters
181
- expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0]);
181
+ expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);
182
182
  });
183
183
  it("Set up both grouping and context custom UI", async () => {
184
184
  // Arange
@@ -230,7 +230,7 @@ describe("Groupings View", () => {
230
230
  // Click on the context ui
231
231
  await user.click(contextMenuItems[1]);
232
232
  // Callback should have been called with correct parameters
233
- expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0]);
233
+ expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);
234
234
  });
235
235
  });
236
236
  //# sourceMappingURL=GroupingMappingCustomUI.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupingMappingCustomUI.test.js","sourceRoot":"","sources":["../../../src/test/GroupingMappingCustomUI.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport { faker } from \"@faker-js/faker\";\nimport { GroupingMappingCustomUIType, Groupings } from \"../grouping-mapping-widget\";\nimport type { GroupCollection, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport * as moq from \"typemoq\";\nimport type { IModelConnection, ViewManager } from \"@itwin/core-frontend\";\nimport type { ContextCustomUIProps, GroupingCustomUIProps, GroupingMappingCustomUI } from \"../grouping-mapping-widget\";\nimport userEvent from \"@testing-library/user-event\";\nimport { render, screen, waitForElementToBeRemoved, within } from \"../test/test-utils\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId = faker.datatype.uuid();\nconst mockMappingId = faker.datatype.uuid();\nconst mockMapping: Mapping = {\n id: mockMappingId,\n mappingName: \"mOcKmApPiNg1\",\n description: \"mOcKmApPiNgDeScRiPtIoN1\",\n createdBy: faker.random.alpha(),\n createdOn: faker.date.past().toDateString(),\n modifiedBy: faker.random.alpha(),\n modifiedOn: faker.date.past().toDateString(),\n extractionEnabled: false,\n _links: {\n imodel: {\n href: \"\",\n },\n },\n};\n\nconst groupsFactory = (): GroupCollection => ({\n groups: Array.from(\n { length: faker.datatype.number({ min: 3, max: 5 }) },\n (_, index) => ({\n id: `${faker.datatype.uuid()}`,\n groupName: `mOcKgRoUp${index}`,\n description: `mOcKgRoUpDeScRiPtIoN${index}`,\n query: `mOcKgRoUpQuErY${index}`,\n _links: {\n imodel: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n },\n })\n ),\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n});\n\nconst connectionMock = moq.Mock.ofType<IModelConnection>();\nconst viewManagerMock = moq.Mock.ofType<ViewManager>();\nconst mappingClientMock = moq.Mock.ofType<IMappingsClient>();\n\njest.mock(\"@itwin/appui-react\", () => ({\n ...jest.requireActual(\"@itwin/appui-react\"),\n useActiveIModelConnection: () => connectionMock.object,\n}));\n\njest.mock(\"@itwin/core-frontend\", () => ({\n ...jest.requireActual(\"@itwin/core-frontend\"),\n IModelApp: {\n viewManager: {},\n },\n}));\n\njest.mock(\"../widget/components/context/MappingClientContext\", () => ({\n ...jest.requireActual(\"../widget/components/context/MappingClientContext\"),\n useMappingClient: () => mappingClientMock.object,\n}));\n\nconst mockGroups = groupsFactory();\n\ndescribe(\"Groupings View\", () => {\n beforeEach(async () => {\n connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId);\n connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);\n\n mappingClientMock\n .setup(async (x) => x.getGroups(moq.It.isAny(), moq.It.isAny(), moq.It.isAny()))\n .returns(async () => Promise.resolve(mockGroups.groups));\n });\n\n afterEach(() => {\n connectionMock.reset();\n mappingClientMock.reset();\n viewManagerMock.reset();\n });\n\n it(\"List all groups\", async () => {\n // Arange\n\n // Act\n const user = userEvent.setup();\n render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the correct random mockGroups.groups count listed\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n horizontalTiles.forEach((horizontalTile, index) => {\n const groupTile = within(horizontalTile);\n expect(\n groupTile.getByText(\n mockGroups.groups[index].groupName\n )\n ).toBeInTheDocument();\n expect(\n groupTile.getByText(\n mockGroups.groups[index].description ?? \"\"\n )\n ).toBeInTheDocument();\n });\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should only have the permanent delete context item.\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(1);\n expect(contextMenuItems[0]).toHaveTextContent(\"Remove\");\n });\n\n it(\"Set up grouping custom UI\", async () => {\n // Arange\n const mockedUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockGroupingUI];\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Each group should have a more icon button\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n expect(moreButton.length).toBeGreaterThan(0);\n\n // Click on first more icon\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n\n // Hover on 'Edit'\n await user.hover(contextMenuItems[0]);\n\n // Should have exactly 1 sub menu item\n const editCustom = screen.getAllByTestId(`gmw-edit-0`);\n expect(editCustom).toHaveLength(1);\n expect(editCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Click on the edit custom UI\n await user.click(editCustom[0]);\n\n const groupName = screen.getAllByText(mockGroups.groups[0].groupName);\n expect(groupName).toHaveLength(1);\n });\n\n it(\"Set up context custom UI - should have add context menu\", async () => {\n // Arange\n const mockedUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI];\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the right group number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[1]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0]);\n });\n\n it(\"Set up both grouping and context custom UI\", async () => {\n // Arange\n const mockedGroupingUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockedContextUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedGroupingUIComponent,\n };\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedContextUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];\n const onClickAddGroup = jest.fn();\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={onClickAddGroup}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n await user.click(addCustom[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickAddGroup).toBeCalledWith(mockGroupingUI.name);\n\n // Check the group tile number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 3 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n\n expect(contextMenuItems).toHaveLength(3);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n expect(contextMenuItems[1]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[2]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[1]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0]);\n });\n});\n"]}
1
+ {"version":3,"file":"GroupingMappingCustomUI.test.js","sourceRoot":"","sources":["../../../src/test/GroupingMappingCustomUI.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport { faker } from \"@faker-js/faker\";\nimport { GroupingMappingCustomUIType, Groupings } from \"../grouping-mapping-widget\";\nimport type { GroupCollection, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport * as moq from \"typemoq\";\nimport type { IModelConnection, ViewManager } from \"@itwin/core-frontend\";\nimport type { ContextCustomUIProps, GroupingCustomUIProps, GroupingMappingCustomUI } from \"../grouping-mapping-widget\";\nimport userEvent from \"@testing-library/user-event\";\nimport { render, screen, waitForElementToBeRemoved, within } from \"../test/test-utils\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId = faker.datatype.uuid();\nconst mockMappingId = faker.datatype.uuid();\nconst mockMapping: Mapping = {\n id: mockMappingId,\n mappingName: \"mOcKmApPiNg1\",\n description: \"mOcKmApPiNgDeScRiPtIoN1\",\n createdBy: faker.random.alpha(),\n createdOn: faker.date.past().toDateString(),\n modifiedBy: faker.random.alpha(),\n modifiedOn: faker.date.past().toDateString(),\n extractionEnabled: false,\n _links: {\n imodel: {\n href: \"\",\n },\n },\n};\n\nconst groupsFactory = (): GroupCollection => ({\n groups: Array.from(\n { length: faker.datatype.number({ min: 3, max: 5 }) },\n (_, index) => ({\n id: `${faker.datatype.uuid()}`,\n groupName: `mOcKgRoUp${index}`,\n description: `mOcKgRoUpDeScRiPtIoN${index}`,\n query: `mOcKgRoUpQuErY${index}`,\n _links: {\n imodel: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n },\n })\n ),\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n});\n\nconst connectionMock = moq.Mock.ofType<IModelConnection>();\nconst viewManagerMock = moq.Mock.ofType<ViewManager>();\nconst mappingClientMock = moq.Mock.ofType<IMappingsClient>();\n\njest.mock(\"@itwin/appui-react\", () => ({\n ...jest.requireActual(\"@itwin/appui-react\"),\n useActiveIModelConnection: () => connectionMock.object,\n}));\n\njest.mock(\"@itwin/core-frontend\", () => ({\n ...jest.requireActual(\"@itwin/core-frontend\"),\n IModelApp: {\n viewManager: {},\n },\n}));\n\njest.mock(\"../widget/components/context/MappingClientContext\", () => ({\n ...jest.requireActual(\"../widget/components/context/MappingClientContext\"),\n useMappingClient: () => mappingClientMock.object,\n}));\n\nconst mockGroups = groupsFactory();\n\ndescribe(\"Groupings View\", () => {\n beforeEach(async () => {\n connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId);\n connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);\n\n mappingClientMock\n .setup(async (x) => x.getGroups(moq.It.isAny(), moq.It.isAny(), moq.It.isAny()))\n .returns(async () => Promise.resolve(mockGroups.groups));\n });\n\n afterEach(() => {\n connectionMock.reset();\n mappingClientMock.reset();\n viewManagerMock.reset();\n });\n\n it(\"List all groups\", async () => {\n // Arange\n\n // Act\n const user = userEvent.setup();\n render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the correct random mockGroups.groups count listed\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n horizontalTiles.forEach((horizontalTile, index) => {\n const groupTile = within(horizontalTile);\n expect(\n groupTile.getByText(\n mockGroups.groups[index].groupName\n )\n ).toBeInTheDocument();\n expect(\n groupTile.getByText(\n mockGroups.groups[index].description ?? \"\"\n )\n ).toBeInTheDocument();\n });\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should only have the permanent delete context item.\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(1);\n expect(contextMenuItems[0]).toHaveTextContent(\"Remove\");\n });\n\n it(\"Set up grouping custom UI\", async () => {\n // Arange\n const mockedUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockGroupingUI];\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Each group should have a more icon button\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n expect(moreButton.length).toBeGreaterThan(0);\n\n // Click on first more icon\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n\n // Hover on 'Edit'\n await user.hover(contextMenuItems[0]);\n\n // Should have exactly 1 sub menu item\n const editCustom = screen.getAllByTestId(`gmw-edit-0`);\n expect(editCustom).toHaveLength(1);\n expect(editCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Click on the edit custom UI\n await user.click(editCustom[0]);\n\n const groupName = screen.getAllByText(mockGroups.groups[0].groupName);\n expect(groupName).toHaveLength(1);\n });\n\n it(\"Set up context custom UI - should have add context menu\", async () => {\n // Arange\n const mockedUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI];\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the right group number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[1]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);\n });\n\n it(\"Set up both grouping and context custom UI\", async () => {\n // Arange\n const mockedGroupingUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockedContextUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedGroupingUIComponent,\n };\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedContextUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];\n const onClickAddGroup = jest.fn();\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={onClickAddGroup}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n await user.click(addCustom[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickAddGroup).toBeCalledWith(mockGroupingUI.name);\n\n // Check the group tile number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 3 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n\n expect(contextMenuItems).toHaveLength(3);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n expect(contextMenuItems[1]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[2]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[1]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);\n });\n});\n"]}
@@ -2,85 +2,26 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import { IModelApp } from "@itwin/core-frontend";
6
- import { Fieldset, LabeledInput, LabeledSelect, MenuItem, Small, ToggleSwitch, } from "@itwin/itwinui-react";
7
- import React, { useEffect, useState } from "react";
5
+ import { Fieldset, Small, } from "@itwin/itwinui-react";
6
+ import React, { useState } from "react";
8
7
  import ActionPanel from "./ActionPanel";
9
- import { BboxDimension, BboxDimensionsDecorator, } from "../../decorators/BboxDimensionsDecorator";
10
- import useValidator, { NAME_REQUIREMENTS } from "../hooks/useValidator";
8
+ import useValidator from "../hooks/useValidator";
11
9
  import { handleError } from "./utils";
12
- import { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements } from "./viewerUtils";
13
10
  import "./CalculatedPropertyAction.scss";
14
11
  import { useMappingClient } from "./context/MappingClientContext";
15
12
  import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
16
13
  import { CalculatedPropertyType } from "@itwin/insights-client";
17
- import { useGroupHilitedElementsContext } from "./context/GroupHilitedElementsContext";
18
- import { useActiveIModelConnection } from "@itwin/appui-react";
19
- import { getHiliteIdsAndKeysetFromGroup } from "./groupsHelpers";
14
+ import { SharedCalculatedPropertyForms } from "./SharedCalculatedPropertyForms";
20
15
  export const CalculatedPropertyAction = ({ mappingId, group, calculatedProperty, onSaveSuccess, onClickCancel, }) => {
21
- var _a, _b;
16
+ var _a;
22
17
  const { getAccessToken, iModelId } = useGroupingMappingApiConfig();
23
18
  const mappingClient = useMappingClient();
24
19
  const [propertyName, setPropertyName] = useState((_a = calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.propertyName) !== null && _a !== void 0 ? _a : "");
25
- const iModelConnection = useActiveIModelConnection();
26
- const [type, setType] = useState((_b = calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.type) !== null && _b !== void 0 ? _b : CalculatedPropertyType.Undefined);
27
- const [bboxDecorator, setBboxDecorator] = useState();
20
+ const [type, setType] = useState(calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.type);
28
21
  const [isLoading, setIsLoading] = useState(false);
29
- const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();
30
- const [inferredSpatialData, setInferredSpatialData] = useState();
31
22
  const [validator, showValidationMessage] = useValidator();
32
- const [resolvedHiliteIds, setResolvedHiliteIds] = useState([]);
33
- const [colorProperty, setColorProperty] = useState(false);
34
- useEffect(() => {
35
- const decorator = new BboxDimensionsDecorator();
36
- IModelApp.viewManager.addDecorator(decorator);
37
- setBboxDecorator(decorator);
38
- return () => {
39
- IModelApp.viewManager.dropDecorator(decorator);
40
- };
41
- }, []);
42
- useEffect(() => {
43
- const initialize = async () => {
44
- if (!iModelConnection)
45
- return;
46
- clearEmphasizedOverriddenElements();
47
- if (!colorProperty)
48
- return;
49
- setIsLoading(true);
50
- const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);
51
- setResolvedHiliteIds(result.ids);
52
- setIsLoading(false);
53
- };
54
- void initialize();
55
- }, [iModelConnection, hilitedElementsQueryCache, group, colorProperty]);
56
- useEffect(() => {
57
- if (!colorProperty || resolvedHiliteIds.length === 0) {
58
- return;
59
- }
60
- visualizeElements([resolvedHiliteIds[0]], "red");
61
- void zoomToElements([resolvedHiliteIds[0]]);
62
- }, [colorProperty, resolvedHiliteIds]);
63
- useEffect(() => {
64
- if (!colorProperty || resolvedHiliteIds.length === 0) {
65
- return;
66
- }
67
- const setContext = async () => {
68
- if (bboxDecorator) {
69
- await bboxDecorator.setContext(resolvedHiliteIds[0]);
70
- setInferredSpatialData(bboxDecorator.getInferredSpatialData());
71
- }
72
- };
73
- void setContext();
74
- }, [bboxDecorator, colorProperty, resolvedHiliteIds]);
75
- useEffect(() => {
76
- if (bboxDecorator && type && inferredSpatialData) {
77
- inferredSpatialData.has(BboxDimension[type]) && colorProperty
78
- ? bboxDecorator.drawContext(BboxDimension[type])
79
- : bboxDecorator.clearContext();
80
- }
81
- }, [bboxDecorator, colorProperty, inferredSpatialData, type]);
82
23
  const onSave = async () => {
83
- if (!validator.allValid()) {
24
+ if (!validator.allValid() || !type) {
84
25
  showValidationMessage(true);
85
26
  return;
86
27
  }
@@ -107,65 +48,12 @@ export const CalculatedPropertyAction = ({ mappingId, group, calculatedProperty,
107
48
  setIsLoading(false);
108
49
  }
109
50
  };
110
- const getSpatialData = (value) => {
111
- var _a;
112
- return (inferredSpatialData === null || inferredSpatialData === void 0 ? void 0 : inferredSpatialData.has(BboxDimension[value])) && (React.createElement("div", null, `${(_a = inferredSpatialData === null || inferredSpatialData === void 0 ? void 0 : inferredSpatialData.get(BboxDimension[value])) === null || _a === void 0 ? void 0 : _a.toPrecision(4)}m`));
113
- };
114
51
  return (React.createElement(React.Fragment, null,
115
52
  React.createElement("div", { className: 'gmw-calculated-properties-action-container' },
116
53
  React.createElement(Fieldset, { legend: 'Calculated Property Details', className: 'gmw-details-form' },
117
54
  React.createElement("div", { className: 'gmw-field-legend-container' },
118
- React.createElement(Small, { className: 'gmw-field-legend' }, "Asterisk * indicates mandatory fields."),
119
- React.createElement(ToggleSwitch, { label: 'Visualize Dimensions', labelPosition: 'left', disabled: isLoading, checked: colorProperty, onChange: () => setColorProperty((b) => !b) })),
120
- React.createElement(LabeledInput, { value: propertyName, required: true, name: 'name', label: 'Name', onChange: (event) => {
121
- setPropertyName(event.target.value);
122
- validator.showMessageFor("name");
123
- }, message: validator.message("name", propertyName, NAME_REQUIREMENTS), status: validator.message("name", propertyName, NAME_REQUIREMENTS)
124
- ? "negative"
125
- : undefined, onBlur: () => {
126
- validator.showMessageFor("name");
127
- }, onBlurCapture: (event) => {
128
- setPropertyName(event.target.value);
129
- validator.showMessageFor("name");
130
- } }),
131
- React.createElement(LabeledSelect, { label: 'Quantity Type', required: true, options: [
132
- { value: CalculatedPropertyType.Length, label: "Length" },
133
- { value: CalculatedPropertyType.Area, label: "Area" },
134
- { value: CalculatedPropertyType.Volume, label: "Volume" },
135
- {
136
- value: CalculatedPropertyType.BoundingBoxLongestEdgeLength,
137
- label: "Longest Edge Length",
138
- },
139
- {
140
- value: CalculatedPropertyType.BoundingBoxIntermediateEdgeLength,
141
- label: "Intermediate Edge Length",
142
- },
143
- {
144
- value: CalculatedPropertyType.BoundingBoxShortestEdgeLength,
145
- label: "Shortest Edge Length",
146
- },
147
- {
148
- value: CalculatedPropertyType.BoundingBoxDiagonalLength,
149
- label: "Diagonal Length",
150
- },
151
- {
152
- value: CalculatedPropertyType.BoundingBoxLongestFaceDiagonalLength,
153
- label: "Longest Face Diagonal Length",
154
- },
155
- {
156
- value: CalculatedPropertyType.BoundingBoxIntermediateFaceDiagonalLength,
157
- label: "Intermediate Face Diagonal Length",
158
- },
159
- {
160
- value: CalculatedPropertyType.BoundingBoxShortestFaceDiagonalLength,
161
- label: "Shortest Face Diagonal Length",
162
- },
163
- ], value: type, onChange: setType, itemRenderer: (option) => (React.createElement(MenuItem, null,
164
- React.createElement("div", { className: 'gmw-gr-cp-menu-item' },
165
- React.createElement("div", null, option.label),
166
- getSpatialData(option.value)))), selectedItemRenderer: (option) => (React.createElement("div", { className: 'gmw-select-item' },
167
- React.createElement("div", null, option.label),
168
- getSpatialData(option.value))), onShow: () => { }, onHide: () => { } }))),
55
+ React.createElement(Small, { className: 'gmw-field-legend' }, "Asterisk * indicates mandatory fields.")),
56
+ React.createElement(SharedCalculatedPropertyForms, { validator: validator, propertyName: propertyName, setPropertyName: setPropertyName, type: type, setType: setType }))),
169
57
  React.createElement(ActionPanel, { onSave: onSave, onCancel: onClickCancel, isSavingDisabled: !(type && propertyName), isLoading: isLoading })));
170
58
  };
171
59
  //# sourceMappingURL=CalculatedPropertyAction.js.map