@itwin/grouping-mapping-widget 0.36.0 → 0.37.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 (427) hide show
  1. package/lib/cjs/GroupingMappingWidget.js +15 -28
  2. package/lib/cjs/GroupingMappingWidget.js.map +1 -1
  3. package/lib/cjs/WidgetShell/GroupingMapping.d.ts +1 -2
  4. package/lib/cjs/WidgetShell/GroupingMapping.js +1 -1
  5. package/lib/cjs/WidgetShell/GroupingMapping.js.map +1 -1
  6. package/lib/cjs/WidgetShell/GroupingMappingContent.d.ts +2 -3
  7. package/lib/cjs/WidgetShell/GroupingMappingContent.js.map +1 -1
  8. package/lib/cjs/WidgetShell/GroupingMappingHeader.d.ts +0 -1
  9. package/lib/cjs/WidgetShell/GroupingMappingWidget.js +2 -1
  10. package/lib/cjs/WidgetShell/GroupingMappingWidget.js.map +1 -1
  11. package/lib/cjs/WidgetShell/Router/GroupingMappingRouter.d.ts +2 -3
  12. package/lib/cjs/WidgetShell/Router/GroupingMappingRouter.js.map +1 -1
  13. package/lib/cjs/WidgetShell/WidgetHeader/WidgetHeader.d.ts +0 -1
  14. package/lib/cjs/common/hooks/useIsMounted.d.ts +0 -1
  15. package/lib/cjs/common/hooks/useMemoizedCollectionPick.js +1 -2
  16. package/lib/cjs/common/hooks/useMemoizedCollectionPick.js.map +1 -1
  17. package/lib/cjs/common/utils.d.ts +1 -1
  18. package/lib/cjs/common/utils.js +10 -21
  19. package/lib/cjs/common/utils.js.map +1 -1
  20. package/lib/cjs/common/viewerUtils.js.map +1 -1
  21. package/lib/cjs/components/Constants.js +1 -1
  22. package/lib/cjs/components/Constants.js.map +1 -1
  23. package/lib/cjs/components/GroupingMappingContext.js.map +1 -1
  24. package/lib/cjs/components/Groups/Editing/GroupAction.d.ts +0 -1
  25. package/lib/cjs/components/Groups/Editing/GroupAction.js +9 -5
  26. package/lib/cjs/components/Groups/Editing/GroupAction.js.map +1 -1
  27. package/lib/cjs/components/Groups/Editing/GroupDetails.d.ts +0 -1
  28. package/lib/cjs/components/Groups/Editing/GroupDetailsActionPanel.d.ts +0 -1
  29. package/lib/cjs/components/Groups/Editing/GroupDetailsStep.d.ts +0 -1
  30. package/lib/cjs/components/Groups/GroupColorLegend.d.ts +0 -1
  31. package/lib/cjs/components/Groups/GroupListItem.d.ts +0 -1
  32. package/lib/cjs/components/Groups/GroupListItem.js.map +1 -1
  33. package/lib/cjs/components/Groups/GroupMenuActions.d.ts +0 -1
  34. package/lib/cjs/components/Groups/GroupMenuActions.js.map +1 -1
  35. package/lib/cjs/components/Groups/GroupOverlapProgressBar.d.ts +0 -1
  36. package/lib/cjs/components/Groups/Groups.js.map +1 -1
  37. package/lib/cjs/components/Groups/GroupsAddButton.d.ts +0 -1
  38. package/lib/cjs/components/Groups/GroupsShowHideButtons.d.ts +0 -1
  39. package/lib/cjs/components/Groups/GroupsShowHideButtons.js.map +1 -1
  40. package/lib/cjs/components/Groups/GroupsView.d.ts +1 -1
  41. package/lib/cjs/components/Groups/GroupsVisualization.d.ts +0 -1
  42. package/lib/cjs/components/Groups/GroupsVisualization.js.map +1 -1
  43. package/lib/cjs/components/Groups/GroupsVisualizationActions.d.ts +0 -1
  44. package/lib/cjs/components/Groups/GroupsVisualizationActions.js.map +1 -1
  45. package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.d.ts +0 -1
  46. package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.js +28 -9
  47. package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.js.map +1 -1
  48. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilder.js +36 -33
  49. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilder.js.map +1 -1
  50. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderActionPanel.d.ts +0 -1
  51. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderCustomUI.d.ts +0 -1
  52. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderCustomUI.js.map +1 -1
  53. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderStep.d.ts +0 -1
  54. package/lib/cjs/components/Groups/ToggleGroupVisibility.d.ts +0 -1
  55. package/lib/cjs/components/Groups/groupsHelpers.d.ts +1 -1
  56. package/lib/cjs/components/Groups/groupsHelpers.js.map +1 -1
  57. package/lib/cjs/components/Groups/hooks/useGroupsOperations.d.ts +0 -1
  58. package/lib/cjs/components/Groups/hooks/useGroupsOperations.js.map +1 -1
  59. package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.js +1 -2
  60. package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.js.map +1 -1
  61. package/lib/cjs/components/Groups/hooks/useVisualization.d.ts +0 -1
  62. package/lib/cjs/components/Groups/hooks/useVisualization.js.map +1 -1
  63. package/lib/cjs/components/Mappings/BlockingOverlay.d.ts +0 -1
  64. package/lib/cjs/components/Mappings/Editing/MappingAction.d.ts +0 -1
  65. package/lib/cjs/components/Mappings/Editing/MappingAction.js.map +1 -1
  66. package/lib/cjs/components/Mappings/Extraction/ExtractionLogCustomFilter.js +1 -2
  67. package/lib/cjs/components/Mappings/Extraction/ExtractionLogCustomFilter.js.map +1 -1
  68. package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.d.ts +0 -1
  69. package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.js +8 -0
  70. package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.js.map +1 -1
  71. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/QueuedExtractionState.d.ts +0 -1
  72. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/RunningExtractionState.d.ts +0 -1
  73. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/StartingExtractionState.d.ts +0 -1
  74. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/TerminalExtractionState.d.ts +0 -1
  75. package/lib/cjs/components/Mappings/Extraction/ExtractionStatus.d.ts +0 -1
  76. package/lib/cjs/components/Mappings/Extraction/ExtractionStatus.js +1 -1
  77. package/lib/cjs/components/Mappings/Extraction/ExtractionStatus.js.map +1 -1
  78. package/lib/cjs/components/Mappings/Extraction/ExtractionStatusIcon.d.ts +1 -2
  79. package/lib/cjs/components/Mappings/Import/ConfirmMappingsImport.js.map +1 -1
  80. package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.d.ts +0 -1
  81. package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.js +1 -2
  82. package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.js.map +1 -1
  83. package/lib/cjs/components/Mappings/Import/SelectIModel.d.ts +0 -1
  84. package/lib/cjs/components/Mappings/Import/SelectIModel.js.map +1 -1
  85. package/lib/cjs/components/Mappings/Import/SelectITwin.d.ts +0 -1
  86. package/lib/cjs/components/Mappings/Import/SelectITwin.js +1 -1
  87. package/lib/cjs/components/Mappings/Import/SelectITwin.js.map +1 -1
  88. package/lib/cjs/components/Mappings/Import/SelectMappings.d.ts +0 -1
  89. package/lib/cjs/components/Mappings/MappingListItem.d.ts +0 -1
  90. package/lib/cjs/components/Mappings/MappingListItem.js +1 -2
  91. package/lib/cjs/components/Mappings/MappingListItem.js.map +1 -1
  92. package/lib/cjs/components/Mappings/MappingViewActionGroup.d.ts +0 -1
  93. package/lib/cjs/components/Mappings/Mappings.d.ts +1 -2
  94. package/lib/cjs/components/Mappings/MappingsView.js +1 -1
  95. package/lib/cjs/components/Mappings/MappingsView.js.map +1 -1
  96. package/lib/cjs/components/Mappings/hooks/useFetchExtractionStatus.js.map +1 -1
  97. package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.d.ts +1 -2
  98. package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.js +1 -1
  99. package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.js.map +1 -1
  100. package/lib/cjs/components/Mappings/hooks/useMappingsOperations.d.ts +0 -1
  101. package/lib/cjs/components/Mappings/hooks/useMappingsOperations.js.map +1 -1
  102. package/lib/cjs/components/Mappings/hooks/useRunExtraction.d.ts +0 -1
  103. package/lib/cjs/components/Mappings/hooks/useRunExtraction.js.map +1 -1
  104. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.d.ts +2 -3
  105. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.js +1 -1
  106. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.js.map +1 -1
  107. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.d.ts +0 -1
  108. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js +17 -4
  109. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js.map +1 -1
  110. package/lib/cjs/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.d.ts +0 -1
  111. package/lib/cjs/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.js.map +1 -1
  112. package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.d.ts +0 -1
  113. package/lib/cjs/components/Properties/GroupColorToggle.d.ts +1 -2
  114. package/lib/cjs/components/Properties/GroupColorToggle.js.map +1 -1
  115. package/lib/cjs/components/Properties/GroupInformationPanel.d.ts +0 -1
  116. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.d.ts +0 -1
  117. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
  118. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyListItem.d.ts +0 -1
  119. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyTable.d.ts +0 -1
  120. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyUtils.js.map +1 -1
  121. package/lib/cjs/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.d.ts +0 -1
  122. package/lib/cjs/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js +4 -6
  123. package/lib/cjs/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js.map +1 -1
  124. package/lib/cjs/components/Properties/GroupProperties/SaveModal.d.ts +0 -1
  125. package/lib/cjs/components/Properties/GroupProperties/SortableHorizontalTile.d.ts +0 -1
  126. package/lib/cjs/components/Properties/GroupProperties/SortableHorizontalTile.js.map +1 -1
  127. package/lib/cjs/components/Properties/PropertyAction.d.ts +0 -1
  128. package/lib/cjs/components/Properties/PropertyAction.js +7 -3
  129. package/lib/cjs/components/Properties/PropertyAction.js.map +1 -1
  130. package/lib/cjs/components/Properties/PropertyMenu.d.ts +0 -1
  131. package/lib/cjs/components/Properties/PropertyMenuWithVisualization.d.ts +0 -1
  132. package/lib/cjs/components/Properties/PropertyNameCell.d.ts +0 -1
  133. package/lib/cjs/components/Properties/PropertyTable.d.ts +0 -1
  134. package/lib/cjs/components/Properties/PropertyTableToolbar.d.ts +0 -1
  135. package/lib/cjs/components/Properties/ScrollableExpandableBlock.js.map +1 -1
  136. package/lib/cjs/components/Properties/hooks/useFormulaValidation.js +2 -2
  137. package/lib/cjs/components/Properties/hooks/useFormulaValidation.js.map +1 -1
  138. package/lib/cjs/components/Properties/hooks/useForwardRef.js.map +1 -1
  139. package/lib/cjs/components/Properties/hooks/useValidator.js.map +1 -1
  140. package/lib/cjs/components/SharedComponents/ActionPanel.d.ts +0 -1
  141. package/lib/cjs/components/SharedComponents/DeleteModal.d.ts +0 -1
  142. package/lib/cjs/components/SharedComponents/EmptyMessage.d.ts +0 -1
  143. package/lib/cjs/components/SharedComponents/LoadingOverlay.d.ts +0 -1
  144. package/lib/cjs/components/SharedComponents/LoadingSpinner.d.ts +0 -1
  145. package/lib/cjs/components/SharedComponents/StatusIcon.d.ts +1 -1
  146. package/lib/cjs/components/context/ExtractionClientContext.d.ts +0 -1
  147. package/lib/cjs/components/context/ExtractionClientContext.js.map +1 -1
  148. package/lib/cjs/components/context/ExtractionStateJobContext.js.map +1 -1
  149. package/lib/cjs/components/context/GroupHilitedElementsContext.js.map +1 -1
  150. package/lib/cjs/components/context/GroupingApiConfigContext.d.ts +2 -2
  151. package/lib/cjs/components/context/GroupingApiConfigContext.js.map +1 -1
  152. package/lib/cjs/components/context/GroupingMappingCustomUIContext.d.ts +0 -1
  153. package/lib/cjs/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  154. package/lib/cjs/components/context/GroupsClientContext.d.ts +0 -1
  155. package/lib/cjs/components/context/GroupsClientContext.js.map +1 -1
  156. package/lib/cjs/components/context/IModelsClientContext.d.ts +0 -1
  157. package/lib/cjs/components/context/IModelsClientContext.js.map +1 -1
  158. package/lib/cjs/components/context/ITwinsClientContext.d.ts +0 -1
  159. package/lib/cjs/components/context/ITwinsClientContext.js.map +1 -1
  160. package/lib/cjs/components/context/MappingClientContext.d.ts +0 -1
  161. package/lib/cjs/components/context/MappingClientContext.js.map +1 -1
  162. package/lib/cjs/components/context/PropertiesClientContext.d.ts +0 -1
  163. package/lib/cjs/components/context/PropertiesClientContext.js.map +1 -1
  164. package/lib/cjs/components/context/PropertiesGroupColorContext.js.map +1 -1
  165. package/lib/cjs/components/context/PropertyGridWrapperContext.d.ts +1 -0
  166. package/lib/cjs/components/context/PropertyGridWrapperContext.js.map +1 -1
  167. package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.d.ts +0 -1
  168. package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.js +2 -1
  169. package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  170. package/lib/cjs/components/customUI/GroupingMappingCustomUI.d.ts +1 -1
  171. package/lib/cjs/components/customUI/GroupingMappingCustomUI.js +1 -1
  172. package/lib/cjs/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  173. package/lib/cjs/components/customUI/ManualGroupingCustomUI.d.ts +0 -1
  174. package/lib/cjs/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  175. package/lib/cjs/components/customUI/SearchGroupingCustomUI.d.ts +0 -1
  176. package/lib/cjs/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  177. package/lib/cjs/decorators/BboxDimensionsDecorator.d.ts +2 -0
  178. package/lib/cjs/decorators/BboxDimensionsDecorator.js +80 -29
  179. package/lib/cjs/decorators/BboxDimensionsDecorator.js.map +1 -1
  180. package/lib/cjs/formula/FormulaDataTypeResolver.js +1 -2
  181. package/lib/cjs/formula/FormulaDataTypeResolver.js.map +1 -1
  182. package/lib/cjs/formula/FormulaFunctionProvider.js +3 -4
  183. package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -1
  184. package/lib/cjs/formula/FormulaOperatorsProvider.js +11 -11
  185. package/lib/cjs/formula/FormulaOperatorsProvider.js.map +1 -1
  186. package/lib/cjs/formula/FormulaSplitter.js +1 -2
  187. package/lib/cjs/formula/FormulaSplitter.js.map +1 -1
  188. package/lib/cjs/formula/FormulaTokensDataTypeResolver.js +1 -2
  189. package/lib/cjs/formula/FormulaTokensDataTypeResolver.js.map +1 -1
  190. package/lib/cjs/formula/InfixToPostfixConverter.js +3 -3
  191. package/lib/cjs/formula/InfixToPostfixConverter.js.map +1 -1
  192. package/lib/cjs/formula/InputStream.js +3 -2
  193. package/lib/cjs/formula/InputStream.js.map +1 -1
  194. package/lib/cjs/formula/ParenthesisValidator.js +3 -3
  195. package/lib/cjs/formula/ParenthesisValidator.js.map +1 -1
  196. package/lib/cjs/formula/Queue.js +1 -0
  197. package/lib/cjs/formula/Queue.js.map +1 -1
  198. package/lib/cjs/formula/Stack.js +2 -3
  199. package/lib/cjs/formula/Stack.js.map +1 -1
  200. package/lib/cjs/formula/StringBuilder.js +1 -0
  201. package/lib/cjs/formula/StringBuilder.js.map +1 -1
  202. package/lib/cjs/formula/Types.d.ts +4 -4
  203. package/lib/cjs/formula/Utils.js +6 -7
  204. package/lib/cjs/formula/Utils.js.map +1 -1
  205. package/lib/cjs/test/CalculatedPropertyActionWithVisuals.test.d.ts +2 -0
  206. package/lib/cjs/test/CalculatedPropertyActionWithVisuals.test.js +137 -0
  207. package/lib/cjs/test/CalculatedPropertyActionWithVisuals.test.js.map +1 -0
  208. package/lib/cjs/test/GroupingMappingCustomUI.test.d.ts +1 -1
  209. package/lib/cjs/test/GroupingMappingCustomUI.test.js +37 -28
  210. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  211. package/lib/cjs/test/MockFactory.d.ts +1 -1
  212. package/lib/cjs/test/MockFactory.js.map +1 -1
  213. package/lib/cjs/test/PropertyFieldsHelpers.d.ts +22 -20
  214. package/lib/cjs/test/QueryBuilder.test.js.map +1 -1
  215. package/lib/cjs/test/WidgetHeader.test.d.ts +1 -1
  216. package/lib/cjs/test/WidgetHeader.test.js +2 -2
  217. package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
  218. package/lib/cjs/test/setup.d.ts +1 -1
  219. package/lib/cjs/test/setup.js +1 -0
  220. package/lib/cjs/test/setup.js.map +1 -1
  221. package/lib/cjs/test/test-utils.d.ts +3 -3
  222. package/lib/cjs/test/test-utils.js +12 -6
  223. package/lib/cjs/test/test-utils.js.map +1 -1
  224. package/lib/esm/GroupingMappingWidget.js +15 -28
  225. package/lib/esm/GroupingMappingWidget.js.map +1 -1
  226. package/lib/esm/WidgetShell/GroupingMapping.d.ts +1 -2
  227. package/lib/esm/WidgetShell/GroupingMappingContent.d.ts +2 -3
  228. package/lib/esm/WidgetShell/GroupingMappingContent.js.map +1 -1
  229. package/lib/esm/WidgetShell/GroupingMappingHeader.d.ts +0 -1
  230. package/lib/esm/WidgetShell/GroupingMappingWidget.js +2 -1
  231. package/lib/esm/WidgetShell/GroupingMappingWidget.js.map +1 -1
  232. package/lib/esm/WidgetShell/Router/GroupingMappingRouter.d.ts +2 -3
  233. package/lib/esm/WidgetShell/Router/GroupingMappingRouter.js.map +1 -1
  234. package/lib/esm/WidgetShell/WidgetHeader/WidgetHeader.d.ts +0 -1
  235. package/lib/esm/common/hooks/useIsMounted.d.ts +0 -1
  236. package/lib/esm/common/hooks/useMemoizedCollectionPick.js.map +1 -1
  237. package/lib/esm/common/utils.d.ts +1 -1
  238. package/lib/esm/common/utils.js +8 -19
  239. package/lib/esm/common/utils.js.map +1 -1
  240. package/lib/esm/common/viewerUtils.js.map +1 -1
  241. package/lib/esm/components/GroupingMappingContext.js.map +1 -1
  242. package/lib/esm/components/Groups/Editing/GroupAction.d.ts +0 -1
  243. package/lib/esm/components/Groups/Editing/GroupAction.js +9 -5
  244. package/lib/esm/components/Groups/Editing/GroupAction.js.map +1 -1
  245. package/lib/esm/components/Groups/Editing/GroupDetails.d.ts +0 -1
  246. package/lib/esm/components/Groups/Editing/GroupDetailsActionPanel.d.ts +0 -1
  247. package/lib/esm/components/Groups/Editing/GroupDetailsStep.d.ts +0 -1
  248. package/lib/esm/components/Groups/GroupColorLegend.d.ts +0 -1
  249. package/lib/esm/components/Groups/GroupListItem.d.ts +0 -1
  250. package/lib/esm/components/Groups/GroupListItem.js.map +1 -1
  251. package/lib/esm/components/Groups/GroupMenuActions.d.ts +0 -1
  252. package/lib/esm/components/Groups/GroupMenuActions.js.map +1 -1
  253. package/lib/esm/components/Groups/GroupOverlapProgressBar.d.ts +0 -1
  254. package/lib/esm/components/Groups/Groups.js.map +1 -1
  255. package/lib/esm/components/Groups/GroupsAddButton.d.ts +0 -1
  256. package/lib/esm/components/Groups/GroupsShowHideButtons.d.ts +0 -1
  257. package/lib/esm/components/Groups/GroupsShowHideButtons.js.map +1 -1
  258. package/lib/esm/components/Groups/GroupsView.d.ts +1 -1
  259. package/lib/esm/components/Groups/GroupsVisualization.d.ts +0 -1
  260. package/lib/esm/components/Groups/GroupsVisualization.js.map +1 -1
  261. package/lib/esm/components/Groups/GroupsVisualizationActions.d.ts +0 -1
  262. package/lib/esm/components/Groups/GroupsVisualizationActions.js.map +1 -1
  263. package/lib/esm/components/Groups/OverlappedElementsInformationPanel.d.ts +0 -1
  264. package/lib/esm/components/Groups/OverlappedElementsInformationPanel.js +1 -2
  265. package/lib/esm/components/Groups/OverlappedElementsInformationPanel.js.map +1 -1
  266. package/lib/esm/components/Groups/QueryBuilder/QueryBuilder.js +36 -33
  267. package/lib/esm/components/Groups/QueryBuilder/QueryBuilder.js.map +1 -1
  268. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderActionPanel.d.ts +0 -1
  269. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderCustomUI.d.ts +0 -1
  270. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderCustomUI.js.map +1 -1
  271. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderStep.d.ts +0 -1
  272. package/lib/esm/components/Groups/ToggleGroupVisibility.d.ts +0 -1
  273. package/lib/esm/components/Groups/groupsHelpers.d.ts +1 -1
  274. package/lib/esm/components/Groups/groupsHelpers.js.map +1 -1
  275. package/lib/esm/components/Groups/hooks/useGroupsOperations.d.ts +0 -1
  276. package/lib/esm/components/Groups/hooks/useGroupsOperations.js.map +1 -1
  277. package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.js +1 -2
  278. package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.js.map +1 -1
  279. package/lib/esm/components/Groups/hooks/useVisualization.d.ts +0 -1
  280. package/lib/esm/components/Groups/hooks/useVisualization.js.map +1 -1
  281. package/lib/esm/components/Mappings/BlockingOverlay.d.ts +0 -1
  282. package/lib/esm/components/Mappings/Editing/MappingAction.d.ts +0 -1
  283. package/lib/esm/components/Mappings/Editing/MappingAction.js.map +1 -1
  284. package/lib/esm/components/Mappings/Extraction/ExtractionLogCustomFilter.js.map +1 -1
  285. package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.d.ts +0 -1
  286. package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.js +8 -0
  287. package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.js.map +1 -1
  288. package/lib/esm/components/Mappings/Extraction/ExtractionStates/QueuedExtractionState.d.ts +0 -1
  289. package/lib/esm/components/Mappings/Extraction/ExtractionStates/RunningExtractionState.d.ts +0 -1
  290. package/lib/esm/components/Mappings/Extraction/ExtractionStates/StartingExtractionState.d.ts +0 -1
  291. package/lib/esm/components/Mappings/Extraction/ExtractionStates/TerminalExtractionState.d.ts +0 -1
  292. package/lib/esm/components/Mappings/Extraction/ExtractionStatus.d.ts +0 -1
  293. package/lib/esm/components/Mappings/Extraction/ExtractionStatus.js.map +1 -1
  294. package/lib/esm/components/Mappings/Extraction/ExtractionStatusIcon.d.ts +1 -2
  295. package/lib/esm/components/Mappings/Import/ConfirmMappingsImport.js.map +1 -1
  296. package/lib/esm/components/Mappings/Import/MappingImportWizardModal.d.ts +0 -1
  297. package/lib/esm/components/Mappings/Import/MappingImportWizardModal.js +1 -2
  298. package/lib/esm/components/Mappings/Import/MappingImportWizardModal.js.map +1 -1
  299. package/lib/esm/components/Mappings/Import/SelectIModel.d.ts +0 -1
  300. package/lib/esm/components/Mappings/Import/SelectIModel.js.map +1 -1
  301. package/lib/esm/components/Mappings/Import/SelectITwin.d.ts +0 -1
  302. package/lib/esm/components/Mappings/Import/SelectITwin.js.map +1 -1
  303. package/lib/esm/components/Mappings/Import/SelectMappings.d.ts +0 -1
  304. package/lib/esm/components/Mappings/MappingListItem.d.ts +0 -1
  305. package/lib/esm/components/Mappings/MappingListItem.js +1 -2
  306. package/lib/esm/components/Mappings/MappingListItem.js.map +1 -1
  307. package/lib/esm/components/Mappings/MappingViewActionGroup.d.ts +0 -1
  308. package/lib/esm/components/Mappings/Mappings.d.ts +1 -2
  309. package/lib/esm/components/Mappings/MappingsView.js +1 -1
  310. package/lib/esm/components/Mappings/MappingsView.js.map +1 -1
  311. package/lib/esm/components/Mappings/hooks/useFetchExtractionStatus.js.map +1 -1
  312. package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.d.ts +1 -2
  313. package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.js +1 -1
  314. package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.js.map +1 -1
  315. package/lib/esm/components/Mappings/hooks/useMappingsOperations.d.ts +0 -1
  316. package/lib/esm/components/Mappings/hooks/useMappingsOperations.js.map +1 -1
  317. package/lib/esm/components/Mappings/hooks/useRunExtraction.d.ts +0 -1
  318. package/lib/esm/components/Mappings/hooks/useRunExtraction.js.map +1 -1
  319. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.d.ts +2 -3
  320. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.js +1 -1
  321. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.js.map +1 -1
  322. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.d.ts +0 -1
  323. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js +17 -4
  324. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js.map +1 -1
  325. package/lib/esm/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.d.ts +0 -1
  326. package/lib/esm/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.js.map +1 -1
  327. package/lib/esm/components/Properties/CustomCalculations/CustomCalculationAction.d.ts +0 -1
  328. package/lib/esm/components/Properties/GroupColorToggle.d.ts +1 -2
  329. package/lib/esm/components/Properties/GroupColorToggle.js.map +1 -1
  330. package/lib/esm/components/Properties/GroupInformationPanel.d.ts +0 -1
  331. package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.d.ts +0 -1
  332. package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
  333. package/lib/esm/components/Properties/GroupProperties/GroupPropertyListItem.d.ts +0 -1
  334. package/lib/esm/components/Properties/GroupProperties/GroupPropertyTable.d.ts +0 -1
  335. package/lib/esm/components/Properties/GroupProperties/GroupPropertyUtils.js.map +1 -1
  336. package/lib/esm/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.d.ts +0 -1
  337. package/lib/esm/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js +2 -4
  338. package/lib/esm/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js.map +1 -1
  339. package/lib/esm/components/Properties/GroupProperties/SaveModal.d.ts +0 -1
  340. package/lib/esm/components/Properties/GroupProperties/SortableHorizontalTile.d.ts +0 -1
  341. package/lib/esm/components/Properties/GroupProperties/SortableHorizontalTile.js.map +1 -1
  342. package/lib/esm/components/Properties/PropertyAction.d.ts +0 -1
  343. package/lib/esm/components/Properties/PropertyAction.js +7 -3
  344. package/lib/esm/components/Properties/PropertyAction.js.map +1 -1
  345. package/lib/esm/components/Properties/PropertyMenu.d.ts +0 -1
  346. package/lib/esm/components/Properties/PropertyMenuWithVisualization.d.ts +0 -1
  347. package/lib/esm/components/Properties/PropertyNameCell.d.ts +0 -1
  348. package/lib/esm/components/Properties/PropertyTable.d.ts +0 -1
  349. package/lib/esm/components/Properties/PropertyTableToolbar.d.ts +0 -1
  350. package/lib/esm/components/Properties/ScrollableExpandableBlock.js.map +1 -1
  351. package/lib/esm/components/Properties/hooks/useFormulaValidation.js.map +1 -1
  352. package/lib/esm/components/Properties/hooks/useForwardRef.js.map +1 -1
  353. package/lib/esm/components/Properties/hooks/useValidator.js.map +1 -1
  354. package/lib/esm/components/SharedComponents/ActionPanel.d.ts +0 -1
  355. package/lib/esm/components/SharedComponents/DeleteModal.d.ts +0 -1
  356. package/lib/esm/components/SharedComponents/EmptyMessage.d.ts +0 -1
  357. package/lib/esm/components/SharedComponents/LoadingOverlay.d.ts +0 -1
  358. package/lib/esm/components/SharedComponents/LoadingSpinner.d.ts +0 -1
  359. package/lib/esm/components/SharedComponents/StatusIcon.d.ts +1 -1
  360. package/lib/esm/components/context/ExtractionClientContext.d.ts +0 -1
  361. package/lib/esm/components/context/ExtractionClientContext.js.map +1 -1
  362. package/lib/esm/components/context/ExtractionStateJobContext.js.map +1 -1
  363. package/lib/esm/components/context/GroupHilitedElementsContext.js.map +1 -1
  364. package/lib/esm/components/context/GroupingApiConfigContext.d.ts +2 -2
  365. package/lib/esm/components/context/GroupingApiConfigContext.js.map +1 -1
  366. package/lib/esm/components/context/GroupingMappingCustomUIContext.d.ts +0 -1
  367. package/lib/esm/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  368. package/lib/esm/components/context/GroupsClientContext.d.ts +0 -1
  369. package/lib/esm/components/context/GroupsClientContext.js.map +1 -1
  370. package/lib/esm/components/context/IModelsClientContext.d.ts +0 -1
  371. package/lib/esm/components/context/IModelsClientContext.js.map +1 -1
  372. package/lib/esm/components/context/ITwinsClientContext.d.ts +0 -1
  373. package/lib/esm/components/context/ITwinsClientContext.js.map +1 -1
  374. package/lib/esm/components/context/MappingClientContext.d.ts +0 -1
  375. package/lib/esm/components/context/MappingClientContext.js.map +1 -1
  376. package/lib/esm/components/context/PropertiesClientContext.d.ts +0 -1
  377. package/lib/esm/components/context/PropertiesClientContext.js.map +1 -1
  378. package/lib/esm/components/context/PropertiesGroupColorContext.js.map +1 -1
  379. package/lib/esm/components/context/PropertyGridWrapperContext.d.ts +1 -0
  380. package/lib/esm/components/context/PropertyGridWrapperContext.js.map +1 -1
  381. package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.d.ts +0 -1
  382. package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.js +2 -1
  383. package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  384. package/lib/esm/components/customUI/GroupingMappingCustomUI.d.ts +1 -1
  385. package/lib/esm/components/customUI/ManualGroupingCustomUI.d.ts +0 -1
  386. package/lib/esm/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  387. package/lib/esm/components/customUI/SearchGroupingCustomUI.d.ts +0 -1
  388. package/lib/esm/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  389. package/lib/esm/decorators/BboxDimensionsDecorator.d.ts +2 -0
  390. package/lib/esm/decorators/BboxDimensionsDecorator.js +79 -28
  391. package/lib/esm/decorators/BboxDimensionsDecorator.js.map +1 -1
  392. package/lib/esm/formula/FormulaDataTypeResolver.js.map +1 -1
  393. package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -1
  394. package/lib/esm/formula/FormulaOperatorsProvider.js.map +1 -1
  395. package/lib/esm/formula/FormulaSplitter.js.map +1 -1
  396. package/lib/esm/formula/FormulaTokensDataTypeResolver.js.map +1 -1
  397. package/lib/esm/formula/InfixToPostfixConverter.js.map +1 -1
  398. package/lib/esm/formula/InputStream.js +3 -2
  399. package/lib/esm/formula/InputStream.js.map +1 -1
  400. package/lib/esm/formula/ParenthesisValidator.js.map +1 -1
  401. package/lib/esm/formula/Queue.js +1 -0
  402. package/lib/esm/formula/Queue.js.map +1 -1
  403. package/lib/esm/formula/Stack.js +2 -3
  404. package/lib/esm/formula/Stack.js.map +1 -1
  405. package/lib/esm/formula/StringBuilder.js +1 -0
  406. package/lib/esm/formula/StringBuilder.js.map +1 -1
  407. package/lib/esm/formula/Types.d.ts +4 -4
  408. package/lib/esm/test/CalculatedPropertyActionWithVisuals.test.d.ts +2 -0
  409. package/lib/esm/test/CalculatedPropertyActionWithVisuals.test.js +132 -0
  410. package/lib/esm/test/CalculatedPropertyActionWithVisuals.test.js.map +1 -0
  411. package/lib/esm/test/GroupingMappingCustomUI.test.d.ts +1 -1
  412. package/lib/esm/test/GroupingMappingCustomUI.test.js +37 -28
  413. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  414. package/lib/esm/test/MockFactory.d.ts +1 -1
  415. package/lib/esm/test/MockFactory.js.map +1 -1
  416. package/lib/esm/test/PropertyFieldsHelpers.d.ts +22 -20
  417. package/lib/esm/test/QueryBuilder.test.js.map +1 -1
  418. package/lib/esm/test/WidgetHeader.test.d.ts +1 -1
  419. package/lib/esm/test/WidgetHeader.test.js +2 -2
  420. package/lib/esm/test/WidgetHeader.test.js.map +1 -1
  421. package/lib/esm/test/setup.d.ts +1 -1
  422. package/lib/esm/test/setup.js +1 -0
  423. package/lib/esm/test/setup.js.map +1 -1
  424. package/lib/esm/test/test-utils.d.ts +3 -3
  425. package/lib/esm/test/test-utils.js +3 -2
  426. package/lib/esm/test/test-utils.js.map +1 -1
  427. package/package.json +43 -66
@@ -1,6 +1,26 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
4
24
  };
5
25
  Object.defineProperty(exports, "__esModule", { value: true });
6
26
  exports.OverlappedElementsInformationPanel = void 0;
@@ -8,18 +28,17 @@ exports.OverlappedElementsInformationPanel = void 0;
8
28
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
9
29
  * See LICENSE.md in the project root for license terms and full copyright notice.
10
30
  *--------------------------------------------------------------------------------------------*/
11
- const react_1 = __importDefault(require("react"));
12
- const react_2 = require("react");
31
+ const react_1 = __importStar(require("react"));
13
32
  const itwinui_react_1 = require("@itwin/itwinui-react");
14
33
  require("./OverlappedElementsInformationPanel.scss");
15
34
  const GroupHilitedElementsContext_1 = require("../context/GroupHilitedElementsContext");
16
35
  const viewerUtils_1 = require("../../common/viewerUtils");
17
36
  const GroupingMappingWidget_1 = require("../../GroupingMappingWidget");
18
37
  const OverlappedElementsInformationPanel = ({ group, onClose, overlappedElementsInfo, groups }) => {
19
- const [isOverlappedInfoLoading, setIsOverlappedInfoLoading] = (0, react_2.useState)(false);
38
+ const [isOverlappedInfoLoading, setIsOverlappedInfoLoading] = (0, react_1.useState)(false);
20
39
  const { setIsOverlappedColored } = (0, GroupHilitedElementsContext_1.useGroupHilitedElementsContext)();
21
- const [isLoading, setIsLoading] = (0, react_2.useState)(false);
22
- const columns = (0, react_2.useMemo)(() => [
40
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
41
+ const columns = (0, react_1.useMemo)(() => [
23
42
  {
24
43
  id: "number",
25
44
  Header: GroupingMappingWidget_1.GroupingMappingWidget.translate("groups.overlappedElements"),
@@ -36,7 +55,7 @@ const OverlappedElementsInformationPanel = ({ group, onClose, overlappedElements
36
55
  ], []);
37
56
  const key = group ? group.id : "";
38
57
  const overlappedInfo = overlappedElementsInfo.get(key);
39
- const arr = (0, react_2.useMemo)(() => {
58
+ const arr = (0, react_1.useMemo)(() => {
40
59
  setIsOverlappedInfoLoading(true);
41
60
  const result = [];
42
61
  if (overlappedInfo) {
@@ -63,7 +82,7 @@ const OverlappedElementsInformationPanel = ({ group, onClose, overlappedElements
63
82
  setIsOverlappedColored(false);
64
83
  onClose();
65
84
  };
66
- const onSelect = (0, react_2.useCallback)(async (selectedData) => {
85
+ const onSelect = (0, react_1.useCallback)(async (selectedData) => {
67
86
  try {
68
87
  setIsLoading(true);
69
88
  (0, viewerUtils_1.clearEmphasizedOverriddenElements)();
@@ -1 +1 @@
1
- {"version":3,"file":"OverlappedElementsInformationPanel.js","sourceRoot":"","sources":["../../../../src/components/Groups/OverlappedElementsInformationPanel.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 { useCallback, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../../common/utils\";\nimport { InformationPanel, InformationPanelBody, InformationPanelHeader, Table, Text, toaster } from \"@itwin/itwinui-react\";\nimport \"./OverlappedElementsInformationPanel.scss\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport type { OverlappedInfo } from \"../context/GroupHilitedElementsContext\";\nimport type { CellProps, Column } from \"react-table\";\nimport { useGroupHilitedElementsContext } from \"../context/GroupHilitedElementsContext\";\nimport { clearEmphasizedOverriddenElements, clearHiddenElements, visualizeElements, zoomToElements } from \"../../common/viewerUtils\";\nimport { GroupingMappingWidget } from \"../../GroupingMappingWidget\";\n\nexport interface OverlappedElementsInformationPanelProps {\n group?: GroupMinimal;\n onClose: () => void;\n overlappedElementsInfo: Map<string, OverlappedInfo[]>;\n groups: GroupMinimal[];\n}\n\nexport interface OverlappedElementsDisplayProps {\n overlappedElements: string;\n groups: string[];\n elementsIds: string[];\n}\ntype OverlappedTyped = CreateTypeFromInterface<OverlappedElementsDisplayProps>;\n\nexport const OverlappedElementsInformationPanel = ({ group, onClose, overlappedElementsInfo, groups }: OverlappedElementsInformationPanelProps) => {\n const [isOverlappedInfoLoading, setIsOverlappedInfoLoading] = useState<boolean>(false);\n const { setIsOverlappedColored } = useGroupHilitedElementsContext();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const columns = useMemo(\n (): Column<OverlappedTyped>[] => [\n {\n id: \"number\",\n Header: GroupingMappingWidget.translate(\"groups.overlappedElements\"),\n accessor: \"overlappedElements\",\n },\n {\n id: \"groups\",\n Header: GroupingMappingWidget.translate(\"groups.overlappedGroups\"),\n accessor: \"groups\",\n Cell: (value: CellProps<OverlappedTyped>) => {\n return (\n <div>\n {value.row.original.groups.map((groupName, index) => (\n <div key={index}>{groupName}</div>\n ))}\n </div>\n );\n },\n },\n ],\n [],\n );\n\n const key = group ? group.id : \"\";\n const overlappedInfo = overlappedElementsInfo.get(key);\n\n const arr: OverlappedElementsDisplayProps[] = useMemo(() => {\n setIsOverlappedInfoLoading(true);\n const result: OverlappedElementsDisplayProps[] = [];\n if (overlappedInfo) {\n setIsOverlappedColored(true);\n overlappedInfo.forEach((array) => {\n const groupNames: string[] = [];\n array.groupIds.forEach((groupId) => {\n const group = groups.find((group) => group.id === groupId);\n if (group) {\n groupNames.push(group.groupName);\n }\n });\n result.push({\n overlappedElements: array.elements.length.toString(),\n groups: groupNames,\n elementsIds: array.elements,\n });\n });\n }\n setIsOverlappedInfoLoading(false);\n return result;\n }, [overlappedInfo, groups, setIsOverlappedColored]);\n\n const handleClose = () => {\n setIsOverlappedColored(false);\n onClose();\n };\n\n const onSelect = useCallback(async (selectedData: CreateTypeFromInterface<OverlappedElementsDisplayProps>[] | undefined) => {\n try {\n setIsLoading(true);\n clearEmphasizedOverriddenElements();\n clearHiddenElements();\n if (selectedData && selectedData.length !== 0) {\n visualizeElements(selectedData[0].elementsIds, \"red\");\n await zoomToElements(selectedData[0].elementsIds);\n }\n } catch (error) {\n toaster.negative(GroupingMappingWidget.translate(\"groups.visualizingOverlappedError\"));\n /* eslint-disable no-console */\n console.error(error);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n return (\n <InformationPanel isOpen={!!group} className=\"gmw-overlap-information\">\n <InformationPanelHeader onClose={handleClose}>\n <Text variant=\"leading\">{GroupingMappingWidget.translate(\"groups.overlapInfoOf\", { groupName: group?.groupName ?? \"\" })}</Text>\n </InformationPanelHeader>\n <InformationPanelBody className=\"gmw-information-body\">\n <Table<OverlappedTyped>\n columns={columns}\n data={arr}\n emptyTableContent={GroupingMappingWidget.translate(\"groups.noOverlaps\")}\n isLoading={isOverlappedInfoLoading}\n isSortable={true}\n isSelectable\n selectionMode=\"single\"\n onSelect={onSelect}\n isRowDisabled={() => isLoading}\n />\n </InformationPanelBody>\n </InformationPanel>\n );\n};\n"]}
1
+ {"version":3,"file":"OverlappedElementsInformationPanel.js","sourceRoot":"","sources":["../../../../src/components/Groups/OverlappedElementsInformationPanel.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, { useCallback, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../../common/utils\";\nimport { InformationPanel, InformationPanelBody, InformationPanelHeader, Table, Text, toaster } from \"@itwin/itwinui-react\";\nimport \"./OverlappedElementsInformationPanel.scss\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport type { OverlappedInfo } from \"../context/GroupHilitedElementsContext\";\nimport type { CellProps, Column } from \"react-table\";\nimport { useGroupHilitedElementsContext } from \"../context/GroupHilitedElementsContext\";\nimport { clearEmphasizedOverriddenElements, clearHiddenElements, visualizeElements, zoomToElements } from \"../../common/viewerUtils\";\nimport { GroupingMappingWidget } from \"../../GroupingMappingWidget\";\n\nexport interface OverlappedElementsInformationPanelProps {\n group?: GroupMinimal;\n onClose: () => void;\n overlappedElementsInfo: Map<string, OverlappedInfo[]>;\n groups: GroupMinimal[];\n}\n\nexport interface OverlappedElementsDisplayProps {\n overlappedElements: string;\n groups: string[];\n elementsIds: string[];\n}\ntype OverlappedTyped = CreateTypeFromInterface<OverlappedElementsDisplayProps>;\n\nexport const OverlappedElementsInformationPanel = ({ group, onClose, overlappedElementsInfo, groups }: OverlappedElementsInformationPanelProps) => {\n const [isOverlappedInfoLoading, setIsOverlappedInfoLoading] = useState<boolean>(false);\n const { setIsOverlappedColored } = useGroupHilitedElementsContext();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const columns = useMemo(\n (): Column<OverlappedTyped>[] => [\n {\n id: \"number\",\n Header: GroupingMappingWidget.translate(\"groups.overlappedElements\"),\n accessor: \"overlappedElements\",\n },\n {\n id: \"groups\",\n Header: GroupingMappingWidget.translate(\"groups.overlappedGroups\"),\n accessor: \"groups\",\n Cell: (value: CellProps<OverlappedTyped>) => {\n return (\n <div>\n {value.row.original.groups.map((groupName, index) => (\n <div key={index}>{groupName}</div>\n ))}\n </div>\n );\n },\n },\n ],\n [],\n );\n\n const key = group ? group.id : \"\";\n const overlappedInfo = overlappedElementsInfo.get(key);\n\n const arr: OverlappedElementsDisplayProps[] = useMemo(() => {\n setIsOverlappedInfoLoading(true);\n const result: OverlappedElementsDisplayProps[] = [];\n if (overlappedInfo) {\n setIsOverlappedColored(true);\n overlappedInfo.forEach((array) => {\n const groupNames: string[] = [];\n array.groupIds.forEach((groupId) => {\n const group = groups.find((group) => group.id === groupId);\n if (group) {\n groupNames.push(group.groupName);\n }\n });\n result.push({\n overlappedElements: array.elements.length.toString(),\n groups: groupNames,\n elementsIds: array.elements,\n });\n });\n }\n setIsOverlappedInfoLoading(false);\n return result;\n }, [overlappedInfo, groups, setIsOverlappedColored]);\n\n const handleClose = () => {\n setIsOverlappedColored(false);\n onClose();\n };\n\n const onSelect = useCallback(async (selectedData: CreateTypeFromInterface<OverlappedElementsDisplayProps>[] | undefined) => {\n try {\n setIsLoading(true);\n clearEmphasizedOverriddenElements();\n clearHiddenElements();\n if (selectedData && selectedData.length !== 0) {\n visualizeElements(selectedData[0].elementsIds, \"red\");\n await zoomToElements(selectedData[0].elementsIds);\n }\n } catch (error) {\n toaster.negative(GroupingMappingWidget.translate(\"groups.visualizingOverlappedError\"));\n /* eslint-disable no-console */\n console.error(error);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n return (\n <InformationPanel isOpen={!!group} className=\"gmw-overlap-information\">\n <InformationPanelHeader onClose={handleClose}>\n <Text variant=\"leading\">{GroupingMappingWidget.translate(\"groups.overlapInfoOf\", { groupName: group?.groupName ?? \"\" })}</Text>\n </InformationPanelHeader>\n <InformationPanelBody className=\"gmw-information-body\">\n <Table<OverlappedTyped>\n columns={columns}\n data={arr}\n emptyTableContent={GroupingMappingWidget.translate(\"groups.noOverlaps\")}\n isLoading={isOverlappedInfoLoading}\n isSortable={true}\n isSelectable\n selectionMode=\"single\"\n onSelect={onSelect}\n isRowDisabled={() => isLoading}\n />\n </InformationPanelBody>\n </InformationPanel>\n );\n};\n"]}
@@ -7,39 +7,15 @@ const core_common_1 = require("@itwin/core-common");
7
7
  const GroupingMappingWidget_1 = require("../../../GroupingMappingWidget");
8
8
  /* This class is to build adaptive and dynamic query for find similar property selections */
9
9
  class QueryBuilder {
10
+ dataProvider;
11
+ iModelConnection;
12
+ static MULTI_ASPECT_PRIMARY_CLASS = "BisCore:ElementOwnsMultiAspects";
13
+ static UNIQUE_ASPECT_PRIMARY_CLASS = "BisCore:ElementOwnsUniqueAspect";
14
+ static DEFAULT_DOUBLE_PRECISION = 4;
15
+ query;
10
16
  constructor(dataProvider, iModelConnection) {
11
17
  this.dataProvider = dataProvider;
12
18
  this.iModelConnection = iModelConnection;
13
- this._propertyMap = new Map();
14
- this.resetQueryBuilder = () => {
15
- this._propertyMap = new Map();
16
- };
17
- this.regenerateQuery = async () => {
18
- this.query = undefined;
19
- for (const property of this._propertyMap.values()) {
20
- await this.buildProperty(property.propertyRecord, property.propertiesField);
21
- }
22
- };
23
- this.relationalJoinSegments = (classes, querySegments) => {
24
- for (const queryClass of classes) {
25
- for (const classJoin of queryClass.classJoins) {
26
- const querySegment = [
27
- ...(querySegments.get(classJoin.joinClassName) ?? []),
28
- `${queryClass.className}.${classJoin.classProperty} = ${classJoin.joinClassName}.${classJoin.joinClassProperty}`,
29
- ];
30
- querySegments.set(classJoin.joinClassName, querySegment);
31
- }
32
- }
33
- return querySegments;
34
- };
35
- this.propertyQuerySegment = (className, property, needsQuote) => {
36
- if (this.isFloat(property.value))
37
- return (`ROUND(${className}.${property.name}, ` +
38
- `${QueryBuilder.DEFAULT_DOUBLE_PRECISION}) = ` +
39
- `${Number(property.value).toFixed(QueryBuilder.DEFAULT_DOUBLE_PRECISION)}`);
40
- const propertyValue = needsQuote ? `'${property.value}'` : property.value;
41
- return `${className}.${property.name} = ${propertyValue}`;
42
- };
43
19
  }
44
20
  isCategory(propertyField) {
45
21
  const classInfo = propertyField.properties[0].property.navigationPropertyInfo?.classInfo;
@@ -61,6 +37,16 @@ class QueryBuilder {
61
37
  }
62
38
  return;
63
39
  }
40
+ _propertyMap = new Map();
41
+ resetQueryBuilder = () => {
42
+ this._propertyMap = new Map();
43
+ };
44
+ regenerateQuery = async () => {
45
+ this.query = undefined;
46
+ for (const property of this._propertyMap.values()) {
47
+ await this.buildProperty(property.propertyRecord, property.propertiesField);
48
+ }
49
+ };
64
50
  async addProperty(prop) {
65
51
  // TODO: only handle primitive properties now
66
52
  if (prop.value?.valueFormat !== appui_abstract_1.PropertyValueFormat.Primitive) {
@@ -267,6 +253,26 @@ class QueryBuilder {
267
253
  }
268
254
  return "";
269
255
  }
256
+ relationalJoinSegments = (classes, querySegments) => {
257
+ for (const queryClass of classes) {
258
+ for (const classJoin of queryClass.classJoins) {
259
+ const querySegment = [
260
+ ...(querySegments.get(classJoin.joinClassName) ?? []),
261
+ `${queryClass.className}.${classJoin.classProperty} = ${classJoin.joinClassName}.${classJoin.joinClassProperty}`,
262
+ ];
263
+ querySegments.set(classJoin.joinClassName, querySegment);
264
+ }
265
+ }
266
+ return querySegments;
267
+ };
268
+ propertyQuerySegment = (className, property, needsQuote) => {
269
+ if (this.isFloat(property.value))
270
+ return (`ROUND(${className}.${property.name}, ` +
271
+ `${QueryBuilder.DEFAULT_DOUBLE_PRECISION}) = ` +
272
+ `${Number(property.value).toFixed(QueryBuilder.DEFAULT_DOUBLE_PRECISION)}`);
273
+ const propertyValue = needsQuote ? `'${property.value}'` : property.value;
274
+ return `${className}.${property.name} = ${propertyValue}`;
275
+ };
270
276
  categoryWhereQuery(codeValue) {
271
277
  return `((BisCore.Category.CodeValue = '${codeValue}') OR (BisCore.Category.UserLabel = '${codeValue}'))`;
272
278
  }
@@ -275,7 +281,4 @@ class QueryBuilder {
275
281
  }
276
282
  }
277
283
  exports.QueryBuilder = QueryBuilder;
278
- QueryBuilder.MULTI_ASPECT_PRIMARY_CLASS = "BisCore:ElementOwnsMultiAspects";
279
- QueryBuilder.UNIQUE_ASPECT_PRIMARY_CLASS = "BisCore:ElementOwnsUniqueAspect";
280
- QueryBuilder.DEFAULT_DOUBLE_PRECISION = 4;
281
284
  //# sourceMappingURL=QueryBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { PresentationPropertyDataProvider } from \"@itwin/presentation-components\";\nimport type { InstanceKey, NavigationPropertyValue, PropertiesField } from \"@itwin/presentation-common\";\nimport type { Primitives, PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { toaster } from \"@itwin/itwinui-react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { QueryBinder } from \"@itwin/core-common\";\nimport { GroupingMappingWidget } from \"../../../GroupingMappingWidget\";\n\nexport interface Query {\n unions: QueryUnion[];\n}\n\nexport interface QueryUnion {\n classes: QueryClass[];\n properties: QueryProperty[];\n}\n\nexport interface QueryClass {\n // schemaName.className\n className: string;\n classJoins: ClassJoin[];\n}\n\nexport interface ClassJoin {\n classProperty: string;\n joinClassName: string;\n joinClassProperty: string;\n}\n\nexport interface QueryProperty {\n className: string;\n classProperties: ClassProperty[];\n isCategory: boolean;\n modeledElementClass?: string;\n isAspect: boolean;\n}\n\nexport interface ClassProperty {\n name: string;\n value: Primitives.Value;\n needsQuote: boolean;\n}\n\nexport interface AddedProperty {\n propertyRecord: PropertyRecord;\n propertiesField: PropertiesField;\n}\n\n/* This class is to build adaptive and dynamic query for find similar property selections */\nexport class QueryBuilder {\n private static readonly MULTI_ASPECT_PRIMARY_CLASS = \"BisCore:ElementOwnsMultiAspects\";\n private static readonly UNIQUE_ASPECT_PRIMARY_CLASS = \"BisCore:ElementOwnsUniqueAspect\";\n private static readonly DEFAULT_DOUBLE_PRECISION = 4;\n private query: Query | undefined;\n\n constructor(\n private readonly dataProvider: PresentationPropertyDataProvider,\n private readonly iModelConnection: IModelConnection,\n ) {}\n\n private isCategory(propertyField: PropertiesField): boolean {\n const classInfo = propertyField.properties[0].property.navigationPropertyInfo?.classInfo;\n return classInfo?.name === \"BisCore:GeometricElement3dIsInCategory\";\n }\n\n private async getPotentialModeledElement(propertyField: PropertiesField, propertyRecord: PropertyRecord): Promise<string | undefined> {\n const classInfo = propertyField.properties[0].property.navigationPropertyInfo?.classInfo;\n if (propertyRecord.value?.valueFormat !== PropertyValueFormat.Primitive) return;\n const navigationPropertyValue = propertyRecord.value.value as NavigationPropertyValue;\n if (classInfo?.name === \"BisCore:ModelContainsElements\") {\n // https://www.itwinjs.org/bis/guide/fundamentals/model-fundamentals/#model-identity\n // Lookup the modeled element as they share the same ECInstanceId\n const modeledElementQuery = `SELECT ec_classname(ecclassid) FROM biscore.element WHERE ecinstanceid = ? LIMIT 1`;\n const queryBinder = new QueryBinder();\n queryBinder.bindString(1, navigationPropertyValue.id);\n const modeledElement = (await this.iModelConnection.createQueryReader(modeledElementQuery, queryBinder).next()).value[0];\n return modeledElement.replace(\":\", \".\");\n }\n return;\n }\n\n private _propertyMap: Map<string, AddedProperty> = new Map();\n\n public resetQueryBuilder = () => {\n this._propertyMap = new Map();\n };\n\n private regenerateQuery = async () => {\n this.query = undefined;\n\n for (const property of this._propertyMap.values()) {\n await this.buildProperty(property.propertyRecord, property.propertiesField);\n }\n };\n\n public async addProperty(prop: PropertyRecord): Promise<boolean> {\n // TODO: only handle primitive properties now\n if (prop.value?.valueFormat !== PropertyValueFormat.Primitive) {\n toaster.warning(GroupingMappingWidget.translate(\"errors.primitiveTypesOnly\"));\n return false;\n }\n if (prop.value.value === undefined) {\n return false;\n }\n\n const propertyField = (await this.dataProvider.getFieldByPropertyRecord(prop)) as PropertiesField;\n\n if (!propertyField) {\n toaster.negative(GroupingMappingWidget.translate(\"errors.fetchFieldFailed\"));\n return false;\n }\n\n this._propertyMap.set(JSON.stringify(propertyField.getFieldDescriptor()), { propertyRecord: prop, propertiesField: propertyField });\n return true;\n }\n\n public async removeProperty(prop: PropertyRecord) {\n const propertyField = (await this.dataProvider.getFieldByPropertyRecord(prop)) as PropertiesField;\n\n this._propertyMap.delete(JSON.stringify(propertyField.getFieldDescriptor()));\n }\n\n private async buildProperty(prop: PropertyRecord, propertiesField: PropertiesField) {\n if (prop.value?.valueFormat !== PropertyValueFormat.Primitive || prop.value.value === undefined) {\n toaster.negative(GroupingMappingWidget.translate(\"errors.queryBuildError\"));\n return;\n }\n\n function replaceAll(str: string, match: string, replacement: string) {\n return str.split(match).join(replacement);\n }\n // if property value has single quote, escape\n if ((typeof prop.value.value === \"string\" || prop.value.value instanceof String) && String(prop.value.value).indexOf(\"'\") >= 0) {\n prop.value.value = replaceAll(prop.value.value.toString(), \"'\", \"''\");\n }\n\n const pathToPrimaryClass = propertiesField.parent?.pathToPrimaryClass;\n\n // get the special cases\n const isNavigation: boolean = prop.property.typename.toLowerCase() === \"navigation\";\n const isCategory: boolean = isNavigation && this.isCategory(propertiesField);\n const modeledElement = await this.getPotentialModeledElement(propertiesField, prop);\n\n const isAspect: boolean =\n pathToPrimaryClass?.find(\n (a) => a.relationshipInfo?.name === QueryBuilder.UNIQUE_ASPECT_PRIMARY_CLASS || a.relationshipInfo?.name === QueryBuilder.MULTI_ASPECT_PRIMARY_CLASS,\n ) !== undefined;\n\n for (let i = 0; i < propertiesField.properties.length; i++) {\n const property = propertiesField.properties[i].property;\n\n const className = property.classInfo.name.replace(\":\", \".\");\n const propertyName = isNavigation ? (isCategory || modeledElement ? `${property.name}.CodeValue` : `${property.name}.id`) : property.name;\n const propertyValue = isNavigation\n ? isCategory || modeledElement\n ? prop.value.displayValue ?? \"\"\n : (prop.value.value as InstanceKey).id\n : prop.value.value;\n\n if (!isAspect && pathToPrimaryClass && pathToPrimaryClass.length > 0) {\n this.addRelatedToQuery(i, propertiesField, propertyName, propertyValue);\n } else {\n // Model properties with display values always need quotes\n const needsQuote = !!modeledElement || this.needsQuote(propertiesField);\n this.addPropertyToQuery(i, className, propertyName, propertyValue, needsQuote, isCategory, modeledElement, isAspect);\n }\n }\n return true;\n }\n\n private needsQuote(propertyField: PropertiesField): boolean {\n // list of property types that need quote around property value\n const typeName = propertyField.type.typeName.toLowerCase();\n return \"string\" === typeName || \"uri\" === typeName;\n }\n\n private addRelatedToQuery(unionIndex: number, propertyField: PropertiesField, propertyName: string, propertyValue: Primitives.Value) {\n const paths = [...(propertyField.parent?.pathToPrimaryClass ?? [])];\n paths.reverse().forEach((path) => {\n const sourceClassName = path.sourceClassInfo?.name.replace(\":\", \".\");\n const targetClassName = path.targetClassInfo?.name.replace(\":\", \".\");\n const relClassName = path.relationshipInfo?.name.replace(\":\", \".\");\n\n const relClassProperty = path.isForwardRelationship ? `SourceECInstanceId` : `TargetECInstanceId`;\n\n const relPropertyValue = path.isForwardRelationship ? `TargetECInstanceId` : `SourceECInstanceId`;\n\n this.addClassToQuery(unionIndex, targetClassName, `ECInstanceId`, relClassName, relPropertyValue);\n\n this.addClassToQuery(unionIndex, relClassName, relClassProperty, sourceClassName, `ECInstanceId`);\n\n if (path.sourceClassInfo?.name === propertyField.parent?.contentClassInfo.name) {\n this.addPropertyToQuery(unionIndex, sourceClassName, propertyName, propertyValue, this.needsQuote(propertyField), false, \"\", false);\n }\n });\n }\n\n private addClassToQuery(unionIndex: number, className: string, classProperty: string, joinClassName: string, joinClassProperty: string) {\n if (this.query === undefined) {\n this.query = { unions: [] };\n }\n\n const classJoin: ClassJoin = {\n classProperty,\n joinClassName,\n joinClassProperty,\n };\n\n const queryClass: QueryClass = {\n className,\n classJoins: [classJoin],\n };\n\n if (this.query.unions.length <= unionIndex) {\n this.query.unions.push({\n classes: [queryClass],\n properties: [],\n });\n return;\n }\n\n const foundClass = this.query.unions[unionIndex].classes.find((c) => c.className === className);\n\n if (foundClass) {\n const foundJoin = foundClass.classJoins.find(\n (join) => join.classProperty === classProperty && join.joinClassName === joinClassName && join.joinClassProperty === joinClassProperty,\n );\n\n if (!foundJoin) foundClass.classJoins.push(classJoin);\n return;\n }\n\n this.query.unions[unionIndex].classes.push(queryClass);\n }\n\n private addPropertyToQuery(\n unionIndex: number,\n className: string,\n propertyName: string,\n propertyValue: Primitives.Value,\n needsQuote: boolean,\n isCategory: boolean,\n modeledElementClass: string | undefined,\n isAspect: boolean,\n ) {\n if (this.query === undefined) {\n this.query = { unions: [] };\n }\n\n const queryJoin: ClassProperty = {\n name: propertyName,\n value: propertyValue,\n needsQuote,\n };\n\n const queryProperty: QueryProperty = {\n className,\n isCategory,\n modeledElementClass,\n isAspect,\n classProperties: [queryJoin],\n };\n\n if (this.query.unions.length <= unionIndex) {\n this.query.unions.push({\n classes: [],\n properties: [queryProperty],\n });\n return;\n }\n\n // Model properties should be kept separate to ensure proper JOIN generation\n const foundPropertyClass = this.query.unions[unionIndex].properties.find((p) => {\n // Don't merge Model properties with regular properties\n if (!!modeledElementClass !== !!p.modeledElementClass) return false;\n return p.className === className;\n });\n\n if (foundPropertyClass) {\n const foundJoin = foundPropertyClass?.classProperties.find((join) => join.name === propertyName);\n\n if (foundJoin) {\n foundJoin.value = propertyValue;\n return;\n }\n\n foundPropertyClass.classProperties.push(queryJoin);\n return;\n }\n\n this.query.unions[unionIndex].properties.push(queryProperty);\n }\n\n public async buildQueryString() {\n await this.regenerateQuery();\n if (this.query === undefined || this.query.unions.find((u) => u.classes.length === 0 && u.properties.length === 0)) {\n return \"\";\n }\n\n const unionSegments: string[] = [];\n for (const union of this.query.unions) {\n const baseClass = union.classes[0];\n const baseProperty = union.properties[0];\n const baseClassName = baseClass ? baseClass.className : baseProperty?.className;\n const baseIdName = `${baseClassName}.ECInstanceId`;\n\n const selectClause = this.selectClause(baseProperty, baseClass);\n\n let querySegments: Map<string, string[]> = new Map();\n querySegments = this.relationalJoinSegments(union.classes, querySegments);\n\n const whereSegments: string[] = [];\n for (const property of union.properties) {\n if (property.isCategory) {\n if (property.className !== baseClassName)\n querySegments.set(\"BisCore.GeometricElement3d\", [`BisCore.GeometricElement3d.ECInstanceId = ${baseIdName}`]);\n\n querySegments.set(\"BisCore.Category\", [`BisCore.Category.ECInstanceId = BisCore.GeometricElement3d.category.id`]);\n whereSegments.push(this.categoryWhereQuery(property.classProperties[0].value.toString()));\n continue;\n } else if (property.modeledElementClass) {\n querySegments.set(property.modeledElementClass, [`${property.modeledElementClass}.ECInstanceId = ${baseClassName}.Model.id`]);\n whereSegments.push(\n `(${property.modeledElementClass}.UserLabel = '${property.classProperties[0].value.toString()}' OR ${property.modeledElementClass}.CodeValue = '${property.classProperties[0].value.toString()}')`,\n );\n continue;\n }\n\n const joinIdName = property.isAspect ? `${property.className}.Element.id` : `${property.className}.ECInstanceId`;\n\n if (!querySegments.has(property.className) && property.className !== baseClassName)\n querySegments.set(property.className, [`${joinIdName} = ${baseIdName}`]);\n\n for (const prop of property.classProperties) {\n whereSegments.push(this.propertyQuerySegment(property.className, prop, prop.needsQuote));\n }\n }\n\n const joinClauses: string[] = [];\n for (const key of querySegments.keys()) {\n joinClauses.push(`JOIN ${key} ON ${querySegments.get(key)?.join(\" AND \")}`);\n }\n\n const whereClause = `WHERE ${whereSegments.join(\" AND \")}`;\n\n unionSegments.push([selectClause, ...joinClauses, whereClause].join(\" \"));\n }\n const result = unionSegments.join(\" UNION \");\n return result;\n }\n\n private selectClause(baseProperty: QueryProperty | undefined, baseClass: QueryClass | undefined) {\n if (baseClass) {\n return `SELECT ${baseClass.className}.ECInstanceId, ${baseClass.className}.ECClassId FROM ${baseClass.className}`;\n }\n\n if (baseProperty) {\n const baseIdName = baseProperty.isAspect\n ? `${baseProperty.className}.Element.id ECInstanceId`\n : `${baseProperty.className}.ECInstanceId, ${baseProperty.className}.ECClassId`;\n\n return `SELECT ${baseIdName} FROM ${baseProperty.className}`;\n }\n\n return \"\";\n }\n\n private relationalJoinSegments = (classes: QueryClass[], querySegments: Map<string, string[]>): Map<string, string[]> => {\n for (const queryClass of classes) {\n for (const classJoin of queryClass.classJoins) {\n const querySegment = [\n ...(querySegments.get(classJoin.joinClassName) ?? []),\n `${queryClass.className}.${classJoin.classProperty} = ${classJoin.joinClassName}.${classJoin.joinClassProperty}`,\n ];\n querySegments.set(classJoin.joinClassName, querySegment);\n }\n }\n\n return querySegments;\n };\n\n private propertyQuerySegment = (className: string, property: ClassProperty, needsQuote: boolean): string => {\n if (this.isFloat(property.value))\n return (\n `ROUND(${className}.${property.name}, ` +\n `${QueryBuilder.DEFAULT_DOUBLE_PRECISION}) = ` +\n `${Number(property.value).toFixed(QueryBuilder.DEFAULT_DOUBLE_PRECISION)}`\n );\n\n const propertyValue = needsQuote ? `'${property.value}'` : property.value;\n return `${className}.${property.name} = ${propertyValue}`;\n };\n\n private categoryWhereQuery(codeValue: string): string {\n return `((BisCore.Category.CodeValue = '${codeValue}') OR (BisCore.Category.UserLabel = '${codeValue}'))`;\n }\n\n private isFloat(n: unknown): boolean {\n return Number(n) === n && n % 1 !== 0;\n }\n}\n"]}
1
+ {"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { PresentationPropertyDataProvider } from \"@itwin/presentation-components\";\nimport type { InstanceKey, NavigationPropertyValue, PropertiesField } from \"@itwin/presentation-common\";\nimport type { Primitives, PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { toaster } from \"@itwin/itwinui-react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { QueryBinder } from \"@itwin/core-common\";\nimport { GroupingMappingWidget } from \"../../../GroupingMappingWidget\";\n\nexport interface Query {\n unions: QueryUnion[];\n}\n\nexport interface QueryUnion {\n classes: QueryClass[];\n properties: QueryProperty[];\n}\n\nexport interface QueryClass {\n // schemaName.className\n className: string;\n classJoins: ClassJoin[];\n}\n\nexport interface ClassJoin {\n classProperty: string;\n joinClassName: string;\n joinClassProperty: string;\n}\n\nexport interface QueryProperty {\n className: string;\n classProperties: ClassProperty[];\n isCategory: boolean;\n modeledElementClass?: string;\n isAspect: boolean;\n}\n\nexport interface ClassProperty {\n name: string;\n value: Primitives.Value;\n needsQuote: boolean;\n}\n\nexport interface AddedProperty {\n propertyRecord: PropertyRecord;\n propertiesField: PropertiesField;\n}\n\n/* This class is to build adaptive and dynamic query for find similar property selections */\nexport class QueryBuilder {\n private static readonly MULTI_ASPECT_PRIMARY_CLASS = \"BisCore:ElementOwnsMultiAspects\";\n private static readonly UNIQUE_ASPECT_PRIMARY_CLASS = \"BisCore:ElementOwnsUniqueAspect\";\n private static readonly DEFAULT_DOUBLE_PRECISION = 4;\n private query: Query | undefined;\n\n constructor(\n private readonly dataProvider: PresentationPropertyDataProvider,\n private readonly iModelConnection: IModelConnection,\n ) {}\n\n private isCategory(propertyField: PropertiesField): boolean {\n const classInfo = propertyField.properties[0].property.navigationPropertyInfo?.classInfo;\n return classInfo?.name === \"BisCore:GeometricElement3dIsInCategory\";\n }\n\n private async getPotentialModeledElement(propertyField: PropertiesField, propertyRecord: PropertyRecord): Promise<string | undefined> {\n const classInfo = propertyField.properties[0].property.navigationPropertyInfo?.classInfo;\n if (propertyRecord.value?.valueFormat !== PropertyValueFormat.Primitive) return;\n const navigationPropertyValue = propertyRecord.value.value as NavigationPropertyValue;\n if (classInfo?.name === \"BisCore:ModelContainsElements\") {\n // https://www.itwinjs.org/bis/guide/fundamentals/model-fundamentals/#model-identity\n // Lookup the modeled element as they share the same ECInstanceId\n const modeledElementQuery = `SELECT ec_classname(ecclassid) FROM biscore.element WHERE ecinstanceid = ? LIMIT 1`;\n const queryBinder = new QueryBinder();\n queryBinder.bindString(1, navigationPropertyValue.id);\n const modeledElement = (await this.iModelConnection.createQueryReader(modeledElementQuery, queryBinder).next()).value[0];\n return modeledElement.replace(\":\", \".\");\n }\n return;\n }\n\n private _propertyMap: Map<string, AddedProperty> = new Map();\n\n public resetQueryBuilder = () => {\n this._propertyMap = new Map();\n };\n\n private regenerateQuery = async () => {\n this.query = undefined;\n\n for (const property of this._propertyMap.values()) {\n await this.buildProperty(property.propertyRecord, property.propertiesField);\n }\n };\n\n public async addProperty(prop: PropertyRecord): Promise<boolean> {\n // TODO: only handle primitive properties now\n if (prop.value?.valueFormat !== PropertyValueFormat.Primitive) {\n toaster.warning(GroupingMappingWidget.translate(\"errors.primitiveTypesOnly\"));\n return false;\n }\n if (prop.value.value === undefined) {\n return false;\n }\n\n const propertyField = (await this.dataProvider.getFieldByPropertyRecord(prop)) as PropertiesField;\n\n if (!propertyField) {\n toaster.negative(GroupingMappingWidget.translate(\"errors.fetchFieldFailed\"));\n return false;\n }\n\n this._propertyMap.set(JSON.stringify(propertyField.getFieldDescriptor()), { propertyRecord: prop, propertiesField: propertyField });\n return true;\n }\n\n public async removeProperty(prop: PropertyRecord) {\n const propertyField = (await this.dataProvider.getFieldByPropertyRecord(prop)) as PropertiesField;\n\n this._propertyMap.delete(JSON.stringify(propertyField.getFieldDescriptor()));\n }\n\n private async buildProperty(prop: PropertyRecord, propertiesField: PropertiesField) {\n if (prop.value?.valueFormat !== PropertyValueFormat.Primitive || prop.value.value === undefined) {\n toaster.negative(GroupingMappingWidget.translate(\"errors.queryBuildError\"));\n return;\n }\n\n function replaceAll(str: string, match: string, replacement: string) {\n return str.split(match).join(replacement);\n }\n // if property value has single quote, escape\n if ((typeof prop.value.value === \"string\" || prop.value.value instanceof String) && String(prop.value.value).indexOf(\"'\") >= 0) {\n prop.value.value = replaceAll(prop.value.value.toString(), \"'\", \"''\");\n }\n\n const pathToPrimaryClass = propertiesField.parent?.pathToPrimaryClass;\n\n // get the special cases\n const isNavigation: boolean = prop.property.typename.toLowerCase() === \"navigation\";\n const isCategory: boolean = isNavigation && this.isCategory(propertiesField);\n const modeledElement = await this.getPotentialModeledElement(propertiesField, prop);\n\n const isAspect: boolean =\n pathToPrimaryClass?.find(\n (a) => a.relationshipInfo?.name === QueryBuilder.UNIQUE_ASPECT_PRIMARY_CLASS || a.relationshipInfo?.name === QueryBuilder.MULTI_ASPECT_PRIMARY_CLASS,\n ) !== undefined;\n\n for (let i = 0; i < propertiesField.properties.length; i++) {\n const property = propertiesField.properties[i].property;\n\n const className = property.classInfo.name.replace(\":\", \".\");\n const propertyName = isNavigation ? (isCategory || modeledElement ? `${property.name}.CodeValue` : `${property.name}.id`) : property.name;\n const propertyValue = isNavigation\n ? isCategory || modeledElement\n ? prop.value.displayValue ?? \"\"\n : (prop.value.value as InstanceKey).id\n : prop.value.value;\n\n if (!isAspect && pathToPrimaryClass && pathToPrimaryClass.length > 0) {\n this.addRelatedToQuery(i, propertiesField, propertyName, propertyValue);\n } else {\n // Model properties with display values always need quotes\n const needsQuote = !!modeledElement || this.needsQuote(propertiesField);\n this.addPropertyToQuery(i, className, propertyName, propertyValue, needsQuote, isCategory, modeledElement, isAspect);\n }\n }\n return true;\n }\n\n private needsQuote(propertyField: PropertiesField): boolean {\n // list of property types that need quote around property value\n const typeName = propertyField.type.typeName.toLowerCase();\n return \"string\" === typeName || \"uri\" === typeName;\n }\n\n private addRelatedToQuery(unionIndex: number, propertyField: PropertiesField, propertyName: string, propertyValue: Primitives.Value) {\n const paths = [...(propertyField.parent?.pathToPrimaryClass ?? [])];\n paths.reverse().forEach((path) => {\n const sourceClassName = path.sourceClassInfo?.name.replace(\":\", \".\");\n const targetClassName = path.targetClassInfo?.name.replace(\":\", \".\");\n const relClassName = path.relationshipInfo?.name.replace(\":\", \".\");\n\n const relClassProperty = path.isForwardRelationship ? `SourceECInstanceId` : `TargetECInstanceId`;\n\n const relPropertyValue = path.isForwardRelationship ? `TargetECInstanceId` : `SourceECInstanceId`;\n\n this.addClassToQuery(unionIndex, targetClassName, `ECInstanceId`, relClassName, relPropertyValue);\n\n this.addClassToQuery(unionIndex, relClassName, relClassProperty, sourceClassName, `ECInstanceId`);\n\n if (path.sourceClassInfo?.name === propertyField.parent?.contentClassInfo.name) {\n this.addPropertyToQuery(unionIndex, sourceClassName, propertyName, propertyValue, this.needsQuote(propertyField), false, \"\", false);\n }\n });\n }\n\n private addClassToQuery(unionIndex: number, className: string, classProperty: string, joinClassName: string, joinClassProperty: string) {\n if (this.query === undefined) {\n this.query = { unions: [] };\n }\n\n const classJoin: ClassJoin = {\n classProperty,\n joinClassName,\n joinClassProperty,\n };\n\n const queryClass: QueryClass = {\n className,\n classJoins: [classJoin],\n };\n\n if (this.query.unions.length <= unionIndex) {\n this.query.unions.push({\n classes: [queryClass],\n properties: [],\n });\n return;\n }\n\n const foundClass = this.query.unions[unionIndex].classes.find((c) => c.className === className);\n\n if (foundClass) {\n const foundJoin = foundClass.classJoins.find(\n (join) => join.classProperty === classProperty && join.joinClassName === joinClassName && join.joinClassProperty === joinClassProperty,\n );\n\n if (!foundJoin) foundClass.classJoins.push(classJoin);\n return;\n }\n\n this.query.unions[unionIndex].classes.push(queryClass);\n }\n\n private addPropertyToQuery(\n unionIndex: number,\n className: string,\n propertyName: string,\n propertyValue: Primitives.Value,\n needsQuote: boolean,\n isCategory: boolean,\n modeledElementClass: string | undefined,\n isAspect: boolean,\n ) {\n if (this.query === undefined) {\n this.query = { unions: [] };\n }\n\n const queryJoin: ClassProperty = {\n name: propertyName,\n value: propertyValue,\n needsQuote,\n };\n\n const queryProperty: QueryProperty = {\n className,\n isCategory,\n modeledElementClass,\n isAspect,\n classProperties: [queryJoin],\n };\n\n if (this.query.unions.length <= unionIndex) {\n this.query.unions.push({\n classes: [],\n properties: [queryProperty],\n });\n return;\n }\n\n // Model properties should be kept separate to ensure proper JOIN generation\n const foundPropertyClass = this.query.unions[unionIndex].properties.find((p) => {\n // Don't merge Model properties with regular properties\n if (!!modeledElementClass !== !!p.modeledElementClass) return false;\n return p.className === className;\n });\n\n if (foundPropertyClass) {\n const foundJoin = foundPropertyClass?.classProperties.find((join) => join.name === propertyName);\n\n if (foundJoin) {\n foundJoin.value = propertyValue;\n return;\n }\n\n foundPropertyClass.classProperties.push(queryJoin);\n return;\n }\n\n this.query.unions[unionIndex].properties.push(queryProperty);\n }\n\n public async buildQueryString() {\n await this.regenerateQuery();\n if (this.query === undefined || this.query.unions.find((u) => u.classes.length === 0 && u.properties.length === 0)) {\n return \"\";\n }\n\n const unionSegments: string[] = [];\n for (const union of this.query.unions) {\n const baseClass = union.classes[0];\n const baseProperty = union.properties[0];\n const baseClassName = baseClass ? baseClass.className : baseProperty?.className;\n const baseIdName = `${baseClassName}.ECInstanceId`;\n\n const selectClause = this.selectClause(baseProperty, baseClass);\n\n let querySegments: Map<string, string[]> = new Map();\n querySegments = this.relationalJoinSegments(union.classes, querySegments);\n\n const whereSegments: string[] = [];\n for (const property of union.properties) {\n if (property.isCategory) {\n if (property.className !== baseClassName)\n querySegments.set(\"BisCore.GeometricElement3d\", [`BisCore.GeometricElement3d.ECInstanceId = ${baseIdName}`]);\n\n querySegments.set(\"BisCore.Category\", [`BisCore.Category.ECInstanceId = BisCore.GeometricElement3d.category.id`]);\n whereSegments.push(this.categoryWhereQuery(property.classProperties[0].value.toString()));\n continue;\n } else if (property.modeledElementClass) {\n querySegments.set(property.modeledElementClass, [`${property.modeledElementClass}.ECInstanceId = ${baseClassName}.Model.id`]);\n whereSegments.push(\n `(${property.modeledElementClass}.UserLabel = '${property.classProperties[0].value.toString()}' OR ${property.modeledElementClass}.CodeValue = '${property.classProperties[0].value.toString()}')`,\n );\n continue;\n }\n\n const joinIdName = property.isAspect ? `${property.className}.Element.id` : `${property.className}.ECInstanceId`;\n\n if (!querySegments.has(property.className) && property.className !== baseClassName)\n querySegments.set(property.className, [`${joinIdName} = ${baseIdName}`]);\n\n for (const prop of property.classProperties) {\n whereSegments.push(this.propertyQuerySegment(property.className, prop, prop.needsQuote));\n }\n }\n\n const joinClauses: string[] = [];\n for (const key of querySegments.keys()) {\n joinClauses.push(`JOIN ${key} ON ${querySegments.get(key)?.join(\" AND \")}`);\n }\n\n const whereClause = `WHERE ${whereSegments.join(\" AND \")}`;\n\n unionSegments.push([selectClause, ...joinClauses, whereClause].join(\" \"));\n }\n const result = unionSegments.join(\" UNION \");\n return result;\n }\n\n private selectClause(baseProperty: QueryProperty | undefined, baseClass: QueryClass | undefined) {\n if (baseClass) {\n return `SELECT ${baseClass.className}.ECInstanceId, ${baseClass.className}.ECClassId FROM ${baseClass.className}`;\n }\n\n if (baseProperty) {\n const baseIdName = baseProperty.isAspect\n ? `${baseProperty.className}.Element.id ECInstanceId`\n : `${baseProperty.className}.ECInstanceId, ${baseProperty.className}.ECClassId`;\n\n return `SELECT ${baseIdName} FROM ${baseProperty.className}`;\n }\n\n return \"\";\n }\n\n private relationalJoinSegments = (classes: QueryClass[], querySegments: Map<string, string[]>): Map<string, string[]> => {\n for (const queryClass of classes) {\n for (const classJoin of queryClass.classJoins) {\n const querySegment = [\n ...(querySegments.get(classJoin.joinClassName) ?? []),\n `${queryClass.className}.${classJoin.classProperty} = ${classJoin.joinClassName}.${classJoin.joinClassProperty}`,\n ];\n querySegments.set(classJoin.joinClassName, querySegment);\n }\n }\n\n return querySegments;\n };\n\n private propertyQuerySegment = (className: string, property: ClassProperty, needsQuote: boolean): string => {\n if (this.isFloat(property.value))\n return (\n `ROUND(${className}.${property.name}, ` +\n `${QueryBuilder.DEFAULT_DOUBLE_PRECISION}) = ` +\n `${Number(property.value).toFixed(QueryBuilder.DEFAULT_DOUBLE_PRECISION)}`\n );\n\n const propertyValue = needsQuote ? `'${property.value}'` : property.value;\n return `${className}.${property.name} = ${propertyValue}`;\n };\n\n private categoryWhereQuery(codeValue: string): string {\n return `((BisCore.Category.CodeValue = '${codeValue}') OR (BisCore.Category.UserLabel = '${codeValue}'))`;\n }\n\n private isFloat(n: unknown): boolean {\n return Number(n) === n && n % 1 !== 0;\n }\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export interface QueryBuilderActionPanelProps {
3
2
  onClickNext: () => void;
4
3
  isNextDisabled?: boolean;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { GroupingCustomUI } from "../../customUI/GroupingMappingCustomUI";
3
2
  import type { GroupMinimal } from "@itwin/insights-client";
4
3
  export interface QueryBuilderCustomUIProps {
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilderCustomUI.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderCustomUI.tsx"],"names":[],"mappings":";;;;;;AAAA;;;gGAGgG;AAChG,kDAA0B;AAE1B,sEAAmE;AAEnE,0EAAuE;AAWhE,MAAM,oBAAoB,GAAG,CAAC,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAA6B,EAAE,EAAE;IAC3I,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;QACzD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;QAC9E,IAAI,gBAAgB,EAAE;YACpB,OAAO,eAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBACvD,WAAW,EAAE,QAAQ;gBACrB,UAAU;gBACV,SAAS;gBACT,oBAAoB,EAAE,KAAK,EAAE,KAAK;aACnC,CAAC,CAAC;SACJ;KACF;IACD,OAAO,8BAAC,2BAAY,IAAC,OAAO,EAAE,6CAAqB,CAAC,SAAS,CAAC,wBAAwB,CAAC,GAAI,CAAC;AAC9F,CAAC,CAAC;AAbW,QAAA,oBAAoB,wBAa/B","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 type { GroupingCustomUI } from \"../../customUI/GroupingMappingCustomUI\";\nimport { EmptyMessage } from \"../../SharedComponents/EmptyMessage\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport { GroupingMappingWidget } from \"../../../GroupingMappingWidget\";\n\nexport interface QueryBuilderCustomUIProps {\n queryGenerationType: string;\n groupUIs: GroupingCustomUI[];\n isUpdating: boolean;\n resetView: () => Promise<void>;\n setQuery: (query: string) => void;\n group?: GroupMinimal;\n}\n\nexport const QueryBuilderCustomUI = ({ queryGenerationType, groupUIs, isUpdating, resetView, setQuery, group }: QueryBuilderCustomUIProps) => {\n if (queryGenerationType && queryGenerationType.length > 0) {\n const selectedCustomUI = groupUIs.find((e) => e.name === queryGenerationType);\n if (selectedCustomUI) {\n return React.createElement(selectedCustomUI.uiComponent, {\n updateQuery: setQuery,\n isUpdating,\n resetView,\n initialEditModeQuery: group?.query,\n });\n }\n }\n return <EmptyMessage message={GroupingMappingWidget.translate(\"customUI.noQueryMethod\")} />;\n};\n"]}
1
+ {"version":3,"file":"QueryBuilderCustomUI.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderCustomUI.tsx"],"names":[],"mappings":";;;;;;AAAA;;;gGAGgG;AAChG,kDAA0B;AAE1B,sEAAmE;AAEnE,0EAAuE;AAWhE,MAAM,oBAAoB,GAAG,CAAC,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAA6B,EAAE,EAAE;IAC3I,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;QAC9E,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,eAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBACvD,WAAW,EAAE,QAAQ;gBACrB,UAAU;gBACV,SAAS;gBACT,oBAAoB,EAAE,KAAK,EAAE,KAAK;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,8BAAC,2BAAY,IAAC,OAAO,EAAE,6CAAqB,CAAC,SAAS,CAAC,wBAAwB,CAAC,GAAI,CAAC;AAC9F,CAAC,CAAC;AAbW,QAAA,oBAAoB,wBAa/B","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 type { GroupingCustomUI } from \"../../customUI/GroupingMappingCustomUI\";\nimport { EmptyMessage } from \"../../SharedComponents/EmptyMessage\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport { GroupingMappingWidget } from \"../../../GroupingMappingWidget\";\n\nexport interface QueryBuilderCustomUIProps {\n queryGenerationType: string;\n groupUIs: GroupingCustomUI[];\n isUpdating: boolean;\n resetView: () => Promise<void>;\n setQuery: (query: string) => void;\n group?: GroupMinimal;\n}\n\nexport const QueryBuilderCustomUI = ({ queryGenerationType, groupUIs, isUpdating, resetView, setQuery, group }: QueryBuilderCustomUIProps) => {\n if (queryGenerationType && queryGenerationType.length > 0) {\n const selectedCustomUI = groupUIs.find((e) => e.name === queryGenerationType);\n if (selectedCustomUI) {\n return React.createElement(selectedCustomUI.uiComponent, {\n updateQuery: setQuery,\n isUpdating,\n resetView,\n initialEditModeQuery: group?.query,\n });\n }\n }\n return <EmptyMessage message={GroupingMappingWidget.translate(\"customUI.noQueryMethod\")} />;\n};\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { SelectOption } from "@itwin/itwinui-react";
3
2
  import type { QueryBuilderCustomUIProps } from "./QueryBuilderCustomUI";
4
3
  import "./QueryBuilderStep.scss";
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import "./ToggleGroupVisibility.scss";
3
2
  export interface ToggleGroupVisibilityProps {
4
3
  isLoadingQuery: boolean;
@@ -2,7 +2,7 @@ import type { IModelConnection } from "@itwin/core-frontend";
2
2
  import type { GroupMinimal } from "@itwin/insights-client";
3
3
  import type { OverlappedElementGroupPairs, OverlappedInfo } from "../context/GroupHilitedElementsContext";
4
4
  export declare const getGroupColor: (index: number) => string;
5
- export declare type GroupsElementIds = {
5
+ export type GroupsElementIds = {
6
6
  groupId: string;
7
7
  elementIds: string[];
8
8
  }[];
@@ -1 +1 @@
1
- {"version":3,"file":"groupsHelpers.js","sourceRoot":"","sources":["../../../../src/components/Groups/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 { GroupMinimal } from \"@itwin/insights-client\";\nimport type { OverlappedElementGroupPairs, OverlappedInfo } from \"../context/GroupHilitedElementsContext\";\nimport {\n clearEmphasizedOverriddenElements,\n clearHiddenElements,\n emphasizeElements,\n getHiliteIds,\n hideElements,\n overrideElements,\n} from \"../../common/viewerUtils\";\n\nconst GOLDEN_ANGLE_MULTIPLIER = 1.5; // Multiplier to spread colors more uniformly.\nconst BASE_HUE_OFFSET = 60; // Initial hue offset to avoid certain colors e.g 0 offset would begin with red.\nconst HUE_ADJUSTMENT_STEP = 15; // Step to adjust the hue to avoid the red spectrum.\nconst RED_HUE_LOWER_BOUND = 330; // Lower bound of the red hue spectrum to avoid.\nconst RED_HUE_UPPER_BOUND = 30; // Upper bound of the red hue spectrum to avoid.\nconst GOLDENANGLE = 180 * (3 - Math.sqrt(5));\n\nconst generateHSL = (hue: number, saturation: number = 100, lightness: number = 50) => {\n return `hsl(${hue}, ${saturation}%, ${lightness}%)`;\n};\n\nexport const getGroupColor = (index: number) => {\n let hue = (index * GOLDENANGLE * GOLDEN_ANGLE_MULTIPLIER + BASE_HUE_OFFSET) % 360;\n\n while (hue >= RED_HUE_LOWER_BOUND || hue <= RED_HUE_UPPER_BOUND) {\n hue = (hue + HUE_ADJUSTMENT_STEP) % 360;\n }\n\n return generateHSL(hue);\n};\n\nconst processGroupVisualization = async (\n overlappedElementGroupPairs: OverlappedElementGroupPairs,\n hiddenGroupsIds: Set<string>,\n doEmphasizeElements: boolean,\n color: string,\n replace: boolean,\n setNumberOfVisualizedGroups: (numberOfVisualizedGroups: number | ((numberOfVisualizedGroups: number) => number)) => void,\n) => {\n const hilitedIds = Array.from(overlappedElementGroupPairs.elementIds);\n\n overrideElements(hilitedIds, color, FeatureOverrideType.ColorAndAlpha, replace);\n setNumberOfVisualizedGroups((numberOfVisualizedGroups) => numberOfVisualizedGroups + 1);\n\n doEmphasizeElements && emphasizeElements(hilitedIds, undefined);\n\n for (const id of overlappedElementGroupPairs.groupIds) {\n if (hiddenGroupsIds.has(id)) {\n return [];\n }\n }\n return hilitedIds;\n};\n\nexport type GroupsElementIds = {\n groupId: string;\n elementIds: string[];\n}[];\n\nexport const hideGroupIds = (hiddenGroupIds: Set<string>, groupsWithGroupedOverlaps: OverlappedElementGroupPairs[]) => {\n hiddenGroupIds.forEach((groupId) => {\n hideGroupConsideringOverlaps(groupsWithGroupedOverlaps, groupId, hiddenGroupIds);\n });\n};\n\nexport const visualizeGroupColors = async (\n hiddenGroupsIds: Set<string>,\n groupsWithGroupedOverlaps: OverlappedElementGroupPairs[],\n setNumberOfVisualizedGroups: (numberOfVisualizedGroups: number | ((numberOfVisualizedGroups: number) => number)) => void,\n doEmphasizeElements: boolean = true,\n) => {\n clearEmphasizedOverriddenElements();\n\n const singleGroupPromises = groupsWithGroupedOverlaps\n .filter((group) => group.groupIds.size === 1)\n .map(async (group, index) =>\n processGroupVisualization(\n group,\n hiddenGroupsIds,\n doEmphasizeElements,\n getGroupColor(index), // color for single group\n false, // Shouldn't matter as replacement only accounts for same colored overrides.\n setNumberOfVisualizedGroups,\n ),\n );\n\n const overlappedGroupPromises = groupsWithGroupedOverlaps\n .filter((group) => group.groupIds.size !== 1)\n .map(async (group) =>\n processGroupVisualization(\n group,\n hiddenGroupsIds,\n doEmphasizeElements,\n generateHSL(0), // color for group of overlapped elements\n false,\n setNumberOfVisualizedGroups,\n ),\n );\n\n clearHiddenElements();\n\n const allPromises = [...singleGroupPromises, ...overlappedGroupPromises];\n\n const allIds = (await Promise.all(allPromises)).flat();\n return allIds;\n};\n\nexport const getHiliteIdsAndKeysetFromGroup = async (iModelConnection: IModelConnection, group: GroupMinimal) => {\n const query = group.query;\n const result = await getHiliteIds(query, iModelConnection);\n return { query, result };\n};\n\nconst getOverlappedElementsInfo = (overlappedElements: OverlappedElementGroupPairs[]) => {\n const overlappedElementsInfo: Map<string, OverlappedInfo[]> = new Map();\n\n overlappedElements.forEach((elementGroup) => {\n const { elementIds, groupIds } = elementGroup;\n\n groupIds.forEach((group) => {\n const otherGroups = Array.from(groupIds).filter((grp) => grp !== group);\n const overlappedInfoArray = overlappedElementsInfo.get(group) ?? [];\n overlappedInfoArray.push({ groupIds: otherGroups, elements: Array.from(elementIds) });\n overlappedElementsInfo.set(group, overlappedInfoArray);\n });\n });\n return overlappedElementsInfo;\n};\n\nconst mergeElementsByGroup = (elems: Map<string, Set<string>>) => {\n const mergedList: Map<string, OverlappedElementGroupPairs> = new Map();\n elems.forEach((groupIds, elementId) => {\n const sortedGroups = Array.from(groupIds).sort();\n const key = sortedGroups.join(\"-\");\n const overlap = mergedList.get(key);\n if (overlap) {\n overlap.elementIds.add(elementId);\n } else {\n mergedList.set(key, { elementIds: new Set([elementId]), groupIds });\n }\n });\n return mergedList;\n};\n\nexport const generateOverlappedGroups = (groupsElementIds: GroupsElementIds) => {\n const elems: Map<string, Set<string>> = new Map();\n const groupElementCount: Map<string, number> = new Map();\n\n // Build the elems map for associations between elements and their groups.\n for (const groupInfo of groupsElementIds) {\n for (const elem of groupInfo.elementIds) {\n const elemGroups = elems.get(elem) || new Set<string>();\n elemGroups.add(groupInfo.groupId);\n elems.set(elem, elemGroups);\n }\n groupElementCount.set(groupInfo.groupId, groupInfo.elementIds.length);\n }\n\n // Construct the unique list of all groups and their overlapped groups combinations\n const allGroups: OverlappedElementGroupPairs[] = groupsElementIds.map((groupInfo) => {\n const nonOverlappingElements = Array.from(new Set(groupInfo.elementIds)).filter((elem) => elems.get(elem)!.size === 1);\n groupElementCount.set(groupInfo.groupId, groupInfo.elementIds.length);\n return { elementIds: new Set(nonOverlappingElements), groupIds: new Set([groupInfo.groupId]) };\n });\n\n const mergedList = mergeElementsByGroup(elems);\n const overlappedGroupsInformation: OverlappedElementGroupPairs[] = Array.from(mergedList.values()).filter((value) => value.groupIds.size > 1);\n\n return {\n groupsWithGroupedOverlaps: [...allGroups, ...overlappedGroupsInformation],\n overlappedElementsInfo: getOverlappedElementsInfo(overlappedGroupsInformation),\n numberOfElementsInGroups: groupElementCount,\n };\n};\n\nexport const hideGroupConsideringOverlaps = (\n overlappedElementGroupPairs: OverlappedElementGroupPairs[],\n groupIdToHide: string,\n hiddenGroupsIds: Set<string>,\n) => {\n const elementsToPotentiallyHide = new Set<string>();\n\n // Check each entry in overlappedElementGroupPairs\n for (const entry of overlappedElementGroupPairs) {\n // If the groupToHide is part of this entry\n if (entry.groupIds.has(groupIdToHide)) {\n // If this is a unique entry (no overlaps for this group), add all its elements to hide list\n if (entry.groupIds.size === 1) {\n for (const elem of entry.elementIds) {\n elementsToPotentiallyHide.add(elem);\n }\n } else {\n // If there are overlaps, only hide if all overlapping groups are hidden\n const allOtherGroupsHidden = Array.from(entry.groupIds).every((groupId) => groupId === groupIdToHide || hiddenGroupsIds.has(groupId));\n if (allOtherGroupsHidden) {\n for (const elem of entry.elementIds) {\n elementsToPotentiallyHide.add(elem);\n }\n }\n }\n }\n }\n\n // Now hide all elements in elementsToPotentiallyHide\n hideElements(Array.from(elementsToPotentiallyHide));\n};\n"]}
1
+ {"version":3,"file":"groupsHelpers.js","sourceRoot":"","sources":["../../../../src/components/Groups/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 { GroupMinimal } from \"@itwin/insights-client\";\nimport type { OverlappedElementGroupPairs, OverlappedInfo } from \"../context/GroupHilitedElementsContext\";\nimport {\n clearEmphasizedOverriddenElements,\n clearHiddenElements,\n emphasizeElements,\n getHiliteIds,\n hideElements,\n overrideElements,\n} from \"../../common/viewerUtils\";\n\nconst GOLDEN_ANGLE_MULTIPLIER = 1.5; // Multiplier to spread colors more uniformly.\nconst BASE_HUE_OFFSET = 60; // Initial hue offset to avoid certain colors e.g 0 offset would begin with red.\nconst HUE_ADJUSTMENT_STEP = 15; // Step to adjust the hue to avoid the red spectrum.\nconst RED_HUE_LOWER_BOUND = 330; // Lower bound of the red hue spectrum to avoid.\nconst RED_HUE_UPPER_BOUND = 30; // Upper bound of the red hue spectrum to avoid.\nconst GOLDENANGLE = 180 * (3 - Math.sqrt(5));\n\nconst generateHSL = (hue: number, saturation: number = 100, lightness: number = 50) => {\n return `hsl(${hue}, ${saturation}%, ${lightness}%)`;\n};\n\nexport const getGroupColor = (index: number) => {\n let hue = (index * GOLDENANGLE * GOLDEN_ANGLE_MULTIPLIER + BASE_HUE_OFFSET) % 360;\n\n while (hue >= RED_HUE_LOWER_BOUND || hue <= RED_HUE_UPPER_BOUND) {\n hue = (hue + HUE_ADJUSTMENT_STEP) % 360;\n }\n\n return generateHSL(hue);\n};\n\nconst processGroupVisualization = async (\n overlappedElementGroupPairs: OverlappedElementGroupPairs,\n hiddenGroupsIds: Set<string>,\n doEmphasizeElements: boolean,\n color: string,\n replace: boolean,\n setNumberOfVisualizedGroups: (numberOfVisualizedGroups: number | ((numberOfVisualizedGroups: number) => number)) => void,\n) => {\n const hilitedIds = Array.from(overlappedElementGroupPairs.elementIds);\n\n overrideElements(hilitedIds, color, FeatureOverrideType.ColorAndAlpha, replace);\n setNumberOfVisualizedGroups((numberOfVisualizedGroups) => numberOfVisualizedGroups + 1);\n\n doEmphasizeElements && emphasizeElements(hilitedIds, undefined);\n\n for (const id of overlappedElementGroupPairs.groupIds) {\n if (hiddenGroupsIds.has(id)) {\n return [];\n }\n }\n return hilitedIds;\n};\n\nexport type GroupsElementIds = {\n groupId: string;\n elementIds: string[];\n}[];\n\nexport const hideGroupIds = (hiddenGroupIds: Set<string>, groupsWithGroupedOverlaps: OverlappedElementGroupPairs[]) => {\n hiddenGroupIds.forEach((groupId) => {\n hideGroupConsideringOverlaps(groupsWithGroupedOverlaps, groupId, hiddenGroupIds);\n });\n};\n\nexport const visualizeGroupColors = async (\n hiddenGroupsIds: Set<string>,\n groupsWithGroupedOverlaps: OverlappedElementGroupPairs[],\n setNumberOfVisualizedGroups: (numberOfVisualizedGroups: number | ((numberOfVisualizedGroups: number) => number)) => void,\n doEmphasizeElements: boolean = true,\n) => {\n clearEmphasizedOverriddenElements();\n\n const singleGroupPromises = groupsWithGroupedOverlaps\n .filter((group) => group.groupIds.size === 1)\n .map(async (group, index) =>\n processGroupVisualization(\n group,\n hiddenGroupsIds,\n doEmphasizeElements,\n getGroupColor(index), // color for single group\n false, // Shouldn't matter as replacement only accounts for same colored overrides.\n setNumberOfVisualizedGroups,\n ),\n );\n\n const overlappedGroupPromises = groupsWithGroupedOverlaps\n .filter((group) => group.groupIds.size !== 1)\n .map(async (group) =>\n processGroupVisualization(\n group,\n hiddenGroupsIds,\n doEmphasizeElements,\n generateHSL(0), // color for group of overlapped elements\n false,\n setNumberOfVisualizedGroups,\n ),\n );\n\n clearHiddenElements();\n\n const allPromises = [...singleGroupPromises, ...overlappedGroupPromises];\n\n const allIds = (await Promise.all(allPromises)).flat();\n return allIds;\n};\n\nexport const getHiliteIdsAndKeysetFromGroup = async (iModelConnection: IModelConnection, group: GroupMinimal) => {\n const query = group.query;\n const result = await getHiliteIds(query, iModelConnection);\n return { query, result };\n};\n\nconst getOverlappedElementsInfo = (overlappedElements: OverlappedElementGroupPairs[]) => {\n const overlappedElementsInfo: Map<string, OverlappedInfo[]> = new Map();\n\n overlappedElements.forEach((elementGroup) => {\n const { elementIds, groupIds } = elementGroup;\n\n groupIds.forEach((group) => {\n const otherGroups = Array.from(groupIds).filter((grp) => grp !== group);\n const overlappedInfoArray = overlappedElementsInfo.get(group) ?? [];\n overlappedInfoArray.push({ groupIds: otherGroups, elements: Array.from(elementIds) });\n overlappedElementsInfo.set(group, overlappedInfoArray);\n });\n });\n return overlappedElementsInfo;\n};\n\nconst mergeElementsByGroup = (elems: Map<string, Set<string>>) => {\n const mergedList: Map<string, OverlappedElementGroupPairs> = new Map();\n elems.forEach((groupIds, elementId) => {\n const sortedGroups = Array.from(groupIds).sort();\n const key = sortedGroups.join(\"-\");\n const overlap = mergedList.get(key);\n if (overlap) {\n overlap.elementIds.add(elementId);\n } else {\n mergedList.set(key, { elementIds: new Set([elementId]), groupIds });\n }\n });\n return mergedList;\n};\n\nexport const generateOverlappedGroups = (groupsElementIds: GroupsElementIds) => {\n const elems: Map<string, Set<string>> = new Map();\n const groupElementCount: Map<string, number> = new Map();\n\n // Build the elems map for associations between elements and their groups.\n for (const groupInfo of groupsElementIds) {\n for (const elem of groupInfo.elementIds) {\n const elemGroups = elems.get(elem) || new Set<string>();\n elemGroups.add(groupInfo.groupId);\n elems.set(elem, elemGroups);\n }\n groupElementCount.set(groupInfo.groupId, groupInfo.elementIds.length);\n }\n\n // Construct the unique list of all groups and their overlapped groups combinations\n const allGroups: OverlappedElementGroupPairs[] = groupsElementIds.map((groupInfo) => {\n const nonOverlappingElements = Array.from(new Set(groupInfo.elementIds)).filter((elem) => elems.get(elem)!.size === 1);\n groupElementCount.set(groupInfo.groupId, groupInfo.elementIds.length);\n return { elementIds: new Set(nonOverlappingElements), groupIds: new Set([groupInfo.groupId]) };\n });\n\n const mergedList = mergeElementsByGroup(elems);\n const overlappedGroupsInformation: OverlappedElementGroupPairs[] = Array.from(mergedList.values()).filter((value) => value.groupIds.size > 1);\n\n return {\n groupsWithGroupedOverlaps: [...allGroups, ...overlappedGroupsInformation],\n overlappedElementsInfo: getOverlappedElementsInfo(overlappedGroupsInformation),\n numberOfElementsInGroups: groupElementCount,\n };\n};\n\nexport const hideGroupConsideringOverlaps = (\n overlappedElementGroupPairs: OverlappedElementGroupPairs[],\n groupIdToHide: string,\n hiddenGroupsIds: Set<string>,\n) => {\n const elementsToPotentiallyHide = new Set<string>();\n\n // Check each entry in overlappedElementGroupPairs\n for (const entry of overlappedElementGroupPairs) {\n // If the groupToHide is part of this entry\n if (entry.groupIds.has(groupIdToHide)) {\n // If this is a unique entry (no overlaps for this group), add all its elements to hide list\n if (entry.groupIds.size === 1) {\n for (const elem of entry.elementIds) {\n elementsToPotentiallyHide.add(elem);\n }\n } else {\n // If there are overlaps, only hide if all overlapping groups are hidden\n const allOtherGroupsHidden = Array.from(entry.groupIds).every((groupId) => groupId === groupIdToHide || hiddenGroupsIds.has(groupId));\n if (allOtherGroupsHidden) {\n for (const elem of entry.elementIds) {\n elementsToPotentiallyHide.add(elem);\n }\n }\n }\n }\n }\n\n // Now hide all elements in elementsToPotentiallyHide\n hideElements(Array.from(elementsToPotentiallyHide));\n};\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { GroupMinimal } from "@itwin/insights-client";
3
2
  import type { ContextCustomUI, GroupingCustomUI } from "../../customUI/GroupingMappingCustomUI";
4
3
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useGroupsOperations.js","sourceRoot":"","sources":["../../../../../src/components/Groups/hooks/useGroupsOperations.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG,iCAA8C;AAE9C,qFAAqF;AAErF,oFAAqF;AACrF,iGAA0F;AAC1F,2FAA2F;AAC3F,uDAAoE;AACpE,qDAAkD;AAClD,2EAAoE;AAUpE;;;GAGG;AACI,MAAM,mBAAmB,GAAG,CAAC,EAAE,SAAS,EAAyB,EAAE,EAAE;IAC1E,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,sDAA2B,GAAE,CAAC;IACzD,MAAM,EACJ,0BAA0B,EAAE,EAAE,sBAAsB,EAAE,GACvD,GAAG,IAAA,4DAA8B,GAAE,CAAC;IAErC,MAAM,YAAY,GAAG,IAAA,qCAAe,GAAE,CAAC;IACvC,MAAM,QAAQ,GAAuB,IAAA,2DAA0B,GAAE,CAAC,SAAS,CAAC,MAAM,CAChF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qDAA2B,CAAC,QAAQ,CACjC,CAAC;IACxB,MAAM,UAAU,GAAsB,IAAA,2DAA0B,GAAE,CAAC,SAAS,CAAC,MAAM,CACjF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qDAA2B,CAAC,OAAO,CACjC,CAAC;IACvB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAA2B,SAAS,CAAC,CAAC;IAC5F,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAqB,SAAS,CAAC,CAAC;IAChF,MAAM,CAAC,2BAA2B,EAAE,8BAA8B,CAAC,GAAG,IAAA,gBAAQ,EAA2B,SAAS,CAAC,CAAC;IACpH,MAAM,WAAW,GAAG,IAAA,4BAAc,GAAE,CAAC;IAErC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,+BAAc,EAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAE5F,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QACrC,MAAM,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAE7B,MAAM,mBAAmB,GAAG,IAAA,yBAAW,EAAC;QACtC,UAAU,EAAE,KAAK,EAAE,KAAmB,EAAE,EAAE;YACxC,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YAC3C,MAAM,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,SAAS,EAAE,OAAO;KACnB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,KAAK,EAAE,KAAmB,EAAE,EAAE;QAClD,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO;QACL,MAAM;QACN,SAAS;QACT,OAAO;QACP,aAAa;QACb,kBAAkB;QAClB,eAAe;QACf,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,eAAe;QACf,2BAA2B;QAC3B,8BAA8B;QAC9B,sBAAsB;KACvB,CAAC;AACJ,CAAC,CAAC;AAnDW,QAAA,mBAAmB,uBAmD9B","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 { useCallback, useState } from \"react\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport type { ContextCustomUI, GroupingCustomUI } from \"../../customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"../../customUI/GroupingMappingCustomUI\";\nimport { useGroupingMappingCustomUI } from \"../../context/GroupingMappingCustomUIContext\";\nimport { useGroupHilitedElementsContext } from \"../../context/GroupHilitedElementsContext\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useFetchGroups } from \"./useFetchGroups\";\nimport { useGroupsClient } from \"../../context/GroupsClientContext\";\n\n/**\n * Props for the {@link useGroupsOperations} hook.\n * @internal\n */\nexport interface GroupsOperationsProps {\n mappingId: string;\n}\n\n/**\n * Custom hook to handle group operations.\n * @internal\n */\nexport const useGroupsOperations = ({ mappingId }: GroupsOperationsProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const {\n overlappedElementsMetadata: { overlappedElementsInfo },\n } = useGroupHilitedElementsContext();\n\n const groupsClient = useGroupsClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Grouping,\n ) as GroupingCustomUI[];\n const contextUIs: ContextCustomUI[] = useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Context,\n ) as ContextCustomUI[];\n const [showDeleteModal, setShowDeleteModal] = useState<GroupMinimal | undefined>(undefined);\n const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n const [activeOverlapInfoPanelGroup, setActiveOverlapInfoPanelGroup] = useState<GroupMinimal | undefined>(undefined);\n const queryClient = useQueryClient();\n\n const { data: groups, isLoading } = useFetchGroups(mappingId, getAccessToken, groupsClient);\n\n const refresh = useCallback(async () => {\n await queryClient.invalidateQueries({ queryKey: [\"groups\", mappingId] });\n }, [mappingId, queryClient]);\n\n const deleteGroupMutation = useMutation({\n mutationFn: async (group: GroupMinimal) => {\n const accessToken = await getAccessToken();\n await groupsClient.deleteGroup(accessToken, mappingId, group.id);\n },\n onSuccess: refresh,\n });\n\n const onDeleteGroup = async (group: GroupMinimal) => {\n deleteGroupMutation.mutate(group);\n };\n\n return {\n groups,\n isLoading,\n refresh,\n onDeleteGroup,\n setShowDeleteModal,\n showDeleteModal,\n groupUIs,\n contextUIs,\n errorMessage,\n setErrorMessage,\n activeOverlapInfoPanelGroup,\n setActiveOverlapInfoPanelGroup,\n overlappedElementsInfo,\n };\n};\n"]}
1
+ {"version":3,"file":"useGroupsOperations.js","sourceRoot":"","sources":["../../../../../src/components/Groups/hooks/useGroupsOperations.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG,iCAA8C;AAE9C,qFAAqF;AAErF,oFAAqF;AACrF,iGAA0F;AAC1F,2FAA2F;AAC3F,uDAAoE;AACpE,qDAAkD;AAClD,2EAAoE;AAUpE;;;GAGG;AACI,MAAM,mBAAmB,GAAG,CAAC,EAAE,SAAS,EAAyB,EAAE,EAAE;IAC1E,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,sDAA2B,GAAE,CAAC;IACzD,MAAM,EACJ,0BAA0B,EAAE,EAAE,sBAAsB,EAAE,GACvD,GAAG,IAAA,4DAA8B,GAAE,CAAC;IAErC,MAAM,YAAY,GAAG,IAAA,qCAAe,GAAE,CAAC;IACvC,MAAM,QAAQ,GAAuB,IAAA,2DAA0B,GAAE,CAAC,SAAS,CAAC,MAAM,CAChF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qDAA2B,CAAC,QAAQ,CACvD,CAAC;IACF,MAAM,UAAU,GAAsB,IAAA,2DAA0B,GAAE,CAAC,SAAS,CAAC,MAAM,CACjF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qDAA2B,CAAC,OAAO,CACtD,CAAC;IACF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAA2B,SAAS,CAAC,CAAC;IAC5F,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAqB,SAAS,CAAC,CAAC;IAChF,MAAM,CAAC,2BAA2B,EAAE,8BAA8B,CAAC,GAAG,IAAA,gBAAQ,EAA2B,SAAS,CAAC,CAAC;IACpH,MAAM,WAAW,GAAG,IAAA,4BAAc,GAAE,CAAC;IAErC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,+BAAc,EAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAE5F,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QACrC,MAAM,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAE7B,MAAM,mBAAmB,GAAG,IAAA,yBAAW,EAAC;QACtC,UAAU,EAAE,KAAK,EAAE,KAAmB,EAAE,EAAE;YACxC,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YAC3C,MAAM,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,SAAS,EAAE,OAAO;KACnB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,KAAK,EAAE,KAAmB,EAAE,EAAE;QAClD,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO;QACL,MAAM;QACN,SAAS;QACT,OAAO;QACP,aAAa;QACb,kBAAkB;QAClB,eAAe;QACf,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,eAAe;QACf,2BAA2B;QAC3B,8BAA8B;QAC9B,sBAAsB;KACvB,CAAC;AACJ,CAAC,CAAC;AAnDW,QAAA,mBAAmB,uBAmD9B","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 { useCallback, useState } from \"react\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport type { ContextCustomUI, GroupingCustomUI } from \"../../customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"../../customUI/GroupingMappingCustomUI\";\nimport { useGroupingMappingCustomUI } from \"../../context/GroupingMappingCustomUIContext\";\nimport { useGroupHilitedElementsContext } from \"../../context/GroupHilitedElementsContext\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useFetchGroups } from \"./useFetchGroups\";\nimport { useGroupsClient } from \"../../context/GroupsClientContext\";\n\n/**\n * Props for the {@link useGroupsOperations} hook.\n * @internal\n */\nexport interface GroupsOperationsProps {\n mappingId: string;\n}\n\n/**\n * Custom hook to handle group operations.\n * @internal\n */\nexport const useGroupsOperations = ({ mappingId }: GroupsOperationsProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const {\n overlappedElementsMetadata: { overlappedElementsInfo },\n } = useGroupHilitedElementsContext();\n\n const groupsClient = useGroupsClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Grouping,\n );\n const contextUIs: ContextCustomUI[] = useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Context,\n );\n const [showDeleteModal, setShowDeleteModal] = useState<GroupMinimal | undefined>(undefined);\n const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n const [activeOverlapInfoPanelGroup, setActiveOverlapInfoPanelGroup] = useState<GroupMinimal | undefined>(undefined);\n const queryClient = useQueryClient();\n\n const { data: groups, isLoading } = useFetchGroups(mappingId, getAccessToken, groupsClient);\n\n const refresh = useCallback(async () => {\n await queryClient.invalidateQueries({ queryKey: [\"groups\", mappingId] });\n }, [mappingId, queryClient]);\n\n const deleteGroupMutation = useMutation({\n mutationFn: async (group: GroupMinimal) => {\n const accessToken = await getAccessToken();\n await groupsClient.deleteGroup(accessToken, mappingId, group.id);\n },\n onSuccess: refresh,\n });\n\n const onDeleteGroup = async (group: GroupMinimal) => {\n deleteGroupMutation.mutate(group);\n };\n\n return {\n groups,\n isLoading,\n refresh,\n onDeleteGroup,\n setShowDeleteModal,\n showDeleteModal,\n groupUIs,\n contextUIs,\n errorMessage,\n setErrorMessage,\n activeOverlapInfoPanelGroup,\n setActiveOverlapInfoPanelGroup,\n overlappedElementsInfo,\n };\n};\n"]}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useKeySetHiliteQueries = exports.useGroupKeySetQuery = exports.createQueryForHiliteIdsAndKeyset = void 0;
4
4
  const react_query_1 = require("@tanstack/react-query");
5
- const react_query_2 = require("@tanstack/react-query");
6
5
  const react_1 = require("react");
7
6
  const useMemoizedCollectionPick_1 = require("../../../common/hooks/useMemoizedCollectionPick");
8
7
  const Constants_1 = require("../../Constants");
@@ -23,7 +22,7 @@ const useGroupKeySetQuery = (group, iModelConnection, enabled) => {
23
22
  exports.useGroupKeySetQuery = useGroupKeySetQuery;
24
23
  const useKeySetHiliteQueries = (groups, enabled, iModelConnection) => {
25
24
  const queries = (0, react_1.useMemo)(() => groups.map((group) => (0, exports.createQueryForHiliteIdsAndKeyset)(group, iModelConnection, enabled)), [groups, iModelConnection, enabled]);
26
- const useQueriesHook = (0, react_query_2.useQueries)({ queries });
25
+ const useQueriesHook = (0, react_query_1.useQueries)({ queries });
27
26
  const groupQueries = (0, useMemoizedCollectionPick_1.useMemoizedCollectionPick)(useQueriesHook, ["data", "isFetching", "isFetched", "refetch"]);
28
27
  return { groupQueries };
29
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useKeySetHiliteQueries.js","sourceRoot":"","sources":["../../../../../src/components/Groups/hooks/useKeySetHiliteQueries.ts"],"names":[],"mappings":";;;AAQA,uDAAiD;AACjD,uDAAmD;AACnD,iCAAgC;AAChC,+FAA4F;AAC5F,+CAA4C;AAC5C,oDAAkE;AASlE,EAAE,CAAC;AAII,MAAM,gCAAgC,GAAG,CAAC,KAAmB,EAAE,gBAAkC,EAAE,OAAgB,EAAE,EAAE,CAAC,CAAC;IAC9H,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;IAC7C,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAA,8CAA8B,EAAC,gBAAgB,EAAE,KAAK,CAAC;IAC5E,OAAO;IACP,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,EAAE,SAAS,EAAE,qBAAS,CAAC,yBAAyB,EAAE,OAAO,EAAE,qBAAqB,KAAK,CAAC,SAAS,GAAG,EAAE;CAC3G,CAAC,CAAC;AANU,QAAA,gCAAgC,oCAM1C;AAEI,MAAM,mBAAmB,GAAG,CAAC,KAAmB,EAAE,gBAAkC,EAAE,OAAgB,EAAE,EAAE;IAC/G,MAAM,KAAK,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,wCAAgC,EAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEpI,OAAO,IAAA,sBAAQ,EAAe,KAAK,CAAC,CAAC;AACvC,CAAC,CAAC;AAJW,QAAA,mBAAmB,uBAI9B;AAEK,MAAM,sBAAsB,GAAG,CAAC,MAAsB,EAAE,OAAgB,EAAE,gBAAkC,EAAE,EAAE;IACrH,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,wCAAgC,EAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IAE9J,MAAM,cAAc,GAAG,IAAA,wBAAU,EAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,MAAM,YAAY,GAAG,IAAA,qDAAyB,EAAC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/G,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC,CAAC;AARW,QAAA,sBAAsB,0BAQjC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport type { KeySet } from \"@itwin/presentation-common\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { useMemoizedCollectionPick } from \"../../../common/hooks/useMemoizedCollectionPick\";\nimport { TErrCodes } from \"../../Constants\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"../groupsHelpers\";\n\nexport interface QueryResults {\n query: string;\n result: {\n keySet: KeySet;\n ids: string[];\n };\n}\n[];\n\ntype TQueries = UseQueryOptions<QueryResults>[];\n\nexport const createQueryForHiliteIdsAndKeyset = (group: GroupMinimal, iModelConnection: IModelConnection, enabled: boolean) => ({\n queryKey: [\"group\", \"hiliteids\", group.query],\n queryFn: async () => getHiliteIdsAndKeysetFromGroup(iModelConnection, group),\n enabled,\n staleTime: Infinity,\n meta: { errorCode: TErrCodes.QUERY_HILITE_FETCH_FAILED, message: `Failed to resolve ${group.groupName}.` },\n});\n\nexport const useGroupKeySetQuery = (group: GroupMinimal, iModelConnection: IModelConnection, enabled: boolean) => {\n const query = useMemo(() => createQueryForHiliteIdsAndKeyset(group, iModelConnection, enabled), [enabled, group, iModelConnection]);\n\n return useQuery<QueryResults>(query);\n};\n\nexport const useKeySetHiliteQueries = (groups: GroupMinimal[], enabled: boolean, iModelConnection: IModelConnection) => {\n const queries = useMemo(() => groups.map((group) => createQueryForHiliteIdsAndKeyset(group, iModelConnection, enabled)), [groups, iModelConnection, enabled]);\n\n const useQueriesHook = useQueries<TQueries>({ queries });\n\n const groupQueries = useMemoizedCollectionPick(useQueriesHook, [\"data\", \"isFetching\", \"isFetched\", \"refetch\"]);\n\n return { groupQueries };\n};\n"]}
1
+ {"version":3,"file":"useKeySetHiliteQueries.js","sourceRoot":"","sources":["../../../../../src/components/Groups/hooks/useKeySetHiliteQueries.ts"],"names":[],"mappings":";;;AAQA,uDAA8D;AAC9D,iCAAgC;AAChC,+FAA4F;AAC5F,+CAA4C;AAC5C,oDAAkE;AASlE,EAAE,CAAC;AAII,MAAM,gCAAgC,GAAG,CAAC,KAAmB,EAAE,gBAAkC,EAAE,OAAgB,EAAE,EAAE,CAAC,CAAC;IAC9H,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;IAC7C,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAA,8CAA8B,EAAC,gBAAgB,EAAE,KAAK,CAAC;IAC5E,OAAO;IACP,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,EAAE,SAAS,EAAE,qBAAS,CAAC,yBAAyB,EAAE,OAAO,EAAE,qBAAqB,KAAK,CAAC,SAAS,GAAG,EAAE;CAC3G,CAAC,CAAC;AANU,QAAA,gCAAgC,oCAM1C;AAEI,MAAM,mBAAmB,GAAG,CAAC,KAAmB,EAAE,gBAAkC,EAAE,OAAgB,EAAE,EAAE;IAC/G,MAAM,KAAK,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,wCAAgC,EAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEpI,OAAO,IAAA,sBAAQ,EAAe,KAAK,CAAC,CAAC;AACvC,CAAC,CAAC;AAJW,QAAA,mBAAmB,uBAI9B;AAEK,MAAM,sBAAsB,GAAG,CAAC,MAAsB,EAAE,OAAgB,EAAE,gBAAkC,EAAE,EAAE;IACrH,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,wCAAgC,EAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IAE9J,MAAM,cAAc,GAAG,IAAA,wBAAU,EAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,MAAM,YAAY,GAAG,IAAA,qDAAyB,EAAC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/G,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC,CAAC;AARW,QAAA,sBAAsB,0BAQjC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport type { KeySet } from \"@itwin/presentation-common\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport { useQueries , useQuery } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { useMemoizedCollectionPick } from \"../../../common/hooks/useMemoizedCollectionPick\";\nimport { TErrCodes } from \"../../Constants\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"../groupsHelpers\";\n\nexport interface QueryResults {\n query: string;\n result: {\n keySet: KeySet;\n ids: string[];\n };\n}\n[];\n\ntype TQueries = UseQueryOptions<QueryResults>[];\n\nexport const createQueryForHiliteIdsAndKeyset = (group: GroupMinimal, iModelConnection: IModelConnection, enabled: boolean) => ({\n queryKey: [\"group\", \"hiliteids\", group.query],\n queryFn: async () => getHiliteIdsAndKeysetFromGroup(iModelConnection, group),\n enabled,\n staleTime: Infinity,\n meta: { errorCode: TErrCodes.QUERY_HILITE_FETCH_FAILED, message: `Failed to resolve ${group.groupName}.` },\n});\n\nexport const useGroupKeySetQuery = (group: GroupMinimal, iModelConnection: IModelConnection, enabled: boolean) => {\n const query = useMemo(() => createQueryForHiliteIdsAndKeyset(group, iModelConnection, enabled), [enabled, group, iModelConnection]);\n\n return useQuery<QueryResults>(query);\n};\n\nexport const useKeySetHiliteQueries = (groups: GroupMinimal[], enabled: boolean, iModelConnection: IModelConnection) => {\n const queries = useMemo(() => groups.map((group) => createQueryForHiliteIdsAndKeyset(group, iModelConnection, enabled)), [groups, iModelConnection, enabled]);\n\n const useQueriesHook = useQueries<TQueries>({ queries });\n\n const groupQueries = useMemoizedCollectionPick(useQueriesHook, [\"data\", \"isFetching\", \"isFetched\", \"refetch\"]);\n\n return { groupQueries };\n};\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { IModelConnection } from "@itwin/core-frontend";
3
2
  export declare const useVisualization: (shouldVisualize: boolean, iModelConnection: IModelConnection, query: string, queryGenerationType: string) => {
4
3
  isRendering: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useVisualization.js","sourceRoot":"","sources":["../../../../../src/components/Groups/hooks/useVisualization.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { toaster } from \"@itwin/itwinui-react\";\nimport type { ISelectionProvider, SelectionChangeEventArgs } from \"@itwin/presentation-frontend\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { GroupingMappingWidget } from \"../../../GroupingMappingWidget\";\nimport { useGroupHilitedElementsContext } from \"../../context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"../groupsHelpers\";\nimport {\n clearEmphasizedElements,\n clearOverriddenElements,\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"../../../common/viewerUtils\";\n\nexport const useVisualization = (shouldVisualize: boolean, iModelConnection: IModelConnection, query: string, queryGenerationType: string) => {\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const {\n showGroupColor,\n hiddenGroupsIds,\n overlappedElementsMetadata: { overlappedElementGroupPairs },\n setNumberOfVisualizedGroups,\n } = useGroupHilitedElementsContext();\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n\n const resetView = useCallback(async () => {\n if (!shouldVisualize) return;\n if (showGroupColor) {\n await visualizeGroupColors(hiddenGroupsIds, overlappedElementGroupPairs, setNumberOfVisualizedGroups);\n } else {\n clearOverriddenElements();\n }\n clearEmphasizedElements();\n }, [hiddenGroupsIds, overlappedElementGroupPairs, setNumberOfVisualizedGroups, shouldVisualize, showGroupColor]);\n\n useEffect(() => {\n if (!shouldVisualize) return;\n const removeListener = Presentation.selection.selectionChange.addListener(async (evt: SelectionChangeEventArgs, selectionProvider: ISelectionProvider) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(evt.imodel, evt.level);\n const query = selection.instanceKeys.size > 0 ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}` : \"\";\n setSimpleSelectionQuery(query);\n }\n });\n return removeListener;\n }, [iModelConnection, queryGenerationType, shouldVisualize]);\n\n useEffect(() => {\n if (!shouldVisualize) return;\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n setIsRendering(true);\n transparentOverriddenElements();\n const resolvedHiliteIds = await visualizeElementsByQuery(query, \"red\", iModelConnection);\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(GroupingMappingWidget.translate(\"errors.invalidQuery\"));\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query, shouldVisualize]);\n\n const clearPresentationSelection = useCallback(\n () => shouldVisualize && Presentation.selection.clearSelection(\"GroupingMappingWidget\", iModelConnection),\n [iModelConnection, shouldVisualize],\n );\n\n useEffect(() => {\n clearPresentationSelection();\n }, [clearPresentationSelection, iModelConnection]);\n\n return { isRendering, setIsRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView };\n};\n"]}
1
+ {"version":3,"file":"useVisualization.js","sourceRoot":"","sources":["../../../../../src/components/Groups/hooks/useVisualization.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { toaster } from \"@itwin/itwinui-react\";\nimport type { ISelectionProvider, SelectionChangeEventArgs } from \"@itwin/presentation-frontend\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { GroupingMappingWidget } from \"../../../GroupingMappingWidget\";\nimport { useGroupHilitedElementsContext } from \"../../context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"../groupsHelpers\";\nimport {\n clearEmphasizedElements,\n clearOverriddenElements,\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"../../../common/viewerUtils\";\n\nexport const useVisualization = (shouldVisualize: boolean, iModelConnection: IModelConnection, query: string, queryGenerationType: string) => {\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const {\n showGroupColor,\n hiddenGroupsIds,\n overlappedElementsMetadata: { overlappedElementGroupPairs },\n setNumberOfVisualizedGroups,\n } = useGroupHilitedElementsContext();\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n\n const resetView = useCallback(async () => {\n if (!shouldVisualize) return;\n if (showGroupColor) {\n await visualizeGroupColors(hiddenGroupsIds, overlappedElementGroupPairs, setNumberOfVisualizedGroups);\n } else {\n clearOverriddenElements();\n }\n clearEmphasizedElements();\n }, [hiddenGroupsIds, overlappedElementGroupPairs, setNumberOfVisualizedGroups, shouldVisualize, showGroupColor]);\n\n useEffect(() => {\n if (!shouldVisualize) return;\n const removeListener = Presentation.selection.selectionChange.addListener(async (evt: SelectionChangeEventArgs, selectionProvider: ISelectionProvider) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(evt.imodel, evt.level);\n const query = selection.instanceKeys.size > 0 ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}` : \"\";\n setSimpleSelectionQuery(query);\n }\n });\n return removeListener;\n }, [iModelConnection, queryGenerationType, shouldVisualize]);\n\n useEffect(() => {\n if (!shouldVisualize) return;\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n setIsRendering(true);\n transparentOverriddenElements();\n const resolvedHiliteIds = await visualizeElementsByQuery(query, \"red\", iModelConnection);\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(GroupingMappingWidget.translate(\"errors.invalidQuery\"));\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query, shouldVisualize]);\n\n const clearPresentationSelection = useCallback(\n () => shouldVisualize && Presentation.selection.clearSelection(\"GroupingMappingWidget\", iModelConnection),\n [iModelConnection, shouldVisualize],\n );\n\n useEffect(() => {\n clearPresentationSelection();\n }, [clearPresentationSelection, iModelConnection]);\n\n return { isRendering, setIsRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView };\n};\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import "./BlockingOverlay.scss";
3
2
  export interface BlockingOverlayProps {
4
3
  isVisible: boolean;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import "./MappingAction.scss";
3
2
  import type { Mapping } from "@itwin/insights-client";
4
3
  declare const getDefaultDisplayStrings: () => {