@itwin/grouping-mapping-widget 0.26.0 → 0.27.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 (611) hide show
  1. package/LICENSE.md +9 -9
  2. package/README.md +115 -115
  3. package/lib/cjs/WidgetShell/GroupingMapping.js +2 -4
  4. package/lib/cjs/WidgetShell/GroupingMapping.js.map +1 -1
  5. package/lib/cjs/WidgetShell/GroupingMappingContent.js +4 -4
  6. package/lib/cjs/WidgetShell/GroupingMappingContent.js.map +1 -1
  7. package/lib/cjs/WidgetShell/GroupingMappingHeader.d.ts +1 -1
  8. package/lib/cjs/WidgetShell/GroupingMappingHeader.js +5 -5
  9. package/lib/cjs/WidgetShell/GroupingMappingHeader.js.map +1 -1
  10. package/lib/cjs/WidgetShell/GroupingMappingWidget.js +1 -3
  11. package/lib/cjs/WidgetShell/GroupingMappingWidget.js.map +1 -1
  12. package/lib/cjs/WidgetShell/Router/GroupingMappingRouter.js +29 -23
  13. package/lib/cjs/WidgetShell/Router/GroupingMappingRouter.js.map +1 -1
  14. package/lib/cjs/WidgetShell/WidgetHeader/WidgetHeader.d.ts +1 -1
  15. package/lib/cjs/WidgetShell/WidgetHeader/WidgetHeader.js +7 -7
  16. package/lib/cjs/WidgetShell/WidgetHeader/WidgetHeader.js.map +1 -1
  17. package/lib/cjs/common/hooks/useIsMounted.js +3 -3
  18. package/lib/cjs/common/hooks/useIsMounted.js.map +1 -1
  19. package/lib/cjs/common/hooks/useMemoizedCollectionPick.js +3 -3
  20. package/lib/cjs/common/hooks/useMemoizedCollectionPick.js.map +1 -1
  21. package/lib/cjs/common/utils.js +3 -3
  22. package/lib/cjs/common/utils.js.map +1 -1
  23. package/lib/cjs/common/viewerUtils.js +2 -2
  24. package/lib/cjs/common/viewerUtils.js.map +1 -1
  25. package/lib/cjs/components/Constants.js +4 -4
  26. package/lib/cjs/components/Constants.js.map +1 -1
  27. package/lib/cjs/components/GroupingMappingContext.js +13 -4
  28. package/lib/cjs/components/GroupingMappingContext.js.map +1 -1
  29. package/lib/cjs/components/Groups/Editing/GroupAction.js +7 -9
  30. package/lib/cjs/components/Groups/Editing/GroupAction.js.map +1 -1
  31. package/lib/cjs/components/Groups/Editing/GroupDetails.d.ts +1 -1
  32. package/lib/cjs/components/Groups/Editing/GroupDetails.js +5 -7
  33. package/lib/cjs/components/Groups/Editing/GroupDetails.js.map +1 -1
  34. package/lib/cjs/components/Groups/Editing/GroupDetailsActionPanel.d.ts +1 -1
  35. package/lib/cjs/components/Groups/Editing/GroupDetailsActionPanel.js +4 -4
  36. package/lib/cjs/components/Groups/Editing/GroupDetailsActionPanel.js.map +1 -1
  37. package/lib/cjs/components/Groups/Editing/GroupDetailsStep.js +4 -4
  38. package/lib/cjs/components/Groups/Editing/GroupDetailsStep.js.map +1 -1
  39. package/lib/cjs/components/Groups/GroupColorLegend.js +3 -3
  40. package/lib/cjs/components/Groups/GroupColorLegend.js.map +1 -1
  41. package/lib/cjs/components/Groups/GroupListItem.js +3 -4
  42. package/lib/cjs/components/Groups/GroupListItem.js.map +1 -1
  43. package/lib/cjs/components/Groups/GroupListItem.scss +2 -2
  44. package/lib/cjs/components/Groups/GroupMenuActions.js +17 -6
  45. package/lib/cjs/components/Groups/GroupMenuActions.js.map +1 -1
  46. package/lib/cjs/components/Groups/GroupOverlapProgressBar.js.map +1 -1
  47. package/lib/cjs/components/Groups/Groups.js +3 -3
  48. package/lib/cjs/components/Groups/Groups.js.map +1 -1
  49. package/lib/cjs/components/Groups/GroupsAddButton.d.ts +1 -1
  50. package/lib/cjs/components/Groups/GroupsAddButton.js +4 -4
  51. package/lib/cjs/components/Groups/GroupsAddButton.js.map +1 -1
  52. package/lib/cjs/components/Groups/GroupsAddButton.scss +1 -1
  53. package/lib/cjs/components/Groups/GroupsShowHideButtons.d.ts +1 -1
  54. package/lib/cjs/components/Groups/GroupsShowHideButtons.js +2 -2
  55. package/lib/cjs/components/Groups/GroupsShowHideButtons.js.map +1 -1
  56. package/lib/cjs/components/Groups/GroupsView.js +8 -10
  57. package/lib/cjs/components/Groups/GroupsView.js.map +1 -1
  58. package/lib/cjs/components/Groups/GroupsView.scss +1 -1
  59. package/lib/cjs/components/Groups/GroupsVisualization.js +19 -20
  60. package/lib/cjs/components/Groups/GroupsVisualization.js.map +1 -1
  61. package/lib/cjs/components/Groups/GroupsVisualizationActions.js +4 -4
  62. package/lib/cjs/components/Groups/GroupsVisualizationActions.js.map +1 -1
  63. package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.d.ts +1 -1
  64. package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.js +4 -4
  65. package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.js.map +1 -1
  66. package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.scss +7 -7
  67. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilder.js +13 -35
  68. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilder.js.map +1 -1
  69. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderActionPanel.js +4 -4
  70. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderActionPanel.js.map +1 -1
  71. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderCustomUI.d.ts +1 -1
  72. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderCustomUI.js +4 -4
  73. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderCustomUI.js.map +1 -1
  74. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderStep.js +4 -4
  75. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderStep.js.map +1 -1
  76. package/lib/cjs/components/Groups/ToggleGroupVisibility.js +3 -3
  77. package/lib/cjs/components/Groups/ToggleGroupVisibility.js.map +1 -1
  78. package/lib/cjs/components/Groups/groupsHelpers.js +8 -4
  79. package/lib/cjs/components/Groups/groupsHelpers.js.map +1 -1
  80. package/lib/cjs/components/Groups/hooks/useFetchGroups.js.map +1 -1
  81. package/lib/cjs/components/Groups/hooks/useGroupsOperations.d.ts +1 -1
  82. package/lib/cjs/components/Groups/hooks/useGroupsOperations.js +5 -5
  83. package/lib/cjs/components/Groups/hooks/useGroupsOperations.js.map +1 -1
  84. package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.d.ts +1 -1
  85. package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.js.map +1 -1
  86. package/lib/cjs/components/Groups/hooks/useVisualization.js +2 -4
  87. package/lib/cjs/components/Groups/hooks/useVisualization.js.map +1 -1
  88. package/lib/cjs/components/Mappings/BlockingOverlay.js +3 -3
  89. package/lib/cjs/components/Mappings/BlockingOverlay.js.map +1 -1
  90. package/lib/cjs/components/Mappings/Editing/MappingAction.js +11 -15
  91. package/lib/cjs/components/Mappings/Editing/MappingAction.js.map +1 -1
  92. package/lib/cjs/components/Mappings/Extraction/ExtractionLogCustomFilter.d.ts +1 -1
  93. package/lib/cjs/components/Mappings/Extraction/ExtractionLogCustomFilter.js +1 -1
  94. package/lib/cjs/components/Mappings/Extraction/ExtractionLogCustomFilter.js.map +1 -1
  95. package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.js +9 -6
  96. package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.js.map +1 -1
  97. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/QueuedExtractionState.js +3 -3
  98. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/QueuedExtractionState.js.map +1 -1
  99. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/RunningExtractionState.js +3 -3
  100. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/RunningExtractionState.js.map +1 -1
  101. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/StartingExtractionState.js +3 -3
  102. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/StartingExtractionState.js.map +1 -1
  103. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/TerminalExtractionState.js +3 -3
  104. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/TerminalExtractionState.js.map +1 -1
  105. package/lib/cjs/components/Mappings/Extraction/ExtractionStatus.d.ts +1 -1
  106. package/lib/cjs/components/Mappings/Extraction/ExtractionStatus.js +9 -9
  107. package/lib/cjs/components/Mappings/Extraction/ExtractionStatus.js.map +1 -1
  108. package/lib/cjs/components/Mappings/Extraction/ExtractionStatusIcon.js +4 -4
  109. package/lib/cjs/components/Mappings/Extraction/ExtractionStatusIcon.js.map +1 -1
  110. package/lib/cjs/components/Mappings/Import/ConfirmMappingsImport.js +26 -30
  111. package/lib/cjs/components/Mappings/Import/ConfirmMappingsImport.js.map +1 -1
  112. package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.d.ts +1 -1
  113. package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.js +3 -3
  114. package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.js.map +1 -1
  115. package/lib/cjs/components/Mappings/Import/SelectIModel.d.ts +1 -1
  116. package/lib/cjs/components/Mappings/Import/SelectIModel.js +5 -5
  117. package/lib/cjs/components/Mappings/Import/SelectIModel.js.map +1 -1
  118. package/lib/cjs/components/Mappings/Import/SelectITwin.js +2 -2
  119. package/lib/cjs/components/Mappings/Import/SelectITwin.js.map +1 -1
  120. package/lib/cjs/components/Mappings/Import/SelectITwin.scss +1 -1
  121. package/lib/cjs/components/Mappings/Import/SelectMappings.d.ts +1 -1
  122. package/lib/cjs/components/Mappings/Import/SelectMappings.js +7 -7
  123. package/lib/cjs/components/Mappings/Import/SelectMappings.js.map +1 -1
  124. package/lib/cjs/components/Mappings/MappingListItem.js.map +1 -1
  125. package/lib/cjs/components/Mappings/MappingViewActionGroup.d.ts +1 -1
  126. package/lib/cjs/components/Mappings/MappingViewActionGroup.js +6 -7
  127. package/lib/cjs/components/Mappings/MappingViewActionGroup.js.map +1 -1
  128. package/lib/cjs/components/Mappings/Mappings.js +3 -3
  129. package/lib/cjs/components/Mappings/Mappings.js.map +1 -1
  130. package/lib/cjs/components/Mappings/MappingsView.js +14 -16
  131. package/lib/cjs/components/Mappings/MappingsView.js.map +1 -1
  132. package/lib/cjs/components/Mappings/hooks/useFetchExtractionStatus.js +3 -1
  133. package/lib/cjs/components/Mappings/hooks/useFetchExtractionStatus.js.map +1 -1
  134. package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.d.ts +1 -1
  135. package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.js +3 -3
  136. package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.js.map +1 -1
  137. package/lib/cjs/components/Mappings/hooks/useFetchMappings.js +1 -1
  138. package/lib/cjs/components/Mappings/hooks/useFetchMappings.js.map +1 -1
  139. package/lib/cjs/components/Mappings/hooks/useMappingsOperations.js +36 -18
  140. package/lib/cjs/components/Mappings/hooks/useMappingsOperations.js.map +1 -1
  141. package/lib/cjs/components/Mappings/hooks/useRunExtraction.d.ts +1 -1
  142. package/lib/cjs/components/Mappings/hooks/useRunExtraction.js +8 -6
  143. package/lib/cjs/components/Mappings/hooks/useRunExtraction.js.map +1 -1
  144. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.d.ts +3 -1
  145. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.js +10 -9
  146. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.js.map +1 -1
  147. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.d.ts +7 -8
  148. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js +24 -66
  149. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js.map +1 -1
  150. package/lib/cjs/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.d.ts +5 -9
  151. package/lib/cjs/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.js +6 -17
  152. package/lib/cjs/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.js.map +1 -1
  153. package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.d.ts +8 -9
  154. package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.js +20 -161
  155. package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.js.map +1 -1
  156. package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.scss +5 -4
  157. package/lib/cjs/components/Properties/GroupColorToggle.js +4 -4
  158. package/lib/cjs/components/Properties/GroupColorToggle.js.map +1 -1
  159. package/lib/cjs/components/Properties/GroupInformationPanel.js +3 -3
  160. package/lib/cjs/components/Properties/GroupInformationPanel.js.map +1 -1
  161. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.d.ts +1 -1
  162. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.js +90 -40
  163. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
  164. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.scss +3 -2
  165. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyListItem.d.ts +1 -1
  166. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyListItem.js +5 -5
  167. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyListItem.js.map +1 -1
  168. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyTable.d.ts +1 -1
  169. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyTable.js +24 -14
  170. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyTable.js.map +1 -1
  171. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyUtils.js +20 -39
  172. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyUtils.js.map +1 -1
  173. package/lib/cjs/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js +20 -29
  174. package/lib/cjs/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js.map +1 -1
  175. package/lib/cjs/components/Properties/GroupProperties/SaveModal.d.ts +1 -1
  176. package/lib/cjs/components/Properties/GroupProperties/SaveModal.js +7 -7
  177. package/lib/cjs/components/Properties/GroupProperties/SaveModal.js.map +1 -1
  178. package/lib/cjs/components/Properties/GroupProperties/SortableHorizontalTile.js +4 -4
  179. package/lib/cjs/components/Properties/GroupProperties/SortableHorizontalTile.js.map +1 -1
  180. package/lib/cjs/components/Properties/PropertyAction.js +9 -21
  181. package/lib/cjs/components/Properties/PropertyAction.js.map +1 -1
  182. package/lib/cjs/components/Properties/PropertyMenu.d.ts +1 -1
  183. package/lib/cjs/components/Properties/PropertyMenu.js +5 -10
  184. package/lib/cjs/components/Properties/PropertyMenu.js.map +1 -1
  185. package/lib/cjs/components/Properties/PropertyMenuWithVisualization.js +5 -5
  186. package/lib/cjs/components/Properties/PropertyMenuWithVisualization.js.map +1 -1
  187. package/lib/cjs/components/Properties/PropertyNameCell.d.ts +1 -1
  188. package/lib/cjs/components/Properties/PropertyNameCell.js +4 -4
  189. package/lib/cjs/components/Properties/PropertyNameCell.js.map +1 -1
  190. package/lib/cjs/components/Properties/PropertyTable.js +5 -6
  191. package/lib/cjs/components/Properties/PropertyTable.js.map +1 -1
  192. package/lib/cjs/components/Properties/PropertyTableToolbar.d.ts +1 -1
  193. package/lib/cjs/components/Properties/PropertyTableToolbar.js +4 -4
  194. package/lib/cjs/components/Properties/PropertyTableToolbar.js.map +1 -1
  195. package/lib/cjs/components/Properties/ScrollableExpandableBlock.d.ts +11 -0
  196. package/lib/cjs/components/Properties/ScrollableExpandableBlock.js +55 -0
  197. package/lib/cjs/components/Properties/ScrollableExpandableBlock.js.map +1 -0
  198. package/lib/cjs/components/Properties/hooks/useFormulaValidation.d.ts +6 -3
  199. package/lib/cjs/components/Properties/hooks/useFormulaValidation.js +62 -16
  200. package/lib/cjs/components/Properties/hooks/useFormulaValidation.js.map +1 -1
  201. package/lib/cjs/components/Properties/hooks/useForwardRef.d.ts +3 -0
  202. package/lib/cjs/components/Properties/hooks/useForwardRef.js +20 -0
  203. package/lib/cjs/components/Properties/hooks/useForwardRef.js.map +1 -0
  204. package/lib/cjs/components/Properties/hooks/usePropertiesQuery.js.map +1 -1
  205. package/lib/cjs/components/Properties/hooks/useValidator.js +4 -4
  206. package/lib/cjs/components/Properties/hooks/useValidator.js.map +1 -1
  207. package/lib/cjs/components/SharedComponents/ActionPanel.d.ts +3 -1
  208. package/lib/cjs/components/SharedComponents/ActionPanel.js +9 -10
  209. package/lib/cjs/components/SharedComponents/ActionPanel.js.map +1 -1
  210. package/lib/cjs/components/SharedComponents/DeleteModal.d.ts +1 -1
  211. package/lib/cjs/components/SharedComponents/DeleteModal.js +9 -10
  212. package/lib/cjs/components/SharedComponents/DeleteModal.js.map +1 -1
  213. package/lib/cjs/components/SharedComponents/EmptyMessage.js +4 -4
  214. package/lib/cjs/components/SharedComponents/EmptyMessage.js.map +1 -1
  215. package/lib/cjs/components/SharedComponents/LoadingOverlay.js +4 -4
  216. package/lib/cjs/components/SharedComponents/LoadingOverlay.js.map +1 -1
  217. package/lib/cjs/components/SharedComponents/LoadingSpinner.js +3 -3
  218. package/lib/cjs/components/SharedComponents/LoadingSpinner.js.map +1 -1
  219. package/lib/cjs/components/SharedComponents/StatusIcon.js +3 -3
  220. package/lib/cjs/components/SharedComponents/StatusIcon.js.map +1 -1
  221. package/lib/cjs/components/context/ExtractionClientContext.js.map +1 -1
  222. package/lib/cjs/components/context/ExtractionStateJobContext.js +3 -3
  223. package/lib/cjs/components/context/ExtractionStateJobContext.js.map +1 -1
  224. package/lib/cjs/components/context/GroupHilitedElementsContext.js +3 -3
  225. package/lib/cjs/components/context/GroupHilitedElementsContext.js.map +1 -1
  226. package/lib/cjs/components/context/GroupingApiConfigContext.js.map +1 -1
  227. package/lib/cjs/components/context/GroupingMappingCustomUIContext.js +3 -3
  228. package/lib/cjs/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  229. package/lib/cjs/components/context/GroupsClientContext.js.map +1 -1
  230. package/lib/cjs/components/context/IModelsClientContext.js.map +1 -1
  231. package/lib/cjs/components/context/ITwinsClientContext.js +3 -3
  232. package/lib/cjs/components/context/ITwinsClientContext.js.map +1 -1
  233. package/lib/cjs/components/context/MappingClientContext.js.map +1 -1
  234. package/lib/cjs/components/context/PropertiesClientContext.js.map +1 -1
  235. package/lib/cjs/components/context/PropertiesGroupColorContext.js +3 -3
  236. package/lib/cjs/components/context/PropertiesGroupColorContext.js.map +1 -1
  237. package/lib/cjs/components/context/PropertyGridWrapperContext.js +3 -3
  238. package/lib/cjs/components/context/PropertyGridWrapperContext.js.map +1 -1
  239. package/lib/cjs/components/customUI/DefaultGroupingUI.js +3 -3
  240. package/lib/cjs/components/customUI/DefaultGroupingUI.js.map +1 -1
  241. package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.d.ts +1 -1
  242. package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.js +13 -18
  243. package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  244. package/lib/cjs/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  245. package/lib/cjs/components/customUI/ManualGroupingCustomUI.d.ts +1 -1
  246. package/lib/cjs/components/customUI/ManualGroupingCustomUI.js +8 -8
  247. package/lib/cjs/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  248. package/lib/cjs/components/customUI/SearchGroupingCustomUI.d.ts +1 -1
  249. package/lib/cjs/components/customUI/SearchGroupingCustomUI.js +16 -45
  250. package/lib/cjs/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  251. package/lib/cjs/decorators/BboxDimensionsDecorator.js +3 -10
  252. package/lib/cjs/decorators/BboxDimensionsDecorator.js.map +1 -1
  253. package/lib/cjs/formula/FormulaDataTypeResolver.d.ts +3 -2
  254. package/lib/cjs/formula/FormulaDataTypeResolver.js +10 -6
  255. package/lib/cjs/formula/FormulaDataTypeResolver.js.map +1 -1
  256. package/lib/cjs/formula/FormulaFunctionProvider.js +146 -65
  257. package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -1
  258. package/lib/cjs/formula/FormulaOperatorsProvider.js +138 -44
  259. package/lib/cjs/formula/FormulaOperatorsProvider.js.map +1 -1
  260. package/lib/cjs/formula/FormulaSplitter.js +63 -13
  261. package/lib/cjs/formula/FormulaSplitter.js.map +1 -1
  262. package/lib/cjs/formula/FormulaTokensDataTypeResolver.js +7 -14
  263. package/lib/cjs/formula/FormulaTokensDataTypeResolver.js.map +1 -1
  264. package/lib/cjs/formula/IResult.js.map +1 -1
  265. package/lib/cjs/formula/InfixToPostfixConverter.js +4 -4
  266. package/lib/cjs/formula/InfixToPostfixConverter.js.map +1 -1
  267. package/lib/cjs/formula/InputStream.js +3 -3
  268. package/lib/cjs/formula/InputStream.js.map +1 -1
  269. package/lib/cjs/formula/ParenthesisValidator.js +3 -3
  270. package/lib/cjs/formula/ParenthesisValidator.js.map +1 -1
  271. package/lib/cjs/formula/Queue.js +3 -3
  272. package/lib/cjs/formula/Queue.js.map +1 -1
  273. package/lib/cjs/formula/Stack.js +3 -3
  274. package/lib/cjs/formula/Stack.js.map +1 -1
  275. package/lib/cjs/formula/StringBuilder.js +3 -3
  276. package/lib/cjs/formula/StringBuilder.js.map +1 -1
  277. package/lib/cjs/formula/Types.js.map +1 -1
  278. package/lib/cjs/formula/Utils.js +4 -4
  279. package/lib/cjs/formula/Utils.js.map +1 -1
  280. package/lib/cjs/grouping-mapping-widget.d.ts +3 -5
  281. package/lib/cjs/grouping-mapping-widget.js +4 -8
  282. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  283. package/lib/cjs/test/GroupPropertyUtils.test.js +27 -26
  284. package/lib/cjs/test/GroupPropertyUtils.test.js.map +1 -1
  285. package/lib/cjs/test/GroupingMappingCustomUI.test.js +4 -6
  286. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  287. package/lib/cjs/test/MockFactory.js +3 -3
  288. package/lib/cjs/test/MockFactory.js.map +1 -1
  289. package/lib/cjs/test/PropertyFieldsHelpers.js +3 -3
  290. package/lib/cjs/test/PropertyFieldsHelpers.js.map +1 -1
  291. package/lib/cjs/test/QueryBuilder.test.js +3 -3
  292. package/lib/cjs/test/QueryBuilder.test.js.map +1 -1
  293. package/lib/cjs/test/QueryBuilder.testdata.js +3 -3
  294. package/lib/cjs/test/QueryBuilder.testdata.js.map +1 -1
  295. package/lib/cjs/test/QueryBuilderTestData.js.map +1 -1
  296. package/lib/cjs/test/WidgetHeader.test.js +3 -3
  297. package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
  298. package/lib/cjs/test/test-utils.js +4 -4
  299. package/lib/cjs/test/test-utils.js.map +1 -1
  300. package/lib/esm/WidgetShell/GroupingMapping.js +3 -5
  301. package/lib/esm/WidgetShell/GroupingMapping.js.map +1 -1
  302. package/lib/esm/WidgetShell/GroupingMappingContent.js +4 -4
  303. package/lib/esm/WidgetShell/GroupingMappingContent.js.map +1 -1
  304. package/lib/esm/WidgetShell/GroupingMappingHeader.d.ts +1 -1
  305. package/lib/esm/WidgetShell/GroupingMappingHeader.js +5 -5
  306. package/lib/esm/WidgetShell/GroupingMappingHeader.js.map +1 -1
  307. package/lib/esm/WidgetShell/GroupingMappingWidget.js +2 -4
  308. package/lib/esm/WidgetShell/GroupingMappingWidget.js.map +1 -1
  309. package/lib/esm/WidgetShell/Router/GroupingMappingRouter.js +29 -23
  310. package/lib/esm/WidgetShell/Router/GroupingMappingRouter.js.map +1 -1
  311. package/lib/esm/WidgetShell/WidgetHeader/WidgetHeader.d.ts +1 -1
  312. package/lib/esm/WidgetShell/WidgetHeader/WidgetHeader.js +7 -7
  313. package/lib/esm/WidgetShell/WidgetHeader/WidgetHeader.js.map +1 -1
  314. package/lib/esm/common/hooks/useIsMounted.js +3 -3
  315. package/lib/esm/common/hooks/useIsMounted.js.map +1 -1
  316. package/lib/esm/common/hooks/useMemoizedCollectionPick.js +3 -3
  317. package/lib/esm/common/hooks/useMemoizedCollectionPick.js.map +1 -1
  318. package/lib/esm/common/utils.js +3 -3
  319. package/lib/esm/common/utils.js.map +1 -1
  320. package/lib/esm/common/viewerUtils.js +2 -2
  321. package/lib/esm/common/viewerUtils.js.map +1 -1
  322. package/lib/esm/components/Constants.js +4 -4
  323. package/lib/esm/components/Constants.js.map +1 -1
  324. package/lib/esm/components/GroupingMappingContext.js +14 -5
  325. package/lib/esm/components/GroupingMappingContext.js.map +1 -1
  326. package/lib/esm/components/Groups/Editing/GroupAction.js +8 -10
  327. package/lib/esm/components/Groups/Editing/GroupAction.js.map +1 -1
  328. package/lib/esm/components/Groups/Editing/GroupDetails.d.ts +1 -1
  329. package/lib/esm/components/Groups/Editing/GroupDetails.js +5 -7
  330. package/lib/esm/components/Groups/Editing/GroupDetails.js.map +1 -1
  331. package/lib/esm/components/Groups/Editing/GroupDetailsActionPanel.d.ts +1 -1
  332. package/lib/esm/components/Groups/Editing/GroupDetailsActionPanel.js +4 -4
  333. package/lib/esm/components/Groups/Editing/GroupDetailsActionPanel.js.map +1 -1
  334. package/lib/esm/components/Groups/Editing/GroupDetailsStep.js +4 -4
  335. package/lib/esm/components/Groups/Editing/GroupDetailsStep.js.map +1 -1
  336. package/lib/esm/components/Groups/GroupColorLegend.js +3 -3
  337. package/lib/esm/components/Groups/GroupColorLegend.js.map +1 -1
  338. package/lib/esm/components/Groups/GroupListItem.js +3 -4
  339. package/lib/esm/components/Groups/GroupListItem.js.map +1 -1
  340. package/lib/esm/components/Groups/GroupListItem.scss +2 -2
  341. package/lib/esm/components/Groups/GroupMenuActions.js +17 -6
  342. package/lib/esm/components/Groups/GroupMenuActions.js.map +1 -1
  343. package/lib/esm/components/Groups/GroupOverlapProgressBar.js.map +1 -1
  344. package/lib/esm/components/Groups/Groups.js +3 -3
  345. package/lib/esm/components/Groups/Groups.js.map +1 -1
  346. package/lib/esm/components/Groups/GroupsAddButton.d.ts +1 -1
  347. package/lib/esm/components/Groups/GroupsAddButton.js +4 -4
  348. package/lib/esm/components/Groups/GroupsAddButton.js.map +1 -1
  349. package/lib/esm/components/Groups/GroupsAddButton.scss +1 -1
  350. package/lib/esm/components/Groups/GroupsShowHideButtons.d.ts +1 -1
  351. package/lib/esm/components/Groups/GroupsShowHideButtons.js +2 -2
  352. package/lib/esm/components/Groups/GroupsShowHideButtons.js.map +1 -1
  353. package/lib/esm/components/Groups/GroupsView.js +10 -12
  354. package/lib/esm/components/Groups/GroupsView.js.map +1 -1
  355. package/lib/esm/components/Groups/GroupsView.scss +1 -1
  356. package/lib/esm/components/Groups/GroupsVisualization.js +21 -22
  357. package/lib/esm/components/Groups/GroupsVisualization.js.map +1 -1
  358. package/lib/esm/components/Groups/GroupsVisualizationActions.js +4 -4
  359. package/lib/esm/components/Groups/GroupsVisualizationActions.js.map +1 -1
  360. package/lib/esm/components/Groups/OverlappedElementsInformationPanel.d.ts +1 -1
  361. package/lib/esm/components/Groups/OverlappedElementsInformationPanel.js +5 -5
  362. package/lib/esm/components/Groups/OverlappedElementsInformationPanel.js.map +1 -1
  363. package/lib/esm/components/Groups/OverlappedElementsInformationPanel.scss +7 -7
  364. package/lib/esm/components/Groups/QueryBuilder/QueryBuilder.js +13 -35
  365. package/lib/esm/components/Groups/QueryBuilder/QueryBuilder.js.map +1 -1
  366. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderActionPanel.js +4 -4
  367. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderActionPanel.js.map +1 -1
  368. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderCustomUI.d.ts +1 -1
  369. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderCustomUI.js +4 -4
  370. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderCustomUI.js.map +1 -1
  371. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderStep.js +4 -4
  372. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderStep.js.map +1 -1
  373. package/lib/esm/components/Groups/ToggleGroupVisibility.js +3 -3
  374. package/lib/esm/components/Groups/ToggleGroupVisibility.js.map +1 -1
  375. package/lib/esm/components/Groups/groupsHelpers.js +9 -5
  376. package/lib/esm/components/Groups/groupsHelpers.js.map +1 -1
  377. package/lib/esm/components/Groups/hooks/useFetchGroups.js.map +1 -1
  378. package/lib/esm/components/Groups/hooks/useGroupsOperations.d.ts +1 -1
  379. package/lib/esm/components/Groups/hooks/useGroupsOperations.js +5 -5
  380. package/lib/esm/components/Groups/hooks/useGroupsOperations.js.map +1 -1
  381. package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.d.ts +1 -1
  382. package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.js.map +1 -1
  383. package/lib/esm/components/Groups/hooks/useVisualization.js +3 -5
  384. package/lib/esm/components/Groups/hooks/useVisualization.js.map +1 -1
  385. package/lib/esm/components/Mappings/BlockingOverlay.js +3 -3
  386. package/lib/esm/components/Mappings/BlockingOverlay.js.map +1 -1
  387. package/lib/esm/components/Mappings/Editing/MappingAction.js +11 -15
  388. package/lib/esm/components/Mappings/Editing/MappingAction.js.map +1 -1
  389. package/lib/esm/components/Mappings/Extraction/ExtractionLogCustomFilter.d.ts +1 -1
  390. package/lib/esm/components/Mappings/Extraction/ExtractionLogCustomFilter.js +1 -1
  391. package/lib/esm/components/Mappings/Extraction/ExtractionLogCustomFilter.js.map +1 -1
  392. package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.js +9 -6
  393. package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.js.map +1 -1
  394. package/lib/esm/components/Mappings/Extraction/ExtractionStates/QueuedExtractionState.js +3 -3
  395. package/lib/esm/components/Mappings/Extraction/ExtractionStates/QueuedExtractionState.js.map +1 -1
  396. package/lib/esm/components/Mappings/Extraction/ExtractionStates/RunningExtractionState.js +3 -3
  397. package/lib/esm/components/Mappings/Extraction/ExtractionStates/RunningExtractionState.js.map +1 -1
  398. package/lib/esm/components/Mappings/Extraction/ExtractionStates/StartingExtractionState.js +3 -3
  399. package/lib/esm/components/Mappings/Extraction/ExtractionStates/StartingExtractionState.js.map +1 -1
  400. package/lib/esm/components/Mappings/Extraction/ExtractionStates/TerminalExtractionState.js +3 -3
  401. package/lib/esm/components/Mappings/Extraction/ExtractionStates/TerminalExtractionState.js.map +1 -1
  402. package/lib/esm/components/Mappings/Extraction/ExtractionStatus.d.ts +1 -1
  403. package/lib/esm/components/Mappings/Extraction/ExtractionStatus.js +9 -9
  404. package/lib/esm/components/Mappings/Extraction/ExtractionStatus.js.map +1 -1
  405. package/lib/esm/components/Mappings/Extraction/ExtractionStatusIcon.js +4 -4
  406. package/lib/esm/components/Mappings/Extraction/ExtractionStatusIcon.js.map +1 -1
  407. package/lib/esm/components/Mappings/Import/ConfirmMappingsImport.js +27 -31
  408. package/lib/esm/components/Mappings/Import/ConfirmMappingsImport.js.map +1 -1
  409. package/lib/esm/components/Mappings/Import/MappingImportWizardModal.d.ts +1 -1
  410. package/lib/esm/components/Mappings/Import/MappingImportWizardModal.js +3 -3
  411. package/lib/esm/components/Mappings/Import/MappingImportWizardModal.js.map +1 -1
  412. package/lib/esm/components/Mappings/Import/SelectIModel.d.ts +1 -1
  413. package/lib/esm/components/Mappings/Import/SelectIModel.js +5 -5
  414. package/lib/esm/components/Mappings/Import/SelectIModel.js.map +1 -1
  415. package/lib/esm/components/Mappings/Import/SelectITwin.js +2 -2
  416. package/lib/esm/components/Mappings/Import/SelectITwin.js.map +1 -1
  417. package/lib/esm/components/Mappings/Import/SelectITwin.scss +1 -1
  418. package/lib/esm/components/Mappings/Import/SelectMappings.d.ts +1 -1
  419. package/lib/esm/components/Mappings/Import/SelectMappings.js +8 -8
  420. package/lib/esm/components/Mappings/Import/SelectMappings.js.map +1 -1
  421. package/lib/esm/components/Mappings/MappingListItem.js.map +1 -1
  422. package/lib/esm/components/Mappings/MappingViewActionGroup.d.ts +1 -1
  423. package/lib/esm/components/Mappings/MappingViewActionGroup.js +8 -9
  424. package/lib/esm/components/Mappings/MappingViewActionGroup.js.map +1 -1
  425. package/lib/esm/components/Mappings/Mappings.js +3 -3
  426. package/lib/esm/components/Mappings/Mappings.js.map +1 -1
  427. package/lib/esm/components/Mappings/MappingsView.js +16 -18
  428. package/lib/esm/components/Mappings/MappingsView.js.map +1 -1
  429. package/lib/esm/components/Mappings/hooks/useFetchExtractionStatus.js +3 -1
  430. package/lib/esm/components/Mappings/hooks/useFetchExtractionStatus.js.map +1 -1
  431. package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.d.ts +1 -1
  432. package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.js +3 -3
  433. package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.js.map +1 -1
  434. package/lib/esm/components/Mappings/hooks/useFetchMappings.js +1 -1
  435. package/lib/esm/components/Mappings/hooks/useFetchMappings.js.map +1 -1
  436. package/lib/esm/components/Mappings/hooks/useMappingsOperations.js +36 -18
  437. package/lib/esm/components/Mappings/hooks/useMappingsOperations.js.map +1 -1
  438. package/lib/esm/components/Mappings/hooks/useRunExtraction.d.ts +1 -1
  439. package/lib/esm/components/Mappings/hooks/useRunExtraction.js +8 -6
  440. package/lib/esm/components/Mappings/hooks/useRunExtraction.js.map +1 -1
  441. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.d.ts +3 -1
  442. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.js +11 -10
  443. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.js.map +1 -1
  444. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.d.ts +7 -8
  445. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js +27 -66
  446. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js.map +1 -1
  447. package/lib/esm/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.d.ts +5 -9
  448. package/lib/esm/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.js +8 -19
  449. package/lib/esm/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.js.map +1 -1
  450. package/lib/esm/components/Properties/CustomCalculations/CustomCalculationAction.d.ts +8 -9
  451. package/lib/esm/components/Properties/CustomCalculations/CustomCalculationAction.js +21 -139
  452. package/lib/esm/components/Properties/CustomCalculations/CustomCalculationAction.js.map +1 -1
  453. package/lib/esm/components/Properties/CustomCalculations/CustomCalculationAction.scss +5 -4
  454. package/lib/esm/components/Properties/GroupColorToggle.js +4 -4
  455. package/lib/esm/components/Properties/GroupColorToggle.js.map +1 -1
  456. package/lib/esm/components/Properties/GroupInformationPanel.js +3 -3
  457. package/lib/esm/components/Properties/GroupInformationPanel.js.map +1 -1
  458. package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.d.ts +1 -1
  459. package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.js +94 -44
  460. package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
  461. package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.scss +3 -2
  462. package/lib/esm/components/Properties/GroupProperties/GroupPropertyListItem.d.ts +1 -1
  463. package/lib/esm/components/Properties/GroupProperties/GroupPropertyListItem.js +5 -5
  464. package/lib/esm/components/Properties/GroupProperties/GroupPropertyListItem.js.map +1 -1
  465. package/lib/esm/components/Properties/GroupProperties/GroupPropertyTable.d.ts +1 -1
  466. package/lib/esm/components/Properties/GroupProperties/GroupPropertyTable.js +26 -16
  467. package/lib/esm/components/Properties/GroupProperties/GroupPropertyTable.js.map +1 -1
  468. package/lib/esm/components/Properties/GroupProperties/GroupPropertyUtils.js +21 -40
  469. package/lib/esm/components/Properties/GroupProperties/GroupPropertyUtils.js.map +1 -1
  470. package/lib/esm/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js +26 -35
  471. package/lib/esm/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js.map +1 -1
  472. package/lib/esm/components/Properties/GroupProperties/SaveModal.d.ts +1 -1
  473. package/lib/esm/components/Properties/GroupProperties/SaveModal.js +8 -8
  474. package/lib/esm/components/Properties/GroupProperties/SaveModal.js.map +1 -1
  475. package/lib/esm/components/Properties/GroupProperties/SortableHorizontalTile.js +4 -4
  476. package/lib/esm/components/Properties/GroupProperties/SortableHorizontalTile.js.map +1 -1
  477. package/lib/esm/components/Properties/PropertyAction.js +9 -21
  478. package/lib/esm/components/Properties/PropertyAction.js.map +1 -1
  479. package/lib/esm/components/Properties/PropertyMenu.d.ts +1 -1
  480. package/lib/esm/components/Properties/PropertyMenu.js +5 -10
  481. package/lib/esm/components/Properties/PropertyMenu.js.map +1 -1
  482. package/lib/esm/components/Properties/PropertyMenuWithVisualization.js +5 -5
  483. package/lib/esm/components/Properties/PropertyMenuWithVisualization.js.map +1 -1
  484. package/lib/esm/components/Properties/PropertyNameCell.d.ts +1 -1
  485. package/lib/esm/components/Properties/PropertyNameCell.js +4 -4
  486. package/lib/esm/components/Properties/PropertyNameCell.js.map +1 -1
  487. package/lib/esm/components/Properties/PropertyTable.js +5 -6
  488. package/lib/esm/components/Properties/PropertyTable.js.map +1 -1
  489. package/lib/esm/components/Properties/PropertyTableToolbar.d.ts +1 -1
  490. package/lib/esm/components/Properties/PropertyTableToolbar.js +4 -4
  491. package/lib/esm/components/Properties/PropertyTableToolbar.js.map +1 -1
  492. package/lib/esm/components/Properties/ScrollableExpandableBlock.d.ts +11 -0
  493. package/lib/esm/components/Properties/ScrollableExpandableBlock.js +29 -0
  494. package/lib/esm/components/Properties/ScrollableExpandableBlock.js.map +1 -0
  495. package/lib/esm/components/Properties/hooks/useFormulaValidation.d.ts +6 -3
  496. package/lib/esm/components/Properties/hooks/useFormulaValidation.js +60 -15
  497. package/lib/esm/components/Properties/hooks/useFormulaValidation.js.map +1 -1
  498. package/lib/esm/components/Properties/hooks/useForwardRef.d.ts +3 -0
  499. package/lib/esm/components/Properties/hooks/useForwardRef.js +16 -0
  500. package/lib/esm/components/Properties/hooks/useForwardRef.js.map +1 -0
  501. package/lib/esm/components/Properties/hooks/usePropertiesQuery.js.map +1 -1
  502. package/lib/esm/components/Properties/hooks/useValidator.js +4 -4
  503. package/lib/esm/components/Properties/hooks/useValidator.js.map +1 -1
  504. package/lib/esm/components/SharedComponents/ActionPanel.d.ts +3 -1
  505. package/lib/esm/components/SharedComponents/ActionPanel.js +9 -10
  506. package/lib/esm/components/SharedComponents/ActionPanel.js.map +1 -1
  507. package/lib/esm/components/SharedComponents/DeleteModal.d.ts +1 -1
  508. package/lib/esm/components/SharedComponents/DeleteModal.js +10 -11
  509. package/lib/esm/components/SharedComponents/DeleteModal.js.map +1 -1
  510. package/lib/esm/components/SharedComponents/EmptyMessage.js +4 -4
  511. package/lib/esm/components/SharedComponents/EmptyMessage.js.map +1 -1
  512. package/lib/esm/components/SharedComponents/LoadingOverlay.js +4 -4
  513. package/lib/esm/components/SharedComponents/LoadingOverlay.js.map +1 -1
  514. package/lib/esm/components/SharedComponents/LoadingSpinner.js +3 -3
  515. package/lib/esm/components/SharedComponents/LoadingSpinner.js.map +1 -1
  516. package/lib/esm/components/SharedComponents/StatusIcon.js +3 -3
  517. package/lib/esm/components/SharedComponents/StatusIcon.js.map +1 -1
  518. package/lib/esm/components/context/ExtractionClientContext.js.map +1 -1
  519. package/lib/esm/components/context/ExtractionStateJobContext.js +3 -3
  520. package/lib/esm/components/context/ExtractionStateJobContext.js.map +1 -1
  521. package/lib/esm/components/context/GroupHilitedElementsContext.js +3 -3
  522. package/lib/esm/components/context/GroupHilitedElementsContext.js.map +1 -1
  523. package/lib/esm/components/context/GroupingApiConfigContext.js.map +1 -1
  524. package/lib/esm/components/context/GroupingMappingCustomUIContext.js +3 -3
  525. package/lib/esm/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  526. package/lib/esm/components/context/GroupsClientContext.js.map +1 -1
  527. package/lib/esm/components/context/IModelsClientContext.js.map +1 -1
  528. package/lib/esm/components/context/ITwinsClientContext.js +3 -3
  529. package/lib/esm/components/context/ITwinsClientContext.js.map +1 -1
  530. package/lib/esm/components/context/MappingClientContext.js.map +1 -1
  531. package/lib/esm/components/context/PropertiesClientContext.js.map +1 -1
  532. package/lib/esm/components/context/PropertiesGroupColorContext.js +3 -3
  533. package/lib/esm/components/context/PropertiesGroupColorContext.js.map +1 -1
  534. package/lib/esm/components/context/PropertyGridWrapperContext.js +3 -3
  535. package/lib/esm/components/context/PropertyGridWrapperContext.js.map +1 -1
  536. package/lib/esm/components/customUI/DefaultGroupingUI.js +3 -3
  537. package/lib/esm/components/customUI/DefaultGroupingUI.js.map +1 -1
  538. package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.d.ts +1 -1
  539. package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.js +14 -19
  540. package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  541. package/lib/esm/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  542. package/lib/esm/components/customUI/ManualGroupingCustomUI.d.ts +1 -1
  543. package/lib/esm/components/customUI/ManualGroupingCustomUI.js +8 -8
  544. package/lib/esm/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  545. package/lib/esm/components/customUI/SearchGroupingCustomUI.d.ts +1 -1
  546. package/lib/esm/components/customUI/SearchGroupingCustomUI.js +16 -45
  547. package/lib/esm/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  548. package/lib/esm/decorators/BboxDimensionsDecorator.js +5 -12
  549. package/lib/esm/decorators/BboxDimensionsDecorator.js.map +1 -1
  550. package/lib/esm/formula/FormulaDataTypeResolver.d.ts +3 -2
  551. package/lib/esm/formula/FormulaDataTypeResolver.js +10 -6
  552. package/lib/esm/formula/FormulaDataTypeResolver.js.map +1 -1
  553. package/lib/esm/formula/FormulaFunctionProvider.js +146 -65
  554. package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -1
  555. package/lib/esm/formula/FormulaOperatorsProvider.js +138 -44
  556. package/lib/esm/formula/FormulaOperatorsProvider.js.map +1 -1
  557. package/lib/esm/formula/FormulaSplitter.js +63 -13
  558. package/lib/esm/formula/FormulaSplitter.js.map +1 -1
  559. package/lib/esm/formula/FormulaTokensDataTypeResolver.js +7 -14
  560. package/lib/esm/formula/FormulaTokensDataTypeResolver.js.map +1 -1
  561. package/lib/esm/formula/IResult.js.map +1 -1
  562. package/lib/esm/formula/InfixToPostfixConverter.js +5 -5
  563. package/lib/esm/formula/InfixToPostfixConverter.js.map +1 -1
  564. package/lib/esm/formula/InputStream.js +3 -3
  565. package/lib/esm/formula/InputStream.js.map +1 -1
  566. package/lib/esm/formula/ParenthesisValidator.js +3 -3
  567. package/lib/esm/formula/ParenthesisValidator.js.map +1 -1
  568. package/lib/esm/formula/Queue.js +3 -3
  569. package/lib/esm/formula/Queue.js.map +1 -1
  570. package/lib/esm/formula/Stack.js +3 -3
  571. package/lib/esm/formula/Stack.js.map +1 -1
  572. package/lib/esm/formula/StringBuilder.js +3 -3
  573. package/lib/esm/formula/StringBuilder.js.map +1 -1
  574. package/lib/esm/formula/Types.js.map +1 -1
  575. package/lib/esm/formula/Utils.js +4 -4
  576. package/lib/esm/formula/Utils.js.map +1 -1
  577. package/lib/esm/grouping-mapping-widget.d.ts +3 -5
  578. package/lib/esm/grouping-mapping-widget.js +6 -8
  579. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  580. package/lib/esm/test/GroupPropertyUtils.test.js +28 -27
  581. package/lib/esm/test/GroupPropertyUtils.test.js.map +1 -1
  582. package/lib/esm/test/GroupingMappingCustomUI.test.js +4 -6
  583. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  584. package/lib/esm/test/MockFactory.js +3 -3
  585. package/lib/esm/test/MockFactory.js.map +1 -1
  586. package/lib/esm/test/PropertyFieldsHelpers.js +3 -3
  587. package/lib/esm/test/PropertyFieldsHelpers.js.map +1 -1
  588. package/lib/esm/test/QueryBuilder.test.js +3 -3
  589. package/lib/esm/test/QueryBuilder.test.js.map +1 -1
  590. package/lib/esm/test/QueryBuilder.testdata.js +3 -3
  591. package/lib/esm/test/QueryBuilder.testdata.js.map +1 -1
  592. package/lib/esm/test/QueryBuilderTestData.js.map +1 -1
  593. package/lib/esm/test/WidgetHeader.test.js +3 -3
  594. package/lib/esm/test/WidgetHeader.test.js.map +1 -1
  595. package/lib/esm/test/test-utils.js +4 -4
  596. package/lib/esm/test/test-utils.js.map +1 -1
  597. package/package.json +8 -4
  598. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyTable.d.ts +0 -14
  599. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyTable.js +0 -87
  600. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyTable.js.map +0 -1
  601. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyTable.scss +0 -9
  602. package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationTable.d.ts +0 -13
  603. package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationTable.js +0 -87
  604. package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationTable.js.map +0 -1
  605. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyTable.d.ts +0 -14
  606. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyTable.js +0 -60
  607. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyTable.js.map +0 -1
  608. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyTable.scss +0 -9
  609. package/lib/esm/components/Properties/CustomCalculations/CustomCalculationTable.d.ts +0 -13
  610. package/lib/esm/components/Properties/CustomCalculations/CustomCalculationTable.js +0 -60
  611. package/lib/esm/components/Properties/CustomCalculations/CustomCalculationTable.js.map +0 -1
@@ -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 {\n InstanceKey,\n PropertiesField,\n} from \"@itwin/presentation-common\";\nimport type { Primitives, PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { toaster } from \"@itwin/itwinui-react\";\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 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 =\n \"BisCore:ElementOwnsMultiAspects\";\n private static readonly UNIQUE_ASPECT_PRIMARY_CLASS =\n \"BisCore:ElementOwnsUniqueAspect\";\n private static readonly DEFAULT_DOUBLE_PRECISION = 4;\n\n private dataProvider: PresentationPropertyDataProvider;\n private query: Query | undefined;\n\n constructor(provider: PresentationPropertyDataProvider) {\n this.dataProvider = provider;\n }\n\n private isCategory(propertyField: PropertiesField): boolean {\n const classInfo =\n propertyField.properties[0].property.navigationPropertyInfo?.classInfo;\n return classInfo?.name === \"BisCore:GeometricElement3dIsInCategory\";\n }\n\n private _propertyMap: Map<string, AddedProperty> = new Map();\n\n public resetQueryBuilder = () => {\n this._propertyMap = new Map();\n };\n\n private regenerateQuery = () => {\n this.query = undefined;\n\n for (const property of this._propertyMap.values()) {\n 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(\"Only primitive types are supported for now.\");\n return false;\n }\n if (prop.value.value === undefined) {\n return false;\n }\n\n const propertyField = (await this.dataProvider.getFieldByPropertyRecord(\n prop,\n )) as PropertiesField;\n\n if (!propertyField) {\n toaster.negative(\n \"Error. Failed to fetch field for this property record.\",\n );\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(\n prop,\n )) as PropertiesField;\n\n this._propertyMap.delete(JSON.stringify(propertyField.getFieldDescriptor()));\n }\n\n private buildProperty(prop: PropertyRecord, propertiesField: PropertiesField) {\n if (prop.value?.valueFormat !== PropertyValueFormat.Primitive || prop.value.value === undefined) {\n toaster.negative(\n \"Error. An unexpected error has occured while building a query.\",\n );\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 (\n (typeof prop.value.value === \"string\" ||\n prop.value.value instanceof String) &&\n String(prop.value.value).indexOf(\"'\") >= 0\n ) {\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 =\n prop.property.typename.toLowerCase() === \"navigation\";\n const isCategory: boolean = isNavigation && this.isCategory(propertiesField);\n\n const isAspect: boolean =\n pathToPrimaryClass?.find(\n (a) =>\n a.relationshipInfo?.name ===\n QueryBuilder.UNIQUE_ASPECT_PRIMARY_CLASS ||\n 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\n ? isCategory\n ? `${property.name}.CodeValue`\n : `${property.name}.id`\n : property.name;\n const propertyValue = isNavigation\n ? isCategory\n ? prop.value.displayValue ?? \"\"\n : (prop.value.value as InstanceKey).id\n : prop.value.value;\n\n if (\n !isAspect &&\n pathToPrimaryClass &&\n pathToPrimaryClass.length > 0\n ) {\n this.addRelatedToQuery(\n i,\n propertiesField,\n propertyName,\n propertyValue,\n );\n } else {\n this.addPropertyToQuery(\n i,\n className,\n propertyName,\n propertyValue,\n this.needsQuote(propertiesField),\n isCategory,\n isAspect,\n );\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(\n unionIndex: number,\n propertyField: PropertiesField,\n propertyName: string,\n propertyValue: Primitives.Value,\n ) {\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\n ? `SourceECInstanceId`\n : `TargetECInstanceId`;\n\n const relPropertyValue = path.isForwardRelationship\n ? `TargetECInstanceId`\n : `SourceECInstanceId`;\n\n this.addClassToQuery(\n unionIndex,\n targetClassName,\n `ECInstanceId`,\n relClassName,\n relPropertyValue\n );\n\n this.addClassToQuery(\n unionIndex,\n relClassName,\n relClassProperty,\n sourceClassName,\n `ECInstanceId`\n );\n\n if (path.sourceClassInfo?.name\n === propertyField.parent?.contentClassInfo.name) {\n this.addPropertyToQuery(\n unionIndex,\n sourceClassName,\n propertyName,\n propertyValue,\n this.needsQuote(propertyField),\n false,\n false,\n );\n }\n });\n }\n\n private addClassToQuery(\n unionIndex: number,\n className: string,\n classProperty: string,\n joinClassName: string,\n joinClassProperty: string,\n ) {\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) =>\n c.className === className\n );\n\n if (foundClass) {\n const foundJoin = foundClass.classJoins.find((join) =>\n join.classProperty === classProperty && join.joinClassName === joinClassName && join.joinClassProperty === joinClassProperty\n );\n\n if (!foundJoin)\n 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 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 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 const foundPropertyClass = this.query.unions[unionIndex].properties.find((p) =>\n p.className === className\n );\n\n if (foundPropertyClass) {\n const foundJoin = foundPropertyClass?.classProperties.find((join) =>\n join.name === propertyName\n );\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 buildQueryString() {\n this.regenerateQuery();\n if (\n this.query === undefined ||\n (this.query.unions.find((u) => u.classes.length === 0 && u.properties.length === 0))\n ) {\n return \"\";\n }\n\n const unionSegments: string[] = [];\n for (const union of this.query.unions) {\n\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 }\n\n const joinIdName = property.isAspect\n ? `${property.className}.Element.id`\n : `${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\n return unionSegments.join(\" UNION \");\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 `ROUND(${className}.${property.name}, ` +\n `${QueryBuilder.DEFAULT_DOUBLE_PRECISION}) = ` +\n `${Number(property.value).toFixed(QueryBuilder.DEFAULT_DOUBLE_PRECISION)}`;\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, 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\";\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 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\n private dataProvider: PresentationPropertyDataProvider;\n private query: Query | undefined;\n\n constructor(provider: PresentationPropertyDataProvider) {\n this.dataProvider = provider;\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 _propertyMap: Map<string, AddedProperty> = new Map();\n\n public resetQueryBuilder = () => {\n this._propertyMap = new Map();\n };\n\n private regenerateQuery = () => {\n this.query = undefined;\n\n for (const property of this._propertyMap.values()) {\n 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(\"Only primitive types are supported for now.\");\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(\"Error. Failed to fetch field for this property record.\");\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 buildProperty(prop: PropertyRecord, propertiesField: PropertiesField) {\n if (prop.value?.valueFormat !== PropertyValueFormat.Primitive || prop.value.value === undefined) {\n toaster.negative(\"Error. An unexpected error has occured while building a query.\");\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\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 ? `${property.name}.CodeValue` : `${property.name}.id`) : property.name;\n const propertyValue = isNavigation ? (isCategory ? prop.value.displayValue ?? \"\" : (prop.value.value as InstanceKey).id) : prop.value.value;\n\n if (!isAspect && pathToPrimaryClass && pathToPrimaryClass.length > 0) {\n this.addRelatedToQuery(i, propertiesField, propertyName, propertyValue);\n } else {\n this.addPropertyToQuery(i, className, propertyName, propertyValue, this.needsQuote(propertiesField), isCategory, 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 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 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 const foundPropertyClass = this.query.unions[unionIndex].properties.find((p) => p.className === className);\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 buildQueryString() {\n 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 }\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\n return unionSegments.join(\" UNION \");\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,10 +1,10 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  import { Button } from "@itwin/itwinui-react";
6
6
  import React from "react";
7
7
  export const QueryBuilderActionPanel = ({ onClickNext }) => {
8
- return (React.createElement(Button, { styleType: 'high-visibility', id: 'save-app', onClick: onClickNext }, "Next"));
8
+ return (React.createElement(Button, { styleType: "high-visibility", id: "save-app", onClick: onClickNext }, "Next"));
9
9
  };
10
10
  //# sourceMappingURL=QueryBuilderActionPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilderActionPanel.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderActionPanel.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EAAE,WAAW,EAAgC,EAAE,EAAE;IACvF,OAAO,CACL,oBAAC,MAAM,IACL,SAAS,EAAC,iBAAiB,EAC3B,EAAE,EAAC,UAAU,EACb,OAAO,EAAE,WAAW,WAGb,CACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Button } from \"@itwin/itwinui-react\";\nimport React from \"react\";\n\nexport interface QueryBuilderActionPanelProps {\n onClickNext: () => void;\n}\n\nexport const QueryBuilderActionPanel = ({ onClickNext }: QueryBuilderActionPanelProps) => {\n return (\n <Button\n styleType='high-visibility'\n id='save-app'\n onClick={onClickNext}\n >\n Next\n </Button>\n );\n};\n"]}
1
+ {"version":3,"file":"QueryBuilderActionPanel.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderActionPanel.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EAAE,WAAW,EAAgC,EAAE,EAAE;IACvF,OAAO,CACL,oBAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,EAAC,EAAE,EAAC,UAAU,EAAC,OAAO,EAAE,WAAW,WAE7D,CACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport { Button } from \"@itwin/itwinui-react\";\nimport React from \"react\";\n\nexport interface QueryBuilderActionPanelProps {\n onClickNext: () => void;\n}\n\nexport const QueryBuilderActionPanel = ({ onClickNext }: QueryBuilderActionPanelProps) => {\n return (\n <Button styleType=\"high-visibility\" id=\"save-app\" onClick={onClickNext}>\n Next\n </Button>\n );\n};\n"]}
@@ -9,5 +9,5 @@ export interface QueryBuilderCustomUIProps {
9
9
  setQuery: (query: string) => void;
10
10
  group?: GroupMinimal;
11
11
  }
12
- export declare const QueryBuilderCustomUI: ({ queryGenerationType, groupUIs, isUpdating, resetView, setQuery, group, }: QueryBuilderCustomUIProps) => JSX.Element;
12
+ export declare const QueryBuilderCustomUI: ({ queryGenerationType, groupUIs, isUpdating, resetView, setQuery, group }: QueryBuilderCustomUIProps) => JSX.Element;
13
13
  //# sourceMappingURL=QueryBuilderCustomUI.d.ts.map
@@ -1,10 +1,10 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  import React from "react";
6
6
  import { EmptyMessage } from "../../SharedComponents/EmptyMessage";
7
- export const QueryBuilderCustomUI = ({ queryGenerationType, groupUIs, isUpdating, resetView, setQuery, group, }) => {
7
+ export const QueryBuilderCustomUI = ({ queryGenerationType, groupUIs, isUpdating, resetView, setQuery, group }) => {
8
8
  if (queryGenerationType && queryGenerationType.length > 0) {
9
9
  const selectedCustomUI = groupUIs.find((e) => e.name === queryGenerationType);
10
10
  if (selectedCustomUI) {
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilderCustomUI.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderCustomUI.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAYnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,SAAS,EACT,QAAQ,EACR,KAAK,GACqB,EAAE,EAAE;IAC9B,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,KAAK,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,oBAAC,YAAY,IAAC,OAAO,EAAC,uCAAuC,GAAG,CAAC;AAC1E,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport type { GroupingCustomUI } from \"../../customUI/GroupingMappingCustomUI\";\nimport { EmptyMessage } from \"../../SharedComponents/EmptyMessage\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\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 = ({\n queryGenerationType,\n groupUIs,\n isUpdating,\n resetView,\n setQuery,\n group,\n}: 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=\"No query generation method selected. \" />;\n};\n"]}
1
+ {"version":3,"file":"QueryBuilderCustomUI.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderCustomUI.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAYnE,MAAM,CAAC,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,KAAK,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,oBAAC,YAAY,IAAC,OAAO,EAAC,uCAAuC,GAAG,CAAC;AAC1E,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport type { GroupingCustomUI } from \"../../customUI/GroupingMappingCustomUI\";\nimport { EmptyMessage } from \"../../SharedComponents/EmptyMessage\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\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=\"No query generation method selected. \" />;\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  import React from "react";
6
6
  import { ComboBox, Fieldset, Label, Text } from "@itwin/itwinui-react";
7
7
  import { QueryBuilderCustomUI } from "./QueryBuilderCustomUI";
@@ -14,7 +14,7 @@ export const QueryBuilderStep = ({ queryRowCount, isHidden, onChange, getOptions
14
14
  const displayStrings = React.useMemo(() => ({ ...defaultDisplayStrings, ...userDisplayStrings }), [userDisplayStrings]);
15
15
  return (React.createElement(Fieldset, { legend: displayStrings.groupBy, className: containerClassName },
16
16
  React.createElement("span", null,
17
- React.createElement(Label, { htmlFor: 'query-combo-input' }, "Query Generation Tool"),
17
+ React.createElement(Label, { htmlFor: "query-combo-input" }, "Query Generation Tool"),
18
18
  React.createElement(ComboBox, { value: rest.queryGenerationType, inputProps: {
19
19
  id: "query-combo-input",
20
20
  }, options: getOptions, onChange: onChange })),
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilderStep.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderStep.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,yBAAyB,CAAC;AAEjC,MAAM,qBAAqB,GAAG;IAC5B,OAAO,EAAE,UAAU;CACpB,CAAC;AAUF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAyB,EAAE,EAAE;IACxJ,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC;IAEjF,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,qBAAqB,EAAE,GAAG,kBAAkB,EAAE,CAAC,EAC3D,CAAC,kBAAkB,CAAC,CACrB,CAAC;IAEF,OAAO,CACL,oBAAC,QAAQ,IAAC,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,kBAAkB;QACrE;YACE,oBAAC,KAAK,IAAC,OAAO,EAAC,mBAAmB,4BAA8B;YAChE,oBAAC,QAAQ,IACP,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAC/B,UAAU,EAAE;oBACV,EAAE,EAAE,mBAAmB;iBACxB,EACD,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,QAAQ,GAClB,CACG;QACP,oBAAC,IAAI,QAAE,cAAc,aAAa,EAAE,CAAQ;QAC5C,oBAAC,oBAAoB,OACf,IAAI,GACR,CACO,CACZ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport { ComboBox, Fieldset, Label, Text } from \"@itwin/itwinui-react\";\nimport type { QueryBuilderCustomUIProps } from \"./QueryBuilderCustomUI\";\nimport { QueryBuilderCustomUI } from \"./QueryBuilderCustomUI\";\nimport \"./QueryBuilderStep.scss\";\n\nconst defaultDisplayStrings = {\n groupBy: \"Group By\",\n};\n\nexport interface QueryBuilderStepProps extends QueryBuilderCustomUIProps {\n queryRowCount: number;\n isHidden: boolean;\n onChange: (value: string) => Promise<void>;\n getOptions: SelectOption<string>[];\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const QueryBuilderStep = ({ queryRowCount, isHidden, onChange, getOptions, displayStrings: userDisplayStrings, ...rest }: QueryBuilderStepProps) => {\n const containerClassName = isHidden ? \"gmw-hide\" : \"gmw-query-builder-container\";\n\n const displayStrings = React.useMemo(\n () => ({ ...defaultDisplayStrings, ...userDisplayStrings }),\n [userDisplayStrings]\n );\n\n return (\n <Fieldset legend={displayStrings.groupBy} className={containerClassName}>\n <span>\n <Label htmlFor='query-combo-input'>Query Generation Tool</Label>\n <ComboBox\n value={rest.queryGenerationType}\n inputProps={{\n id: \"query-combo-input\",\n }}\n options={getOptions}\n onChange={onChange}\n />\n </span>\n <Text>{`Row Count: ${queryRowCount}`}</Text>\n <QueryBuilderCustomUI\n {...rest}\n />\n </Fieldset>\n );\n};\n"]}
1
+ {"version":3,"file":"QueryBuilderStep.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderStep.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,yBAAyB,CAAC;AAEjC,MAAM,qBAAqB,GAAG;IAC5B,OAAO,EAAE,UAAU;CACpB,CAAC;AAUF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAyB,EAAE,EAAE;IACxJ,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC;IAEjF,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,qBAAqB,EAAE,GAAG,kBAAkB,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAExH,OAAO,CACL,oBAAC,QAAQ,IAAC,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,kBAAkB;QACrE;YACE,oBAAC,KAAK,IAAC,OAAO,EAAC,mBAAmB,4BAA8B;YAChE,oBAAC,QAAQ,IACP,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAC/B,UAAU,EAAE;oBACV,EAAE,EAAE,mBAAmB;iBACxB,EACD,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,QAAQ,GAClB,CACG;QACP,oBAAC,IAAI,QAAE,cAAc,aAAa,EAAE,CAAQ;QAC5C,oBAAC,oBAAoB,OAAK,IAAI,GAAI,CACzB,CACZ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport { ComboBox, Fieldset, Label, Text } from \"@itwin/itwinui-react\";\nimport type { QueryBuilderCustomUIProps } from \"./QueryBuilderCustomUI\";\nimport { QueryBuilderCustomUI } from \"./QueryBuilderCustomUI\";\nimport \"./QueryBuilderStep.scss\";\n\nconst defaultDisplayStrings = {\n groupBy: \"Group By\",\n};\n\nexport interface QueryBuilderStepProps extends QueryBuilderCustomUIProps {\n queryRowCount: number;\n isHidden: boolean;\n onChange: (value: string) => Promise<void>;\n getOptions: SelectOption<string>[];\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const QueryBuilderStep = ({ queryRowCount, isHidden, onChange, getOptions, displayStrings: userDisplayStrings, ...rest }: QueryBuilderStepProps) => {\n const containerClassName = isHidden ? \"gmw-hide\" : \"gmw-query-builder-container\";\n\n const displayStrings = React.useMemo(() => ({ ...defaultDisplayStrings, ...userDisplayStrings }), [userDisplayStrings]);\n\n return (\n <Fieldset legend={displayStrings.groupBy} className={containerClassName}>\n <span>\n <Label htmlFor=\"query-combo-input\">Query Generation Tool</Label>\n <ComboBox\n value={rest.queryGenerationType}\n inputProps={{\n id: \"query-combo-input\",\n }}\n options={getOptions}\n onChange={onChange}\n />\n </span>\n <Text>{`Row Count: ${queryRowCount}`}</Text>\n <QueryBuilderCustomUI {...rest} />\n </Fieldset>\n );\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  import { ToggleSwitch } from "@itwin/itwinui-react";
6
6
  import "./ToggleGroupVisibility.scss";
7
7
  import React from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleGroupVisibility.js","sourceRoot":"","sources":["../../../../src/components/Groups/ToggleGroupVisibility.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,8BAA8B,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAA8B,EAAE,EAAE,CAAC,CAC1H,oBAAC,YAAY,IACX,KAAK,EAAC,gBAAgB,EACtB,aAAa,EAAC,MAAM,EACpB,SAAS,EAAC,YAAY,EACtB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAC5C,CACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { ToggleSwitch } from \"@itwin/itwinui-react\";\nimport \"./ToggleGroupVisibility.scss\";\nimport React from \"react\";\n\nexport interface ToggleGroupVisibilityProps {\n isLoadingQuery: boolean;\n showGroupColor: boolean;\n setShowGroupColor: (value: ((prevState: boolean) => boolean) | boolean) => void;\n}\n\nexport const ToggleGroupVisibility = ({ isLoadingQuery, showGroupColor, setShowGroupColor }: ToggleGroupVisibilityProps) => (\n <ToggleSwitch\n label=\"Color by Group\"\n labelPosition=\"left\"\n className=\"gmw-toggle\"\n disabled={isLoadingQuery}\n checked={showGroupColor}\n onChange={() => setShowGroupColor((b) => !b)}\n />\n);\n"]}
1
+ {"version":3,"file":"ToggleGroupVisibility.js","sourceRoot":"","sources":["../../../../src/components/Groups/ToggleGroupVisibility.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,8BAA8B,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAA8B,EAAE,EAAE,CAAC,CAC1H,oBAAC,YAAY,IACX,KAAK,EAAC,gBAAgB,EACtB,aAAa,EAAC,MAAM,EACpB,SAAS,EAAC,YAAY,EACtB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAC5C,CACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport { ToggleSwitch } from \"@itwin/itwinui-react\";\nimport \"./ToggleGroupVisibility.scss\";\nimport React from \"react\";\n\nexport interface ToggleGroupVisibilityProps {\n isLoadingQuery: boolean;\n showGroupColor: boolean;\n setShowGroupColor: (value: ((prevState: boolean) => boolean) | boolean) => void;\n}\n\nexport const ToggleGroupVisibility = ({ isLoadingQuery, showGroupColor, setShowGroupColor }: ToggleGroupVisibilityProps) => (\n <ToggleSwitch\n label=\"Color by Group\"\n labelPosition=\"left\"\n className=\"gmw-toggle\"\n disabled={isLoadingQuery}\n checked={showGroupColor}\n onChange={() => setShowGroupColor((b) => !b)}\n />\n);\n"]}
@@ -1,9 +1,9 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  import { FeatureOverrideType } from "@itwin/core-common";
6
- import { clearEmphasizedOverriddenElements, clearHiddenElements, emphasizeElements, getHiliteIds, hideElements, overrideElements } from "../../common/viewerUtils";
6
+ import { clearEmphasizedOverriddenElements, clearHiddenElements, emphasizeElements, getHiliteIds, hideElements, overrideElements, } from "../../common/viewerUtils";
7
7
  const GOLDEN_ANGLE_MULTIPLIER = 1.5; // Multiplier to spread colors more uniformly.
8
8
  const BASE_HUE_OFFSET = 60; // Initial hue offset to avoid certain colors e.g 0 offset would begin with red.
9
9
  const HUE_ADJUSTMENT_STEP = 15; // Step to adjust the hue to avoid the red spectrum.
@@ -106,7 +106,11 @@ export const generateOverlappedGroups = (groupsElementIds) => {
106
106
  });
107
107
  const mergedList = mergeElementsByGroup(elems);
108
108
  const overlappedGroupsInformation = Array.from(mergedList.values()).filter((value) => value.groupIds.size > 1);
109
- return { groupsWithGroupedOverlaps: [...allGroups, ...overlappedGroupsInformation], overlappedElementsInfo: getOverlappedElementsInfo(overlappedGroupsInformation), numberOfElementsInGroups: groupElementCount };
109
+ return {
110
+ groupsWithGroupedOverlaps: [...allGroups, ...overlappedGroupsInformation],
111
+ overlappedElementsInfo: getOverlappedElementsInfo(overlappedGroupsInformation),
112
+ numberOfElementsInGroups: groupElementCount,
113
+ };
110
114
  };
111
115
  export const hideGroupConsideringOverlaps = (overlappedElementGroupPairs, groupIdToHide, hiddenGroupsIds) => {
112
116
  const elementsToPotentiallyHide = new Set();
@@ -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 { clearEmphasizedOverriddenElements, clearHiddenElements, emphasizeElements, getHiliteIds, hideElements, overrideElements } 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 (\n iModelConnection: IModelConnection,\n group: GroupMinimal,\n) => {\n const query = group.query;\n const result = await getHiliteIds(query, iModelConnection);\n return {query, result};\n\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 = (\n groupsElementIds: GroupsElementIds,\n) => {\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 { groupsWithGroupedOverlaps: [...allGroups, ...overlappedGroupsInformation], overlappedElementsInfo: getOverlappedElementsInfo(overlappedGroupsInformation), numberOfElementsInGroups: groupElementCount };\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(\n (groupId) =>\n groupId === groupIdToHide || hiddenGroupsIds.has(groupId)\n );\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 +1 @@
1
- {"version":3,"file":"useFetchGroups.js","sourceRoot":"","sources":["../../../../../src/components/Groups/hooks/useFetchGroups.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,SAAiB,EACjB,cAAgC,EAChC,YAA2B,EAC5B,EAAE;IACD,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9F,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAiB,EAAE,cAAgC,EAAE,YAA2B,EAAE,EAAE;IACjH,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;QAC/B,OAAO,EAAG,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC;KAC3E,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IGroupsClient } from \"@itwin/insights-client\";\nimport { PreferReturn } from \"@itwin/insights-client\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { GetAccessTokenFn } from \"../../context/GroupingApiConfigContext\";\n\nexport const fetchGroups = async (\n mappingId: string,\n getAccessToken: GetAccessTokenFn,\n groupsClient: IGroupsClient\n)=> {\n const accessToken = await getAccessToken();\n const groupsList = await groupsClient.getGroups(accessToken, mappingId, PreferReturn.Minimal);\n return groupsList.groups;\n};\n\nexport const useFetchGroups = (mappingId: string, getAccessToken: GetAccessTokenFn, groupsClient: IGroupsClient) => {\n return useQuery({\n queryKey: [\"groups\", mappingId],\n queryFn: async () => fetchGroups(mappingId, getAccessToken, groupsClient),\n });\n};\n"]}
1
+ {"version":3,"file":"useFetchGroups.js","sourceRoot":"","sources":["../../../../../src/components/Groups/hooks/useFetchGroups.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,SAAiB,EAAE,cAAgC,EAAE,YAA2B,EAAE,EAAE;IACpH,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9F,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAiB,EAAE,cAAgC,EAAE,YAA2B,EAAE,EAAE;IACjH,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;QAC/B,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC;KAC1E,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { IGroupsClient } from \"@itwin/insights-client\";\nimport { PreferReturn } from \"@itwin/insights-client\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { GetAccessTokenFn } from \"../../context/GroupingApiConfigContext\";\n\nexport const fetchGroups = async (mappingId: string, getAccessToken: GetAccessTokenFn, groupsClient: IGroupsClient) => {\n const accessToken = await getAccessToken();\n const groupsList = await groupsClient.getGroups(accessToken, mappingId, PreferReturn.Minimal);\n return groupsList.groups;\n};\n\nexport const useFetchGroups = (mappingId: string, getAccessToken: GetAccessTokenFn, groupsClient: IGroupsClient) => {\n return useQuery({\n queryKey: [\"groups\", mappingId],\n queryFn: async () => fetchGroups(mappingId, getAccessToken, groupsClient),\n });\n};\n"]}
@@ -12,7 +12,7 @@ export interface GroupsOperationsProps {
12
12
  * Custom hook to handle group operations.
13
13
  * @internal
14
14
  */
15
- export declare const useGroupsOperations: ({ mappingId, }: GroupsOperationsProps) => {
15
+ export declare const useGroupsOperations: ({ mappingId }: GroupsOperationsProps) => {
16
16
  groups: GroupMinimal[] | undefined;
17
17
  isLoading: boolean;
18
18
  refresh: () => Promise<void>;
@@ -1,7 +1,7 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  import { useCallback, useState } from "react";
6
6
  import { useGroupingMappingApiConfig } from "../../context/GroupingApiConfigContext";
7
7
  import { GroupingMappingCustomUIType } from "../../customUI/GroupingMappingCustomUI";
@@ -14,9 +14,9 @@ import { useGroupsClient } from "../../context/GroupsClientContext";
14
14
  * Custom hook to handle group operations.
15
15
  * @internal
16
16
  */
17
- export const useGroupsOperations = ({ mappingId, }) => {
17
+ export const useGroupsOperations = ({ mappingId }) => {
18
18
  const { getAccessToken } = useGroupingMappingApiConfig();
19
- const { overlappedElementsMetadata: { overlappedElementsInfo } } = useGroupHilitedElementsContext();
19
+ const { overlappedElementsMetadata: { overlappedElementsInfo }, } = useGroupHilitedElementsContext();
20
20
  const groupsClient = useGroupsClient();
21
21
  const groupUIs = useGroupingMappingCustomUI().customUIs.filter((p) => p.type === GroupingMappingCustomUIType.Grouping);
22
22
  const contextUIs = useGroupingMappingCustomUI().customUIs.filter((p) => p.type === GroupingMappingCustomUIType.Context);
@@ -1 +1 @@
1
- {"version":3,"file":"useGroupsOperations.js","sourceRoot":"","sources":["../../../../../src/components/Groups/hooks/useGroupsOperations.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAErF,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAUpE;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,SAAS,GACa,EAAE,EAAE;IAC1B,MAAM,EAAE,cAAc,EAAE,GAAG,2BAA2B,EAAE,CAAC;IACzD,MAAM,EAAE,0BAA0B,EAAE,EAAG,sBAAsB,EAAE,EAAE,GAAG,8BAA8B,EAAE,CAAC;IAErG,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,QAAQ,GACZ,0BAA0B,EAAE,CAAC,SAAS,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,2BAA2B,CAAC,QAAQ,CACjC,CAAC;IAC1B,MAAM,UAAU,GACd,0BAA0B,EAAE,CAAC,SAAS,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,2BAA2B,CAAC,OAAO,CACjC,CAAC;IACzB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,SAAS,CACV,CAAC;IACF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAChF,MAAM,CAAC,2BAA2B,EAAE,8BAA8B,CAAC,GAAG,QAAQ,CAA2B,SAAS,CAAC,CAAC;IACpH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAE5F,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,MAAM,WAAW,CAAC,iBAAiB,CAAC,EAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAC,CAAC,CAAC;IACzE,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAE7B,MAAM,mBAAmB,GAAG,WAAW,CACrC;QACE,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,CACF,CAAC;IAEF,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","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 = ({\n mappingId,\n}: GroupsOperationsProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const { overlappedElementsMetadata: { overlappedElementsInfo } } = useGroupHilitedElementsContext();\n\n const groupsClient = useGroupsClient();\n const groupUIs: GroupingCustomUI[] =\n useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Grouping\n ) as GroupingCustomUI[];\n const contextUIs: ContextCustomUI[] =\n useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Context\n ) as ContextCustomUI[];\n const [showDeleteModal, setShowDeleteModal] = useState<GroupMinimal | undefined>(\n undefined\n );\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 {\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\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,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAErF,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAUpE;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAE,SAAS,EAAyB,EAAE,EAAE;IAC1E,MAAM,EAAE,cAAc,EAAE,GAAG,2BAA2B,EAAE,CAAC;IACzD,MAAM,EACJ,0BAA0B,EAAE,EAAE,sBAAsB,EAAE,GACvD,GAAG,8BAA8B,EAAE,CAAC;IAErC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAuB,0BAA0B,EAAE,CAAC,SAAS,CAAC,MAAM,CAChF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,2BAA2B,CAAC,QAAQ,CACjC,CAAC;IACxB,MAAM,UAAU,GAAsB,0BAA0B,EAAE,CAAC,SAAS,CAAC,MAAM,CACjF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,2BAA2B,CAAC,OAAO,CACjC,CAAC;IACvB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAA2B,SAAS,CAAC,CAAC;IAC5F,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAChF,MAAM,CAAC,2BAA2B,EAAE,8BAA8B,CAAC,GAAG,QAAQ,CAA2B,SAAS,CAAC,CAAC;IACpH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAE5F,MAAM,OAAO,GAAG,WAAW,CAAC,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,WAAW,CAAC;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","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"]}
@@ -27,6 +27,6 @@ export declare const createQueryForHiliteIdsAndKeyset: (group: GroupMinimal, iMo
27
27
  };
28
28
  export declare const useGroupKeySetQuery: (group: GroupMinimal, iModelConnection: IModelConnection, enabled: boolean) => import("@tanstack/react-query").UseQueryResult<QueryResults, unknown>;
29
29
  export declare const useKeySetHiliteQueries: (groups: GroupMinimal[], enabled: boolean, iModelConnection: IModelConnection) => {
30
- groupQueries: Pick<import("@tanstack/react-query").UseQueryResult<QueryResults, unknown>, "data" | "isFetching" | "isFetched" | "refetch">[];
30
+ groupQueries: Pick<import("@tanstack/react-query").UseQueryResult<QueryResults, unknown>, "data" | "isFetched" | "isFetching" | "refetch">[];
31
31
  };
32
32
  //# sourceMappingURL=useKeySetHiliteQueries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeySetHiliteQueries.js","sourceRoot":"","sources":["../../../../../src/components/Groups/hooks/useKeySetHiliteQueries.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAQjE,EAAE,CAAC;AAIJ,MAAM,CAAC,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,8BAA8B,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAC5E,OAAO;IACP,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,EAAE,SAAS,EAAC,SAAS,CAAC,yBAAyB,EAAE,OAAO,EAAE,qBAAqB,KAAK,CAAC,SAAS,GAAG,EAAE;CAC1G,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAmB,EAAE,gBAAkC,EAAE,OAAgB,EAAE,EAAE;IAC/G,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,gCAAgC,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEpI,OAAO,QAAQ,CAAe,KAAK,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAsB,EAAE,OAAgB,EAAE,gBAAkC,EAAE,EAAE;IACrH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gCAAgC,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,EACrH,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvC,MAAM,cAAc,GAAG,UAAU,CAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,MAAM,YAAY,GAAG,yBAAyB,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/G,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { 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\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)),\n [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,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AASlE,EAAE,CAAC;AAIH,MAAM,CAAC,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,8BAA8B,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAC5E,OAAO;IACP,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,yBAAyB,EAAE,OAAO,EAAE,qBAAqB,KAAK,CAAC,SAAS,GAAG,EAAE;CAC3G,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAmB,EAAE,gBAAkC,EAAE,OAAgB,EAAE,EAAE;IAC/G,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,gCAAgC,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEpI,OAAO,QAAQ,CAAe,KAAK,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAsB,EAAE,OAAgB,EAAE,gBAAkC,EAAE,EAAE;IACrH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gCAAgC,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IAE9J,MAAM,cAAc,GAAG,UAAU,CAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,MAAM,YAAY,GAAG,yBAAyB,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/G,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { 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"]}
@@ -3,10 +3,10 @@ import { Presentation } from "@itwin/presentation-frontend";
3
3
  import { useCallback, useEffect, useState } from "react";
4
4
  import { useGroupHilitedElementsContext } from "../../context/GroupHilitedElementsContext";
5
5
  import { visualizeGroupColors } from "../groupsHelpers";
6
- import { clearEmphasizedElements, clearOverriddenElements, transparentOverriddenElements, visualizeElementsByQuery, zoomToElements } from "../../../common/viewerUtils";
6
+ import { clearEmphasizedElements, clearOverriddenElements, transparentOverriddenElements, visualizeElementsByQuery, zoomToElements, } from "../../../common/viewerUtils";
7
7
  export const useVisualization = (shouldVisualize, iModelConnection, query, queryGenerationType) => {
8
8
  const [isRendering, setIsRendering] = useState(false);
9
- const { showGroupColor, hiddenGroupsIds, overlappedElementsMetadata: { overlappedElementGroupPairs }, setNumberOfVisualizedGroups } = useGroupHilitedElementsContext();
9
+ const { showGroupColor, hiddenGroupsIds, overlappedElementsMetadata: { overlappedElementGroupPairs }, setNumberOfVisualizedGroups, } = useGroupHilitedElementsContext();
10
10
  const [simpleSelectionQuery, setSimpleSelectionQuery] = useState("");
11
11
  const resetView = useCallback(async () => {
12
12
  if (!shouldVisualize)
@@ -25,9 +25,7 @@ export const useVisualization = (shouldVisualize, iModelConnection, query, query
25
25
  const removeListener = Presentation.selection.selectionChange.addListener(async (evt, selectionProvider) => {
26
26
  if (queryGenerationType === "Selection") {
27
27
  const selection = selectionProvider.getSelection(evt.imodel, evt.level);
28
- const query = selection.instanceKeys.size > 0
29
- ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`
30
- : "";
28
+ const query = selection.instanceKeys.size > 0 ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}` : "";
31
29
  setSimpleSelectionQuery(query);
32
30
  }
33
31
  });
@@ -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 { useGroupHilitedElementsContext } from \"../../context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"../groupsHelpers\";\nimport { clearEmphasizedElements, clearOverriddenElements, transparentOverriddenElements, visualizeElementsByQuery, zoomToElements } from \"../../../common/viewerUtils\";\n\nexport const useVisualization = (shouldVisualize: boolean, iModelConnection: IModelConnection, query: string, queryGenerationType: string) => {\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const { showGroupColor, hiddenGroupsIds, overlappedElementsMetadata: { overlappedElementGroupPairs }, setNumberOfVisualizedGroups} = 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(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(\n evt.imodel,\n evt.level,\n );\n const query = selection.instanceKeys.size > 0\n ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`\n : \"\";\n setSimpleSelectionQuery(query);\n }\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(\n query,\n \"red\",\n iModelConnection,\n );\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(\"Sorry, we have failed to generate a valid query.\");\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(\n \"GroupingMappingWidget\",\n iModelConnection,\n ), [iModelConnection, shouldVisualize]);\n\n useEffect(() => {\n clearPresentationSelection();\n }, [clearPresentationSelection, iModelConnection]);\n\n return { isRendering, setIsRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView };\n\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 { 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(\"Sorry, we have failed to generate a valid query.\");\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,7 +1,7 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  import classnames from "classnames";
6
6
  import React from "react";
7
7
  import { LoadingSpinner } from "../SharedComponents/LoadingSpinner";
@@ -1 +1 @@
1
- {"version":3,"file":"BlockingOverlay.js","sourceRoot":"","sources":["../../../../src/components/Mappings/BlockingOverlay.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,wBAAwB,CAAC;AAMhC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,SAAS,EAAwB,EAAE,EAAE;IACrE,OAAO,CACL,6BAAK,SAAS,EAAE,UAAU,CAAC,oCAAoC,EAAE,SAAS,IAAI,aAAa,CAAC;QAC1F,oBAAC,cAAc,OAAG,CACd,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport classnames from \"classnames\";\nimport React from \"react\";\nimport { LoadingSpinner } from \"../SharedComponents/LoadingSpinner\";\nimport \"./BlockingOverlay.scss\";\n\nexport interface BlockingOverlayProps {\n isVisible: boolean;\n}\n\nexport const BlockingOverlay = ({ isVisible }: BlockingOverlayProps) => {\n return (\n <div className={classnames(\"gmw-group-mapping-blocking-overlay\", isVisible && \"gmw-visible\")}>\n <LoadingSpinner />\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"BlockingOverlay.js","sourceRoot":"","sources":["../../../../src/components/Mappings/BlockingOverlay.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,wBAAwB,CAAC;AAMhC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,SAAS,EAAwB,EAAE,EAAE;IACrE,OAAO,CACL,6BAAK,SAAS,EAAE,UAAU,CAAC,oCAAoC,EAAE,SAAS,IAAI,aAAa,CAAC;QAC1F,oBAAC,cAAc,OAAG,CACd,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport classnames from \"classnames\";\nimport React from \"react\";\nimport { LoadingSpinner } from \"../SharedComponents/LoadingSpinner\";\nimport \"./BlockingOverlay.scss\";\n\nexport interface BlockingOverlayProps {\n isVisible: boolean;\n}\n\nexport const BlockingOverlay = ({ isVisible }: BlockingOverlayProps) => {\n return (\n <div className={classnames(\"gmw-group-mapping-blocking-overlay\", isVisible && \"gmw-visible\")}>\n <LoadingSpinner />\n </div>\n );\n};\n"]}