@itwin/grouping-mapping-widget 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/lib/cjs/grouping-mapping-widget.d.ts +3 -0
  2. package/lib/cjs/grouping-mapping-widget.js +7 -1
  3. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  4. package/lib/cjs/test/GroupingMappingCustomUI.test.js +2 -2
  5. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  6. package/lib/cjs/widget/components/CalculatedPropertyAction.js +7 -119
  7. package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
  8. package/lib/cjs/widget/components/CalculatedPropertyAction.scss +1 -12
  9. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.d.ts +12 -0
  10. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js +154 -0
  11. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -0
  12. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.scss +27 -0
  13. package/lib/cjs/widget/components/ConfirmMappingsImport.js +1 -1
  14. package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
  15. package/lib/cjs/widget/components/GroupAction.js +50 -66
  16. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  17. package/lib/cjs/widget/components/GroupAction.scss +0 -18
  18. package/lib/cjs/widget/components/GroupColorLegend.d.ts +10 -0
  19. package/lib/cjs/widget/components/GroupColorLegend.js +20 -0
  20. package/lib/cjs/widget/components/GroupColorLegend.js.map +1 -0
  21. package/lib/cjs/widget/components/GroupColorLegend.scss +9 -0
  22. package/lib/cjs/widget/components/GroupColorToggle.d.ts +9 -0
  23. package/lib/cjs/widget/components/GroupColorToggle.js +69 -0
  24. package/lib/cjs/widget/components/GroupColorToggle.js.map +1 -0
  25. package/lib/cjs/widget/components/GroupDetails.d.ts +13 -0
  26. package/lib/cjs/widget/components/GroupDetails.js +34 -0
  27. package/lib/cjs/widget/components/GroupDetails.js.map +1 -0
  28. package/lib/cjs/widget/components/GroupDetailsActionPanel.d.ts +8 -0
  29. package/lib/cjs/widget/components/GroupDetailsActionPanel.js +19 -0
  30. package/lib/cjs/widget/components/GroupDetailsActionPanel.js.map +1 -0
  31. package/lib/cjs/widget/components/GroupDetailsStep.d.ts +13 -0
  32. package/lib/cjs/widget/components/GroupDetailsStep.js +25 -0
  33. package/lib/cjs/widget/components/GroupDetailsStep.js.map +1 -0
  34. package/lib/cjs/widget/components/GroupDetailsStep.scss +11 -0
  35. package/lib/cjs/widget/components/GroupItem.d.ts +12 -0
  36. package/lib/cjs/widget/components/GroupItem.js +19 -0
  37. package/lib/cjs/widget/components/GroupItem.js.map +1 -0
  38. package/lib/cjs/widget/components/GroupMenuActions.d.ts +13 -0
  39. package/lib/cjs/widget/components/GroupMenuActions.js +68 -0
  40. package/lib/cjs/widget/components/GroupMenuActions.js.map +1 -0
  41. package/lib/cjs/widget/components/GroupMenuActions.scss +13 -0
  42. package/lib/cjs/widget/components/Grouping.d.ts +9 -5
  43. package/lib/cjs/widget/components/Grouping.js +15 -144
  44. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  45. package/lib/cjs/widget/components/Grouping.scss +0 -16
  46. package/lib/cjs/widget/components/GroupingMapping.js +4 -6
  47. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  48. package/lib/cjs/widget/components/GroupingMappingContent.js +1 -1
  49. package/lib/cjs/widget/components/GroupingMappingContent.js.map +1 -1
  50. package/lib/cjs/widget/components/GroupingMappingContext.js +1 -1
  51. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
  52. package/lib/cjs/widget/components/GroupingMappingHeader.d.ts +1 -2
  53. package/lib/cjs/widget/components/GroupingMappingHeader.js +9 -2
  54. package/lib/cjs/widget/components/GroupingMappingHeader.js.map +1 -1
  55. package/lib/cjs/widget/components/GroupingMappingRouter.js +20 -21
  56. package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -1
  57. package/lib/cjs/widget/components/GroupsAddButton.d.ts +3 -2
  58. package/lib/cjs/widget/components/GroupsAddButton.js +4 -3
  59. package/lib/cjs/widget/components/GroupsAddButton.js.map +1 -1
  60. package/lib/cjs/widget/components/GroupsAddButton.scss +2 -0
  61. package/lib/cjs/widget/components/GroupsShowHideButtons.d.ts +11 -0
  62. package/lib/cjs/widget/components/GroupsShowHideButtons.js +45 -0
  63. package/lib/cjs/widget/components/GroupsShowHideButtons.js.map +1 -0
  64. package/lib/cjs/widget/components/GroupsVisualization.d.ts +9 -0
  65. package/lib/cjs/widget/components/GroupsVisualization.js +137 -0
  66. package/lib/cjs/widget/components/GroupsVisualization.js.map +1 -0
  67. package/lib/cjs/widget/components/GroupsVisualization.scss +12 -0
  68. package/lib/cjs/widget/components/GroupsVisualizationActions.d.ts +10 -0
  69. package/lib/cjs/widget/components/GroupsVisualizationActions.js +27 -0
  70. package/lib/cjs/widget/components/GroupsVisualizationActions.js.map +1 -0
  71. package/lib/cjs/widget/components/GroupsVisualizationActions.scss +9 -0
  72. package/lib/cjs/widget/components/Mapping.js +2 -3
  73. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  74. package/lib/cjs/widget/components/MappingAction.js +1 -1
  75. package/lib/cjs/widget/components/MappingAction.js.map +1 -1
  76. package/lib/cjs/widget/components/MappingImportWizardModal.js +1 -1
  77. package/lib/cjs/widget/components/MappingImportWizardModal.js.map +1 -1
  78. package/lib/cjs/widget/components/PropertyAction.d.ts +8 -0
  79. package/lib/cjs/widget/components/PropertyAction.js +100 -0
  80. package/lib/cjs/widget/components/PropertyAction.js.map +1 -0
  81. package/lib/cjs/widget/components/PropertyAction.scss +9 -0
  82. package/lib/cjs/widget/components/PropertyMenu.d.ts +1 -2
  83. package/lib/cjs/widget/components/PropertyMenu.js +6 -49
  84. package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
  85. package/lib/cjs/widget/components/PropertyMenu.scss +2 -17
  86. package/lib/cjs/widget/components/PropertyMenuWithVisualization.d.ts +8 -0
  87. package/lib/cjs/widget/components/PropertyMenuWithVisualization.js +45 -0
  88. package/lib/cjs/widget/components/PropertyMenuWithVisualization.js.map +1 -0
  89. package/lib/cjs/widget/components/PropertyMenuWithVisualization.scss +16 -0
  90. package/lib/cjs/widget/components/QueryBuilder.d.ts +1 -1
  91. package/lib/cjs/widget/components/QueryBuilder.js +4 -4
  92. package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
  93. package/lib/cjs/widget/components/QueryBuilderActionPanel.d.ts +6 -0
  94. package/lib/cjs/widget/components/QueryBuilderActionPanel.js +17 -0
  95. package/lib/cjs/widget/components/QueryBuilderActionPanel.js.map +1 -0
  96. package/lib/cjs/widget/components/QueryBuilderCustomUI.d.ts +13 -0
  97. package/lib/cjs/widget/components/QueryBuilderCustomUI.js +28 -0
  98. package/lib/cjs/widget/components/QueryBuilderCustomUI.js.map +1 -0
  99. package/lib/cjs/widget/components/QueryBuilderStep.d.ts +16 -0
  100. package/lib/cjs/widget/components/QueryBuilderStep.js +30 -0
  101. package/lib/cjs/widget/components/QueryBuilderStep.js.map +1 -0
  102. package/lib/cjs/widget/components/QueryBuilderStep.scss +18 -0
  103. package/lib/cjs/widget/components/SelectMappings.js +1 -1
  104. package/lib/cjs/widget/components/SelectMappings.js.map +1 -1
  105. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.d.ts +16 -0
  106. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.js +62 -0
  107. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.js.map +1 -0
  108. package/lib/cjs/widget/components/StatusIcon.d.ts +15 -0
  109. package/lib/cjs/widget/components/StatusIcon.js +26 -0
  110. package/lib/cjs/widget/components/StatusIcon.js.map +1 -0
  111. package/lib/cjs/widget/components/StatusIcon.scss +26 -0
  112. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.d.ts +2 -2
  113. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js +1 -1
  114. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  115. package/lib/cjs/widget/components/context/PropertyGridWrapperContext.d.ts +1 -3
  116. package/lib/cjs/widget/components/context/PropertyGridWrapperContext.js +0 -2
  117. package/lib/cjs/widget/components/context/PropertyGridWrapperContext.js.map +1 -1
  118. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +1 -1
  119. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js +51 -32
  120. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  121. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.scss +25 -17
  122. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.d.ts +4 -0
  123. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  124. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -1
  125. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js +3 -3
  126. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  127. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.scss +1 -0
  128. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js +1 -1
  129. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  130. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.scss +1 -0
  131. package/lib/cjs/widget/components/groupsHelpers.d.ts +1 -1
  132. package/lib/cjs/widget/components/groupsHelpers.js +11 -14
  133. package/lib/cjs/widget/components/groupsHelpers.js.map +1 -1
  134. package/lib/cjs/widget/components/utils.d.ts +1 -1
  135. package/lib/cjs/widget/components/utils.js.map +1 -1
  136. package/lib/esm/grouping-mapping-widget.d.ts +3 -0
  137. package/lib/esm/grouping-mapping-widget.js +3 -0
  138. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  139. package/lib/esm/test/GroupingMappingCustomUI.test.js +2 -2
  140. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  141. package/lib/esm/widget/components/CalculatedPropertyAction.js +9 -121
  142. package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
  143. package/lib/esm/widget/components/CalculatedPropertyAction.scss +1 -12
  144. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.d.ts +12 -0
  145. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js +128 -0
  146. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -0
  147. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.scss +27 -0
  148. package/lib/esm/widget/components/ConfirmMappingsImport.js +1 -1
  149. package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
  150. package/lib/esm/widget/components/GroupAction.js +53 -69
  151. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  152. package/lib/esm/widget/components/GroupAction.scss +0 -18
  153. package/lib/esm/widget/components/GroupColorLegend.d.ts +10 -0
  154. package/lib/esm/widget/components/GroupColorLegend.js +13 -0
  155. package/lib/esm/widget/components/GroupColorLegend.js.map +1 -0
  156. package/lib/esm/widget/components/GroupColorLegend.scss +9 -0
  157. package/lib/esm/widget/components/GroupColorToggle.d.ts +9 -0
  158. package/lib/esm/widget/components/GroupColorToggle.js +46 -0
  159. package/lib/esm/widget/components/GroupColorToggle.js.map +1 -0
  160. package/lib/esm/widget/components/GroupDetails.d.ts +13 -0
  161. package/lib/esm/widget/components/GroupDetails.js +27 -0
  162. package/lib/esm/widget/components/GroupDetails.js.map +1 -0
  163. package/lib/esm/widget/components/GroupDetailsActionPanel.d.ts +8 -0
  164. package/lib/esm/widget/components/GroupDetailsActionPanel.js +12 -0
  165. package/lib/esm/widget/components/GroupDetailsActionPanel.js.map +1 -0
  166. package/lib/esm/widget/components/GroupDetailsStep.d.ts +13 -0
  167. package/lib/esm/widget/components/GroupDetailsStep.js +18 -0
  168. package/lib/esm/widget/components/GroupDetailsStep.js.map +1 -0
  169. package/lib/esm/widget/components/GroupDetailsStep.scss +11 -0
  170. package/lib/esm/widget/components/GroupItem.d.ts +12 -0
  171. package/lib/esm/widget/components/GroupItem.js +12 -0
  172. package/lib/esm/widget/components/GroupItem.js.map +1 -0
  173. package/lib/esm/widget/components/GroupMenuActions.d.ts +13 -0
  174. package/lib/esm/widget/components/GroupMenuActions.js +45 -0
  175. package/lib/esm/widget/components/GroupMenuActions.js.map +1 -0
  176. package/lib/esm/widget/components/GroupMenuActions.scss +13 -0
  177. package/lib/esm/widget/components/Grouping.d.ts +9 -5
  178. package/lib/esm/widget/components/Grouping.js +18 -147
  179. package/lib/esm/widget/components/Grouping.js.map +1 -1
  180. package/lib/esm/widget/components/Grouping.scss +0 -16
  181. package/lib/esm/widget/components/GroupingMapping.js +4 -6
  182. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  183. package/lib/esm/widget/components/GroupingMappingContent.js +1 -1
  184. package/lib/esm/widget/components/GroupingMappingContent.js.map +1 -1
  185. package/lib/esm/widget/components/GroupingMappingContext.js +1 -1
  186. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
  187. package/lib/esm/widget/components/GroupingMappingHeader.d.ts +1 -2
  188. package/lib/esm/widget/components/GroupingMappingHeader.js +9 -2
  189. package/lib/esm/widget/components/GroupingMappingHeader.js.map +1 -1
  190. package/lib/esm/widget/components/GroupingMappingRouter.js +20 -21
  191. package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -1
  192. package/lib/esm/widget/components/GroupsAddButton.d.ts +3 -2
  193. package/lib/esm/widget/components/GroupsAddButton.js +5 -4
  194. package/lib/esm/widget/components/GroupsAddButton.js.map +1 -1
  195. package/lib/esm/widget/components/GroupsAddButton.scss +2 -0
  196. package/lib/esm/widget/components/GroupsShowHideButtons.d.ts +11 -0
  197. package/lib/esm/widget/components/GroupsShowHideButtons.js +22 -0
  198. package/lib/esm/widget/components/GroupsShowHideButtons.js.map +1 -0
  199. package/lib/esm/widget/components/GroupsVisualization.d.ts +9 -0
  200. package/lib/esm/widget/components/GroupsVisualization.js +114 -0
  201. package/lib/esm/widget/components/GroupsVisualization.js.map +1 -0
  202. package/lib/esm/widget/components/GroupsVisualization.scss +12 -0
  203. package/lib/esm/widget/components/GroupsVisualizationActions.d.ts +10 -0
  204. package/lib/esm/widget/components/GroupsVisualizationActions.js +20 -0
  205. package/lib/esm/widget/components/GroupsVisualizationActions.js.map +1 -0
  206. package/lib/esm/widget/components/GroupsVisualizationActions.scss +9 -0
  207. package/lib/esm/widget/components/Mapping.js +2 -3
  208. package/lib/esm/widget/components/Mapping.js.map +1 -1
  209. package/lib/esm/widget/components/MappingAction.js +1 -1
  210. package/lib/esm/widget/components/MappingAction.js.map +1 -1
  211. package/lib/esm/widget/components/MappingImportWizardModal.js +1 -1
  212. package/lib/esm/widget/components/MappingImportWizardModal.js.map +1 -1
  213. package/lib/esm/widget/components/PropertyAction.d.ts +8 -0
  214. package/lib/esm/widget/components/PropertyAction.js +77 -0
  215. package/lib/esm/widget/components/PropertyAction.js.map +1 -0
  216. package/lib/esm/widget/components/PropertyAction.scss +9 -0
  217. package/lib/esm/widget/components/PropertyMenu.d.ts +1 -2
  218. package/lib/esm/widget/components/PropertyMenu.js +7 -50
  219. package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
  220. package/lib/esm/widget/components/PropertyMenu.scss +2 -17
  221. package/lib/esm/widget/components/PropertyMenuWithVisualization.d.ts +8 -0
  222. package/lib/esm/widget/components/PropertyMenuWithVisualization.js +22 -0
  223. package/lib/esm/widget/components/PropertyMenuWithVisualization.js.map +1 -0
  224. package/lib/esm/widget/components/PropertyMenuWithVisualization.scss +16 -0
  225. package/lib/esm/widget/components/QueryBuilder.d.ts +1 -1
  226. package/lib/esm/widget/components/QueryBuilder.js +4 -4
  227. package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
  228. package/lib/esm/widget/components/QueryBuilderActionPanel.d.ts +6 -0
  229. package/lib/esm/widget/components/QueryBuilderActionPanel.js +10 -0
  230. package/lib/esm/widget/components/QueryBuilderActionPanel.js.map +1 -0
  231. package/lib/esm/widget/components/QueryBuilderCustomUI.d.ts +13 -0
  232. package/lib/esm/widget/components/QueryBuilderCustomUI.js +21 -0
  233. package/lib/esm/widget/components/QueryBuilderCustomUI.js.map +1 -0
  234. package/lib/esm/widget/components/QueryBuilderStep.d.ts +16 -0
  235. package/lib/esm/widget/components/QueryBuilderStep.js +23 -0
  236. package/lib/esm/widget/components/QueryBuilderStep.js.map +1 -0
  237. package/lib/esm/widget/components/QueryBuilderStep.scss +18 -0
  238. package/lib/esm/widget/components/SelectMappings.js +1 -1
  239. package/lib/esm/widget/components/SelectMappings.js.map +1 -1
  240. package/lib/esm/widget/components/SharedCalculatedPropertyForms.d.ts +16 -0
  241. package/lib/esm/widget/components/SharedCalculatedPropertyForms.js +39 -0
  242. package/lib/esm/widget/components/SharedCalculatedPropertyForms.js.map +1 -0
  243. package/lib/esm/widget/components/StatusIcon.d.ts +15 -0
  244. package/lib/esm/widget/components/StatusIcon.js +19 -0
  245. package/lib/esm/widget/components/StatusIcon.js.map +1 -0
  246. package/lib/esm/widget/components/StatusIcon.scss +26 -0
  247. package/lib/esm/widget/components/context/GroupHilitedElementsContext.d.ts +2 -2
  248. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js +1 -1
  249. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  250. package/lib/esm/widget/components/context/PropertyGridWrapperContext.d.ts +1 -3
  251. package/lib/esm/widget/components/context/PropertyGridWrapperContext.js +0 -2
  252. package/lib/esm/widget/components/context/PropertyGridWrapperContext.js.map +1 -1
  253. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +1 -1
  254. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js +53 -34
  255. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  256. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.scss +25 -17
  257. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.d.ts +4 -0
  258. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  259. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -1
  260. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js +4 -4
  261. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  262. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.scss +1 -0
  263. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js +2 -2
  264. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  265. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.scss +1 -0
  266. package/lib/esm/widget/components/groupsHelpers.d.ts +1 -1
  267. package/lib/esm/widget/components/groupsHelpers.js +11 -14
  268. package/lib/esm/widget/components/groupsHelpers.js.map +1 -1
  269. package/lib/esm/widget/components/utils.d.ts +1 -1
  270. package/lib/esm/widget/components/utils.js.map +1 -1
  271. package/package.json +1 -1
  272. package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.d.ts +0 -32
  273. package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.js +0 -91
  274. package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.js.map +0 -1
  275. package/lib/cjs/widget/components/property-grid/PrimitivePropertyRenderer.d.ts +0 -26
  276. package/lib/cjs/widget/components/property-grid/PrimitivePropertyRenderer.js +0 -62
  277. package/lib/cjs/widget/components/property-grid/PrimitivePropertyRenderer.js.map +0 -1
  278. package/lib/cjs/widget/components/property-grid/PropertyGrid.d.ts +0 -67
  279. package/lib/cjs/widget/components/property-grid/PropertyGrid.js +0 -198
  280. package/lib/cjs/widget/components/property-grid/PropertyGrid.js.map +0 -1
  281. package/lib/cjs/widget/components/property-grid/PropertyGrid.scss +0 -71
  282. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.d.ts +0 -23
  283. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +0 -77
  284. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +0 -1
  285. package/lib/cjs/widget/components/property-grid/PropertyList.d.ts +0 -69
  286. package/lib/cjs/widget/components/property-grid/PropertyList.js +0 -87
  287. package/lib/cjs/widget/components/property-grid/PropertyList.js.map +0 -1
  288. package/lib/cjs/widget/components/property-grid/PropertyRender.d.ts +0 -92
  289. package/lib/cjs/widget/components/property-grid/PropertyRender.js +0 -109
  290. package/lib/cjs/widget/components/property-grid/PropertyRender.js.map +0 -1
  291. package/lib/cjs/widget/components/property-grid/PropertyView.d.ts +0 -22
  292. package/lib/cjs/widget/components/property-grid/PropertyView.js +0 -232
  293. package/lib/cjs/widget/components/property-grid/PropertyView.js.map +0 -1
  294. package/lib/cjs/widget/components/property-grid/PropertyView.scss +0 -77
  295. package/lib/cjs/widget/components/property-grid/countMatchesInString.d.ts +0 -8
  296. package/lib/cjs/widget/components/property-grid/countMatchesInString.js +0 -32
  297. package/lib/cjs/widget/components/property-grid/countMatchesInString.js.map +0 -1
  298. package/lib/cjs/widget/components/property-grid/createNewDisplayValue.d.ts +0 -10
  299. package/lib/cjs/widget/components/property-grid/createNewDisplayValue.js +0 -65
  300. package/lib/cjs/widget/components/property-grid/createNewDisplayValue.js.map +0 -1
  301. package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.d.ts +0 -32
  302. package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.js +0 -68
  303. package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.js.map +0 -1
  304. package/lib/esm/widget/components/property-grid/PrimitivePropertyRenderer.d.ts +0 -26
  305. package/lib/esm/widget/components/property-grid/PrimitivePropertyRenderer.js +0 -39
  306. package/lib/esm/widget/components/property-grid/PrimitivePropertyRenderer.js.map +0 -1
  307. package/lib/esm/widget/components/property-grid/PropertyGrid.d.ts +0 -67
  308. package/lib/esm/widget/components/property-grid/PropertyGrid.js +0 -172
  309. package/lib/esm/widget/components/property-grid/PropertyGrid.js.map +0 -1
  310. package/lib/esm/widget/components/property-grid/PropertyGrid.scss +0 -71
  311. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.d.ts +0 -23
  312. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +0 -54
  313. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +0 -1
  314. package/lib/esm/widget/components/property-grid/PropertyList.d.ts +0 -69
  315. package/lib/esm/widget/components/property-grid/PropertyList.js +0 -60
  316. package/lib/esm/widget/components/property-grid/PropertyList.js.map +0 -1
  317. package/lib/esm/widget/components/property-grid/PropertyRender.d.ts +0 -92
  318. package/lib/esm/widget/components/property-grid/PropertyRender.js +0 -86
  319. package/lib/esm/widget/components/property-grid/PropertyRender.js.map +0 -1
  320. package/lib/esm/widget/components/property-grid/PropertyView.d.ts +0 -22
  321. package/lib/esm/widget/components/property-grid/PropertyView.js +0 -209
  322. package/lib/esm/widget/components/property-grid/PropertyView.js.map +0 -1
  323. package/lib/esm/widget/components/property-grid/PropertyView.scss +0 -77
  324. package/lib/esm/widget/components/property-grid/countMatchesInString.d.ts +0 -8
  325. package/lib/esm/widget/components/property-grid/countMatchesInString.js +0 -28
  326. package/lib/esm/widget/components/property-grid/countMatchesInString.js.map +0 -1
  327. package/lib/esm/widget/components/property-grid/createNewDisplayValue.d.ts +0 -10
  328. package/lib/esm/widget/components/property-grid/createNewDisplayValue.js +0 -42
  329. package/lib/esm/widget/components/property-grid/createNewDisplayValue.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupsShowHideButtons.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupsShowHideButtons.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAKA,oEAAkF;AAClF,wDAAkD;AAClD,+CAAoD;AACpD,uFAAuF;AAShF,MAAM,qBAAqB,GAAG,CAAC,EACpC,KAAK,EACL,cAAc,EACd,SAAS,EACT,SAAS,GACkB,EAAE,EAAE;IAC/B,MAAM,EAAE,eAAe,EAAE,kBAAkB,EAAE,GAAG,4DAA8B,EAAE,CAAC;IACjF,MAAM,aAAa,GAAG,eAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IAE5G,MAAM,qBAAqB,GAAG,mBAAW,CAAC,KAAK,IAAI,EAAE;QACnD,IAAI,aAAa,EAAE;YACjB,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;YACvB,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SACnF;aAAM;YACL,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,KAAK,CAAC,EAAE,EAAE;gBACZ,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC7D;SACF;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC;IAEtF,OAAO,CACL,8BAAC,0BAAU,IACT,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,qBAAqB,IAE7B,aAAa,CAAC,CAAC,CAAC,8BAAC,uCAAiB,OAAG,CAAC,CAAC,CAAC,8BAAC,uCAAiB,OAAG,CACnD,CACd,CAAC;AACJ,CAAC,CAAC;AA9BW,QAAA,qBAAqB,yBA8BhC","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 { Group } from \"@itwin/insights-client\";\nimport { SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport { IconButton } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useMemo } from \"react\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\n\ninterface GroupsShowHideButtonsProps {\n group: Group;\n isLoadingQuery: boolean;\n showGroup: (group: Group) => Promise<void>;\n hideGroup: (group: Group) => Promise<void>;\n}\n\nexport const GroupsShowHideButtons = ({\n group,\n isLoadingQuery,\n showGroup,\n hideGroup,\n}: GroupsShowHideButtonsProps) => {\n const { hiddenGroupsIds, setHiddenGroupsIds } = useGroupHilitedElementsContext();\n const isGroupHidden = useMemo(() => group.id && hiddenGroupsIds.has(group.id), [group.id, hiddenGroupsIds]);\n\n const toggleGroupVisibility = useCallback(async () => {\n if (isGroupHidden) {\n await showGroup(group);\n setHiddenGroupsIds(new Set([...hiddenGroupsIds].filter((id) => group.id !== id)));\n } else {\n await hideGroup(group);\n if (group.id) {\n setHiddenGroupsIds(new Set([...hiddenGroupsIds, group.id]));\n }\n }\n }, [group, hiddenGroupsIds, hideGroup, isGroupHidden, setHiddenGroupsIds, showGroup]);\n\n return (\n <IconButton\n disabled={isLoadingQuery}\n styleType=\"borderless\"\n onClick={toggleGroupVisibility}\n >\n {isGroupHidden ? <SvgVisibilityHide /> : <SvgVisibilityShow />}\n </IconButton>\n );\n};\n"]}
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import type { GroupingProps } from "./Grouping";
3
+ import "./GroupsVisualization.scss";
4
+ export interface GroupsVisualizationProps extends GroupingProps {
5
+ isNonEmphasizedSelectable?: boolean;
6
+ emphasizeElements?: boolean;
7
+ }
8
+ export declare const GroupsVisualization: ({ emphasizeElements, isNonEmphasizedSelectable, onClickGroupModify, onClickAddGroup, ...rest }: GroupsVisualizationProps) => JSX.Element;
9
+ //# sourceMappingURL=GroupsVisualization.d.ts.map
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.GroupsVisualization = void 0;
23
+ /*---------------------------------------------------------------------------------------------
24
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
25
+ * See LICENSE.md in the project root for license terms and full copyright notice.
26
+ *--------------------------------------------------------------------------------------------*/
27
+ const appui_react_1 = require("@itwin/appui-react");
28
+ const react_1 = __importStar(require("react"));
29
+ const GroupHilitedElementsContext_1 = require("./context/GroupHilitedElementsContext");
30
+ const groupsHelpers_1 = require("./groupsHelpers");
31
+ const viewerUtils_1 = require("./viewerUtils");
32
+ const Grouping_1 = require("./Grouping");
33
+ const GroupColorLegend_1 = require("./GroupColorLegend");
34
+ const GroupsVisualizationActions_1 = require("./GroupsVisualizationActions");
35
+ const GroupsShowHideButtons_1 = require("./GroupsShowHideButtons");
36
+ require("./GroupsVisualization.scss");
37
+ const GroupsVisualization = ({ emphasizeElements = true, isNonEmphasizedSelectable = false, onClickGroupModify, onClickAddGroup, ...rest }) => {
38
+ const iModelConnection = appui_react_1.useActiveIModelConnection();
39
+ if (!iModelConnection) {
40
+ throw new Error("This component requires an active iModelConnection.");
41
+ }
42
+ const [isLoadingQuery, setLoadingQuery] = react_1.useState(false);
43
+ const { hilitedElementsQueryCache, groups, hiddenGroupsIds, showGroupColor, setHiddenGroupsIds, } = GroupHilitedElementsContext_1.useGroupHilitedElementsContext();
44
+ const getHiliteIdsFromGroupsWrapper = react_1.useCallback(async (groups) => iModelConnection
45
+ ? groupsHelpers_1.getHiliteIdsFromGroups(iModelConnection, groups, hilitedElementsQueryCache)
46
+ : [], [iModelConnection, hilitedElementsQueryCache]);
47
+ const visualizeGroupColorsWrapper = react_1.useCallback(async () => {
48
+ setLoadingQuery(true);
49
+ const groupsCopy = [...groups];
50
+ await groupsHelpers_1.visualizeGroupColors(iModelConnection, groupsCopy, hiddenGroupsIds, hilitedElementsQueryCache, emphasizeElements);
51
+ isNonEmphasizedSelectable && viewerUtils_1.clearEmphasizedElements();
52
+ setLoadingQuery(false);
53
+ }, [
54
+ iModelConnection,
55
+ groups,
56
+ hiddenGroupsIds,
57
+ hilitedElementsQueryCache,
58
+ emphasizeElements,
59
+ isNonEmphasizedSelectable,
60
+ ]);
61
+ react_1.useEffect(() => {
62
+ const visualize = async () => {
63
+ if (groups.length > 0 && showGroupColor) {
64
+ await visualizeGroupColorsWrapper();
65
+ }
66
+ else {
67
+ viewerUtils_1.clearEmphasizedOverriddenElements();
68
+ }
69
+ };
70
+ void visualize();
71
+ }, [groups, showGroupColor, visualizeGroupColorsWrapper]);
72
+ const hideAllGroups = react_1.useCallback(async () => {
73
+ setLoadingQuery(true);
74
+ await groupsHelpers_1.hideGroups(iModelConnection, groups, hilitedElementsQueryCache);
75
+ setLoadingQuery(false);
76
+ }, [groups, hilitedElementsQueryCache, iModelConnection]);
77
+ const hideSingleGroupWrapper = react_1.useCallback(async (group) => {
78
+ setLoadingQuery(true);
79
+ await groupsHelpers_1.hideGroup(iModelConnection, group, hilitedElementsQueryCache);
80
+ setLoadingQuery(false);
81
+ }, [hilitedElementsQueryCache, iModelConnection]);
82
+ const showGroup = react_1.useCallback(async (viewGroup) => {
83
+ viewerUtils_1.clearHiddenElements();
84
+ // hide group Ids filter
85
+ const newHiddenGroups = groups.filter((g) => hiddenGroupsIds.has(g.id) && g.id !== viewGroup.id);
86
+ // view group Ids filter
87
+ const viewGroups = groups.filter((g) => !hiddenGroupsIds.has(g.id) || g.id === viewGroup.id);
88
+ const viewIds = await getHiliteIdsFromGroupsWrapper(viewGroups);
89
+ let hiddenIds = await getHiliteIdsFromGroupsWrapper(newHiddenGroups);
90
+ hiddenIds = hiddenIds.filter((id) => !viewIds.includes(id));
91
+ viewerUtils_1.hideElements(hiddenIds);
92
+ }, [groups, hiddenGroupsIds, getHiliteIdsFromGroupsWrapper]);
93
+ const showAll = react_1.useCallback(async () => {
94
+ setLoadingQuery(true);
95
+ viewerUtils_1.clearHiddenElements();
96
+ setHiddenGroupsIds(new Set());
97
+ const allIds = await getHiliteIdsFromGroupsWrapper(groups);
98
+ await viewerUtils_1.zoomToElements(allIds);
99
+ setLoadingQuery(false);
100
+ }, [getHiliteIdsFromGroupsWrapper, groups, setHiddenGroupsIds]);
101
+ const hideAll = react_1.useCallback(async () => {
102
+ await hideAllGroups();
103
+ setHiddenGroupsIds(new Set(groups.map((g) => g.id)));
104
+ const allIds = await getHiliteIdsFromGroupsWrapper(groups);
105
+ await viewerUtils_1.zoomToElements(allIds);
106
+ }, [
107
+ setHiddenGroupsIds,
108
+ groups,
109
+ hideAllGroups,
110
+ getHiliteIdsFromGroupsWrapper,
111
+ ]);
112
+ const onModify = react_1.useCallback(async (group, type) => {
113
+ if (!onClickGroupModify)
114
+ return;
115
+ if (group.id && hiddenGroupsIds.has(group.id)) {
116
+ await showGroup(group);
117
+ setHiddenGroupsIds(new Set([...hiddenGroupsIds].filter((id) => id !== group.id)));
118
+ }
119
+ viewerUtils_1.clearEmphasizedElements();
120
+ onClickGroupModify(group, type);
121
+ }, [hiddenGroupsIds, onClickGroupModify, setHiddenGroupsIds, showGroup]);
122
+ const onAddGroup = react_1.useCallback((type) => {
123
+ if (!onClickAddGroup)
124
+ return;
125
+ onClickAddGroup(type);
126
+ viewerUtils_1.clearEmphasizedElements();
127
+ }, [onClickAddGroup]);
128
+ const groupActionButtonRenderers = react_1.useMemo(() => [
129
+ (props) => showGroupColor ? react_1.default.createElement(GroupColorLegend_1.GroupColorLegend, { ...props, groups: groups }) : [],
130
+ (props) => (react_1.default.createElement(GroupsShowHideButtons_1.GroupsShowHideButtons, { ...props, isLoadingQuery: isLoadingQuery, showGroup: showGroup, hideGroup: hideSingleGroupWrapper })),
131
+ ].flat(), [groups, hideSingleGroupWrapper, isLoadingQuery, showGroup, showGroupColor]);
132
+ return (react_1.default.createElement("div", { className: "groups-vis-container" },
133
+ react_1.default.createElement(GroupsVisualizationActions_1.GroupVisualizationActions, { isLoadingQuery: isLoadingQuery, showAll: showAll, hideAll: hideAll }),
134
+ react_1.default.createElement(Grouping_1.Groupings, { onClickGroupModify: onModify, onClickAddGroup: onAddGroup, actionButtonRenderers: groupActionButtonRenderers, ...rest, disableActions: isLoadingQuery })));
135
+ };
136
+ exports.GroupsVisualization = GroupsVisualization;
137
+ //# sourceMappingURL=GroupsVisualization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupsVisualization.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupsVisualization.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport type { Group } from \"@itwin/insights-client\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport {\n getHiliteIdsFromGroups,\n hideGroup,\n hideGroups,\n visualizeGroupColors,\n} from \"./groupsHelpers\";\nimport {\n clearEmphasizedElements,\n clearEmphasizedOverriddenElements,\n clearHiddenElements,\n hideElements,\n zoomToElements,\n} from \"./viewerUtils\";\nimport type { ActionButtonRenderer, ActionButtonRendererProps, GroupingProps } from \"./Grouping\";\nimport { Groupings } from \"./Grouping\";\nimport { GroupColorLegend } from \"./GroupColorLegend\";\nimport { GroupVisualizationActions } from \"./GroupsVisualizationActions\";\nimport { GroupsShowHideButtons } from \"./GroupsShowHideButtons\";\nimport \"./GroupsVisualization.scss\";\n\nexport interface GroupsVisualizationProps extends GroupingProps {\n isNonEmphasizedSelectable?: boolean;\n emphasizeElements?: boolean;\n}\n\nexport const GroupsVisualization = ({\n emphasizeElements = true,\n isNonEmphasizedSelectable = false,\n onClickGroupModify,\n onClickAddGroup,\n ...rest\n}: GroupsVisualizationProps) => {\n const iModelConnection = useActiveIModelConnection();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const [isLoadingQuery, setLoadingQuery] = useState<boolean>(false);\n const {\n hilitedElementsQueryCache,\n groups,\n hiddenGroupsIds,\n showGroupColor,\n setHiddenGroupsIds,\n } = useGroupHilitedElementsContext();\n\n const getHiliteIdsFromGroupsWrapper = useCallback(\n async (groups: Group[]): Promise<string[]> =>\n iModelConnection\n ? getHiliteIdsFromGroups(\n iModelConnection,\n groups,\n hilitedElementsQueryCache\n )\n : [],\n [iModelConnection, hilitedElementsQueryCache]\n );\n\n const visualizeGroupColorsWrapper = useCallback(\n async () => {\n setLoadingQuery(true);\n const groupsCopy = [...groups];\n await visualizeGroupColors(\n iModelConnection,\n groupsCopy,\n hiddenGroupsIds,\n hilitedElementsQueryCache,\n emphasizeElements\n );\n isNonEmphasizedSelectable && clearEmphasizedElements();\n setLoadingQuery(false);\n },\n [\n iModelConnection,\n groups,\n hiddenGroupsIds,\n hilitedElementsQueryCache,\n emphasizeElements,\n isNonEmphasizedSelectable,\n ]\n );\n\n useEffect(() => {\n const visualize = async () => {\n if (groups.length > 0 && showGroupColor) {\n await visualizeGroupColorsWrapper();\n } else {\n clearEmphasizedOverriddenElements();\n }\n };\n void visualize();\n }, [groups, showGroupColor, visualizeGroupColorsWrapper]);\n\n const hideAllGroups = useCallback(\n async () => {\n setLoadingQuery(true);\n await hideGroups(iModelConnection, groups, hilitedElementsQueryCache);\n setLoadingQuery(false);\n },\n [groups, hilitedElementsQueryCache, iModelConnection]\n );\n\n const hideSingleGroupWrapper = useCallback(\n async (group: Group) => {\n setLoadingQuery(true);\n await hideGroup(iModelConnection, group, hilitedElementsQueryCache);\n setLoadingQuery(false);\n },\n [hilitedElementsQueryCache, iModelConnection]\n );\n\n const showGroup = useCallback(\n async (viewGroup: Group) => {\n clearHiddenElements();\n\n // hide group Ids filter\n const newHiddenGroups: Group[] = groups.filter((g) => hiddenGroupsIds.has(g.id) && g.id !== viewGroup.id);\n\n // view group Ids filter\n const viewGroups = groups.filter((g) => !hiddenGroupsIds.has(g.id) || g.id === viewGroup.id);\n const viewIds = await getHiliteIdsFromGroupsWrapper(viewGroups);\n\n let hiddenIds = await getHiliteIdsFromGroupsWrapper(newHiddenGroups);\n hiddenIds = hiddenIds.filter((id) => !viewIds.includes(id));\n hideElements(hiddenIds);\n },\n [groups, hiddenGroupsIds, getHiliteIdsFromGroupsWrapper]\n );\n\n const showAll = useCallback(async () => {\n setLoadingQuery(true);\n\n clearHiddenElements();\n setHiddenGroupsIds(new Set());\n const allIds = await getHiliteIdsFromGroupsWrapper(groups);\n await zoomToElements(allIds);\n\n setLoadingQuery(false);\n }, [getHiliteIdsFromGroupsWrapper, groups, setHiddenGroupsIds]);\n\n const hideAll = useCallback(async () => {\n await hideAllGroups();\n setHiddenGroupsIds(\n new Set(groups.map((g) => g.id))\n );\n const allIds = await getHiliteIdsFromGroupsWrapper(groups);\n await zoomToElements(allIds);\n }, [\n setHiddenGroupsIds,\n groups,\n hideAllGroups,\n getHiliteIdsFromGroupsWrapper,\n ]);\n\n const onModify = useCallback(\n async (group: Group, type: string) => {\n if (!onClickGroupModify) return;\n if (group.id && hiddenGroupsIds.has(group.id)) {\n await showGroup(group);\n setHiddenGroupsIds(new Set([...hiddenGroupsIds].filter((id) => id !== group.id)));\n }\n clearEmphasizedElements();\n onClickGroupModify(group, type);\n },\n [hiddenGroupsIds, onClickGroupModify, setHiddenGroupsIds, showGroup]\n );\n\n const onAddGroup = useCallback(\n (type: string) => {\n if (!onClickAddGroup) return;\n onClickAddGroup(type);\n clearEmphasizedElements();\n },\n [onClickAddGroup]\n );\n\n const groupActionButtonRenderers: ActionButtonRenderer[] = useMemo(() => [\n (props: ActionButtonRendererProps) =>\n showGroupColor ? <GroupColorLegend {...props} groups={groups} /> : [],\n (props: ActionButtonRendererProps) => (\n <GroupsShowHideButtons\n {...props}\n isLoadingQuery={isLoadingQuery}\n showGroup={showGroup}\n hideGroup={hideSingleGroupWrapper}\n />\n ),\n ].flat(), [groups, hideSingleGroupWrapper, isLoadingQuery, showGroup, showGroupColor]);\n\n return (\n <div className=\"groups-vis-container\">\n <GroupVisualizationActions\n isLoadingQuery={isLoadingQuery}\n showAll={showAll}\n hideAll={hideAll}\n />\n <Groupings\n onClickGroupModify={onModify}\n onClickAddGroup={onAddGroup}\n actionButtonRenderers={groupActionButtonRenderers}\n {...rest}\n disableActions={isLoadingQuery}\n />\n </div>\n );\n};\n"]}
@@ -0,0 +1,12 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ @import "~@itwin/itwinui-css/scss/variables";
6
+
7
+ .groups-vis-container {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: $iui-baseline;
11
+ flex-grow: 1;
12
+ }
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import "./GroupsVisualizationActions.scss";
3
+ interface GroupVisualizationActionsProps {
4
+ isLoadingQuery: boolean;
5
+ showAll: () => Promise<void>;
6
+ hideAll: () => Promise<void>;
7
+ }
8
+ export declare const GroupVisualizationActions: ({ isLoadingQuery, showAll, hideAll, }: GroupVisualizationActionsProps) => JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=GroupsVisualizationActions.d.ts.map
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GroupVisualizationActions = void 0;
7
+ /*---------------------------------------------------------------------------------------------
8
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
9
+ * See LICENSE.md in the project root for license terms and full copyright notice.
10
+ *--------------------------------------------------------------------------------------------*/
11
+ const itwinui_react_1 = require("@itwin/itwinui-react");
12
+ const react_1 = __importDefault(require("react"));
13
+ const ToggleGroupVisibility_1 = require("./ToggleGroupVisibility");
14
+ const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
15
+ require("./GroupsVisualizationActions.scss");
16
+ const GroupHilitedElementsContext_1 = require("./context/GroupHilitedElementsContext");
17
+ const GroupVisualizationActions = ({ isLoadingQuery, showAll, hideAll, }) => {
18
+ const { showGroupColor, setShowGroupColor, } = GroupHilitedElementsContext_1.useGroupHilitedElementsContext();
19
+ return (react_1.default.createElement(itwinui_react_1.ButtonGroup, { className: "gmw-visual-buttons" },
20
+ react_1.default.createElement(ToggleGroupVisibility_1.ToggleGroupVisibility, { isLoadingQuery: isLoadingQuery, showGroupColor: showGroupColor, setShowGroupColor: setShowGroupColor }),
21
+ react_1.default.createElement(itwinui_react_1.IconButton, { title: "Show All", onClick: showAll, disabled: isLoadingQuery, styleType: "borderless" },
22
+ react_1.default.createElement(itwinui_icons_react_1.SvgVisibilityShow, null)),
23
+ react_1.default.createElement(itwinui_react_1.IconButton, { title: "Hide All", onClick: hideAll, disabled: isLoadingQuery, styleType: "borderless" },
24
+ react_1.default.createElement(itwinui_icons_react_1.SvgVisibilityHide, null))));
25
+ };
26
+ exports.GroupVisualizationActions = GroupVisualizationActions;
27
+ //# sourceMappingURL=GroupsVisualizationActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupsVisualizationActions.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupsVisualizationActions.tsx"],"names":[],"mappings":";;;;;;AAAA;;;+FAG+F;AAC/F,wDAA+D;AAC/D,kDAA0B;AAC1B,mEAAgE;AAChE,oEAAkF;AAClF,6CAA2C;AAC3C,uFAAuF;AAQhF,MAAM,yBAAyB,GAAG,CAAC,EACxC,cAAc,EACd,OAAO,EACP,OAAO,GACwB,EAAE,EAAE;IACnC,MAAM,EACJ,cAAc,EACd,iBAAiB,GAClB,GAAG,4DAA8B,EAAE,CAAC;IAErC,OAAO,CACL,8BAAC,2BAAW,IAAC,SAAS,EAAC,oBAAoB;QACzC,8BAAC,6CAAqB,IACpB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,GACpC;QACF,8BAAC,0BAAU,IACT,KAAK,EAAC,UAAU,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAC,YAAY;YAEtB,8BAAC,uCAAiB,OAAG,CACV;QACb,8BAAC,0BAAU,IACT,KAAK,EAAC,UAAU,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAC,YAAY;YAEtB,8BAAC,uCAAiB,OAAG,CACV,CACD,CACf,CAAC;AAEJ,CAAC,CAAC;AApCW,QAAA,yBAAyB,6BAoCpC","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 { ButtonGroup, IconButton } from \"@itwin/itwinui-react\";\nimport React from \"react\";\nimport { ToggleGroupVisibility } from \"./ToggleGroupVisibility\";\nimport { SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport \"./GroupsVisualizationActions.scss\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\n\ninterface GroupVisualizationActionsProps {\n isLoadingQuery: boolean;\n showAll: () => Promise<void>;\n hideAll: () => Promise<void>;\n}\n\nexport const GroupVisualizationActions = ({\n isLoadingQuery,\n showAll,\n hideAll,\n}: GroupVisualizationActionsProps) => {\n const {\n showGroupColor,\n setShowGroupColor,\n } = useGroupHilitedElementsContext();\n\n return (\n <ButtonGroup className=\"gmw-visual-buttons\">\n <ToggleGroupVisibility\n isLoadingQuery={isLoadingQuery}\n showGroupColor={showGroupColor}\n setShowGroupColor={setShowGroupColor}\n />\n <IconButton\n title=\"Show All\"\n onClick={showAll}\n disabled={isLoadingQuery}\n styleType=\"borderless\"\n >\n <SvgVisibilityShow />\n </IconButton>\n <IconButton\n title=\"Hide All\"\n onClick={hideAll}\n disabled={isLoadingQuery}\n styleType=\"borderless\"\n >\n <SvgVisibilityHide />\n </IconButton>\n </ButtonGroup>\n );\n\n};\n\n"]}
@@ -0,0 +1,9 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ @import "~@itwin/itwinui-css/scss/variables";
6
+
7
+ .gmw-visual-buttons {
8
+ flex-wrap: wrap;
9
+ }
@@ -46,7 +46,7 @@ const fetchMappings = async (setMappings, iModelId, setIsLoading, getAccessToken
46
46
  setIsLoading(true);
47
47
  const accessToken = await getAccessToken();
48
48
  const mappings = await mappingsClient.getMappings(accessToken, iModelId);
49
- setMappings(mappings);
49
+ setMappings(mappings.sort((a, b) => a.mappingName.localeCompare(b.mappingName)));
50
50
  }
51
51
  catch (error) {
52
52
  utils_1.handleError(error.status);
@@ -75,7 +75,7 @@ const Mappings = ({ onClickAddMapping, onClickMappingTitle, onClickMappingModify
75
75
  const [showBlockingOverlay, setShowBlockingOverlay] = react_1.useState(false);
76
76
  const [isLoading, setIsLoading] = react_1.useState(true);
77
77
  const [mappings, setMappings] = react_1.useState([]);
78
- const displayStrings = { ...defaultDisplayStrings, ...userDisplayStrings };
78
+ const displayStrings = react_1.default.useMemo(() => ({ ...defaultDisplayStrings, ...userDisplayStrings }), [userDisplayStrings]);
79
79
  react_1.useEffect(() => {
80
80
  void fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient);
81
81
  }, [getAccessToken, mappingClient, iModelId, setIsLoading]);
@@ -95,7 +95,6 @@ const Mappings = ({ onClickAddMapping, onClickMappingTitle, onClickMappingModify
95
95
  react_1.default.createElement(itwinui_react_1.IconButton, { title: "Refresh", onClick: refresh, disabled: isLoading, styleType: 'borderless' },
96
96
  react_1.default.createElement(itwinui_icons_react_1.SvgRefresh, null))),
97
97
  isLoading ? (react_1.default.createElement(utils_1.LoadingOverlay, null)) : mappings.length === 0 ? (react_1.default.createElement(utils_1.EmptyMessage, { message: `No ${displayStrings.mappings} available.` })) : (react_1.default.createElement("div", { className: "gmw-mappings-list" }, mappings
98
- .sort((a, b) => { var _a; return (_a = a.mappingName.localeCompare(b.mappingName)) !== null && _a !== void 0 ? _a : 1; })
99
98
  .map((mapping) => {
100
99
  var _a, _b;
101
100
  return (react_1.default.createElement(HorizontalTile_1.HorizontalTile, { key: mapping.id, title: mapping.mappingName ? mapping.mappingName : "Untitled", subText: (_a = mapping.description) !== null && _a !== void 0 ? _a : "", subtextToolTip: (_b = mapping.description) !== null && _b !== void 0 ? _b : "", titleTooltip: mapping.mappingName, onClickTitle: () => onClickMappingTitle ? onClickMappingTitle(mapping) : undefined, actionGroup: react_1.default.createElement(itwinui_react_1.DropdownMenu, { menuItems: (close) => [
@@ -1 +1 @@
1
- {"version":3,"file":"Mapping.js","sourceRoot":"","sources":["../../../../src/widget/components/Mapping.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgImport,\n SvgMore,\n SvgProcess,\n SvgRefresh,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n Surface,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n EmptyMessage,\n handleError,\n LoadingOverlay,\n} from \"./utils\";\nimport \"./Mapping.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport { MappingImportWizardModal } from \"./MappingImportWizardModal\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport type { IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport { BlockingOverlay } from \"./BlockingOverlay\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport type { GetAccessTokenFn } from \"./context/GroupingApiConfigContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CreateTypeFromInterface } from \"../utils\";\n\nexport type IMappingTyped = CreateTypeFromInterface<Mapping>;\n\nconst defaultDisplayStrings = {\n mappings: \"Mappings\",\n};\nexport interface MappingsProps {\n onClickAddMapping?: () => void;\n onClickMappingTitle?: (mapping: Mapping) => void;\n onClickMappingModify?: (mapping: Mapping) => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nconst fetchMappings = async (\n setMappings: React.Dispatch<React.SetStateAction<Mapping[]>>,\n iModelId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient\n) => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const mappings = await mappingsClient.getMappings(accessToken, iModelId);\n setMappings(mappings);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nconst toggleExtraction = async (\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient,\n iModelId: string,\n mapping: Mapping\n) => {\n try {\n const newState = mapping.extractionEnabled;\n const accessToken = await getAccessToken();\n await mappingsClient.updateMapping(accessToken, iModelId, mapping.id, {\n extractionEnabled: newState,\n });\n } catch (error: any) {\n handleError(error.status);\n }\n};\n\nexport const Mappings = ({\n onClickAddMapping,\n onClickMappingTitle,\n onClickMappingModify,\n displayStrings: userDisplayStrings,\n}: MappingsProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [showDeleteModal, setShowDeleteModal] = useState<Mapping | undefined>(undefined);\n const [showImportModal, setShowImportModal] = useState<boolean>(false);\n const [showBlockingOverlay, setShowBlockingOverlay] =\n useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [mappings, setMappings] = useState<Mapping[]>([]);\n const displayStrings = { ...defaultDisplayStrings, ...userDisplayStrings };\n\n useEffect(() => {\n void fetchMappings(\n setMappings,\n iModelId,\n setIsLoading,\n getAccessToken,\n mappingClient\n );\n }, [getAccessToken, mappingClient, iModelId, setIsLoading]);\n\n const refresh = useCallback(async () => {\n setMappings([]);\n await fetchMappings(\n setMappings,\n iModelId,\n setIsLoading,\n getAccessToken,\n mappingClient\n );\n }, [getAccessToken, mappingClient, iModelId, setMappings]);\n\n return (\n <>\n <BlockingOverlay isVisible={showBlockingOverlay} />\n <Surface className=\"gmw-mappings-container\">\n <div className=\"gmw-table-toolbar\">\n <div className=\"gmw-button-spacing\">\n {onClickAddMapping &&\n <Button\n startIcon={<SvgAdd />}\n onClick={onClickAddMapping}\n styleType=\"high-visibility\"\n >\n New\n </Button>\n }\n <IconButton\n title={`Import ${displayStrings.mappings}`}\n onClick={() => setShowImportModal(true)}\n >\n <SvgImport />\n </IconButton>\n </div>\n <IconButton\n title=\"Refresh\"\n onClick={refresh}\n disabled={isLoading}\n styleType='borderless'\n >\n <SvgRefresh />\n </IconButton>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : mappings.length === 0 ? (\n <EmptyMessage message={`No ${displayStrings.mappings} available.`} />\n ) : (\n <div className=\"gmw-mappings-list\">\n {mappings\n .sort(\n (a, b) => a.mappingName.localeCompare(b.mappingName) ?? 1\n )\n .map((mapping) => (\n <HorizontalTile\n key={mapping.id}\n title={\n mapping.mappingName ? mapping.mappingName : \"Untitled\"\n }\n subText={mapping.description ?? \"\"}\n subtextToolTip={mapping.description ?? \"\"}\n titleTooltip={mapping.mappingName}\n onClickTitle={() => onClickMappingTitle ? onClickMappingTitle(mapping) : undefined}\n actionGroup={\n <DropdownMenu\n menuItems={(close: () => void) => [\n onClickMappingModify ? (\n <MenuItem\n key={0}\n onClick={() => {\n onClickMappingModify(mapping);\n close();\n }}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>\n ) : [],\n <MenuItem\n key={1}\n onClick={async () => {\n setShowBlockingOverlay(true);\n close();\n await toggleExtraction(\n getAccessToken,\n mappingClient,\n iModelId,\n mapping\n );\n await refresh();\n setShowBlockingOverlay(false);\n }}\n icon={<SvgProcess />}\n >\n {mapping.extractionEnabled\n ? \"Disable extraction\"\n : \"Enable extraction\"}\n </MenuItem>,\n <MenuItem\n key={2}\n onClick={() => {\n setShowDeleteModal(mapping);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ].flatMap((m) => m)}\n >\n <IconButton styleType=\"borderless\">\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n }\n />\n ))}\n </div>\n )}\n </Surface>\n <DeleteModal\n entityName={showDeleteModal?.mappingName}\n onClose={() => setShowDeleteModal(undefined)}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteMapping(\n accessToken,\n iModelId,\n showDeleteModal?.id ?? \"\"\n );\n }}\n refresh={refresh}\n />\n <MappingImportWizardModal\n show={showImportModal}\n setShow={setShowImportModal}\n onFinish={refresh}\n displayStrings={displayStrings}\n />\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"Mapping.js","sourceRoot":"","sources":["../../../../src/widget/components/Mapping.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgImport,\n SvgMore,\n SvgProcess,\n SvgRefresh,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n Surface,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n EmptyMessage,\n handleError,\n LoadingOverlay,\n} from \"./utils\";\nimport \"./Mapping.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport { MappingImportWizardModal } from \"./MappingImportWizardModal\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport type { IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport { BlockingOverlay } from \"./BlockingOverlay\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport type { GetAccessTokenFn } from \"./context/GroupingApiConfigContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CreateTypeFromInterface } from \"../utils\";\n\nexport type IMappingTyped = CreateTypeFromInterface<Mapping>;\n\nconst defaultDisplayStrings = {\n mappings: \"Mappings\",\n};\nexport interface MappingsProps {\n onClickAddMapping?: () => void;\n onClickMappingTitle?: (mapping: Mapping) => void;\n onClickMappingModify?: (mapping: Mapping) => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nconst fetchMappings = async (\n setMappings: React.Dispatch<React.SetStateAction<Mapping[]>>,\n iModelId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient\n) => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const mappings = await mappingsClient.getMappings(accessToken, iModelId);\n setMappings(mappings.sort((a, b) => a.mappingName.localeCompare(b.mappingName)));\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nconst toggleExtraction = async (\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient,\n iModelId: string,\n mapping: Mapping\n) => {\n try {\n const newState = mapping.extractionEnabled;\n const accessToken = await getAccessToken();\n await mappingsClient.updateMapping(accessToken, iModelId, mapping.id, {\n extractionEnabled: newState,\n });\n } catch (error: any) {\n handleError(error.status);\n }\n};\n\nexport const Mappings = ({\n onClickAddMapping,\n onClickMappingTitle,\n onClickMappingModify,\n displayStrings: userDisplayStrings,\n}: MappingsProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [showDeleteModal, setShowDeleteModal] = useState<Mapping | undefined>(undefined);\n const [showImportModal, setShowImportModal] = useState<boolean>(false);\n const [showBlockingOverlay, setShowBlockingOverlay] =\n useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [mappings, setMappings] = useState<Mapping[]>([]);\n const displayStrings = React.useMemo(\n () => ({ ...defaultDisplayStrings, ...userDisplayStrings }),\n [userDisplayStrings]\n );\n\n useEffect(() => {\n void fetchMappings(\n setMappings,\n iModelId,\n setIsLoading,\n getAccessToken,\n mappingClient\n );\n }, [getAccessToken, mappingClient, iModelId, setIsLoading]);\n\n const refresh = useCallback(async () => {\n setMappings([]);\n await fetchMappings(\n setMappings,\n iModelId,\n setIsLoading,\n getAccessToken,\n mappingClient\n );\n }, [getAccessToken, mappingClient, iModelId, setMappings]);\n\n return (\n <>\n <BlockingOverlay isVisible={showBlockingOverlay} />\n <Surface className=\"gmw-mappings-container\">\n <div className=\"gmw-table-toolbar\">\n <div className=\"gmw-button-spacing\">\n {onClickAddMapping &&\n <Button\n startIcon={<SvgAdd />}\n onClick={onClickAddMapping}\n styleType=\"high-visibility\"\n >\n New\n </Button>\n }\n <IconButton\n title={`Import ${displayStrings.mappings}`}\n onClick={() => setShowImportModal(true)}\n >\n <SvgImport />\n </IconButton>\n </div>\n <IconButton\n title=\"Refresh\"\n onClick={refresh}\n disabled={isLoading}\n styleType='borderless'\n >\n <SvgRefresh />\n </IconButton>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : mappings.length === 0 ? (\n <EmptyMessage message={`No ${displayStrings.mappings} available.`} />\n ) : (\n <div className=\"gmw-mappings-list\">\n {mappings\n .map((mapping) => (\n <HorizontalTile\n key={mapping.id}\n title={\n mapping.mappingName ? mapping.mappingName : \"Untitled\"\n }\n subText={mapping.description ?? \"\"}\n subtextToolTip={mapping.description ?? \"\"}\n titleTooltip={mapping.mappingName}\n onClickTitle={() => onClickMappingTitle ? onClickMappingTitle(mapping) : undefined}\n actionGroup={\n <DropdownMenu\n menuItems={(close: () => void) => [\n onClickMappingModify ? (\n <MenuItem\n key={0}\n onClick={() => {\n onClickMappingModify(mapping);\n close();\n }}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>\n ) : [],\n <MenuItem\n key={1}\n onClick={async () => {\n setShowBlockingOverlay(true);\n close();\n await toggleExtraction(\n getAccessToken,\n mappingClient,\n iModelId,\n mapping\n );\n await refresh();\n setShowBlockingOverlay(false);\n }}\n icon={<SvgProcess />}\n >\n {mapping.extractionEnabled\n ? \"Disable extraction\"\n : \"Enable extraction\"}\n </MenuItem>,\n <MenuItem\n key={2}\n onClick={() => {\n setShowDeleteModal(mapping);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ].flatMap((m) => m)}\n >\n <IconButton styleType=\"borderless\">\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n }\n />\n ))}\n </div>\n )}\n </Surface>\n <DeleteModal\n entityName={showDeleteModal?.mappingName}\n onClose={() => setShowDeleteModal(undefined)}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteMapping(\n accessToken,\n iModelId,\n showDeleteModal?.id ?? \"\"\n );\n }}\n refresh={refresh}\n />\n <MappingImportWizardModal\n show={showImportModal}\n setShow={setShowImportModal}\n onFinish={refresh}\n displayStrings={displayStrings}\n />\n </>\n );\n};\n"]}
@@ -49,7 +49,7 @@ const MappingAction = ({ mapping, onSaveSuccess, onClickCancel, displayStrings:
49
49
  });
50
50
  const [validator, showValidationMessage] = useValidator_1.default();
51
51
  const [isLoading, setIsLoading] = react_1.useState(false);
52
- const displayStrings = { ...defaultDisplayStrings, ...userDisplayStrings };
52
+ const displayStrings = react_1.default.useMemo(() => ({ ...defaultDisplayStrings, ...userDisplayStrings }), [userDisplayStrings]);
53
53
  const onSave = async () => {
54
54
  var _a, _b, _c;
55
55
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"MappingAction.js","sourceRoot":"","sources":["../../../../src/widget/components/MappingAction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Fieldset, LabeledInput, Small, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, handleInputChange } from \"./utils\";\nimport \"./MappingAction.scss\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport type { Mapping } from \"@itwin/insights-client\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nconst defaultDisplayStrings = {\n mappingDetails: \"Mapping Details\",\n};\n\nexport interface MappingActionProps {\n mapping?: Mapping;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const MappingAction = ({ mapping, onSaveSuccess, onClickCancel, displayStrings: userDisplayStrings }: MappingActionProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [values, setValues] = useState({\n name: mapping?.mappingName ?? \"\",\n description: mapping?.description ?? \"\",\n extractionEnabled: mapping?.extractionEnabled ?? true,\n });\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const displayStrings = { ...defaultDisplayStrings, ...userDisplayStrings };\n\n const onSave = async () => {\n try {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n setIsLoading(true);\n const accessToken = await getAccessToken();\n mapping\n ? await mappingClient.updateMapping(accessToken, iModelId, mapping.id, {\n mappingName: values.name,\n description: values.description,\n extractionEnabled: values.extractionEnabled,\n })\n : await mappingClient.createMapping(accessToken, iModelId, {\n mappingName: values.name,\n description: values.description,\n extractionEnabled: values.extractionEnabled,\n });\n setValues({\n name: mapping?.mappingName ?? \"\",\n description: mapping?.description ?? \"\",\n extractionEnabled: mapping?.extractionEnabled ?? true,\n });\n onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <div className='gmw-details-form-container'>\n <Fieldset legend={displayStrings.mappingDetails} className='gmw-details-form'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='name'\n name='name'\n label='Name'\n value={values.name}\n required\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", values.name, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", values.name, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={values.description}\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n }}\n />\n <ToggleSwitch\n id='extractionEnabled'\n name='extractionEnabled'\n label='Extract data from iModel'\n labelPosition=\"right\"\n checked={values.extractionEnabled}\n onChange={(event) => {\n setValues({ ...values, extractionEnabled: event.currentTarget.checked });\n }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!values.name}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"MappingAction.js","sourceRoot":"","sources":["../../../../src/widget/components/MappingAction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Fieldset, LabeledInput, Small, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, handleInputChange } from \"./utils\";\nimport \"./MappingAction.scss\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport type { Mapping } from \"@itwin/insights-client\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nconst defaultDisplayStrings = {\n mappingDetails: \"Mapping Details\",\n};\n\nexport interface MappingActionProps {\n mapping?: Mapping;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const MappingAction = ({ mapping, onSaveSuccess, onClickCancel, displayStrings: userDisplayStrings }: MappingActionProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [values, setValues] = useState({\n name: mapping?.mappingName ?? \"\",\n description: mapping?.description ?? \"\",\n extractionEnabled: mapping?.extractionEnabled ?? true,\n });\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const displayStrings = React.useMemo(\n () => ({ ...defaultDisplayStrings, ...userDisplayStrings }),\n [userDisplayStrings]\n );\n\n const onSave = async () => {\n try {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n setIsLoading(true);\n const accessToken = await getAccessToken();\n mapping\n ? await mappingClient.updateMapping(accessToken, iModelId, mapping.id, {\n mappingName: values.name,\n description: values.description,\n extractionEnabled: values.extractionEnabled,\n })\n : await mappingClient.createMapping(accessToken, iModelId, {\n mappingName: values.name,\n description: values.description,\n extractionEnabled: values.extractionEnabled,\n });\n setValues({\n name: mapping?.mappingName ?? \"\",\n description: mapping?.description ?? \"\",\n extractionEnabled: mapping?.extractionEnabled ?? true,\n });\n onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <div className='gmw-details-form-container'>\n <Fieldset legend={displayStrings.mappingDetails} className='gmw-details-form'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='name'\n name='name'\n label='Name'\n value={values.name}\n required\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", values.name, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", values.name, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={values.description}\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n }}\n />\n <ToggleSwitch\n id='extractionEnabled'\n name='extractionEnabled'\n label='Extract data from iModel'\n labelPosition=\"right\"\n checked={values.extractionEnabled}\n onChange={(event) => {\n setValues({ ...values, extractionEnabled: event.currentTarget.checked });\n }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!values.name}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
@@ -43,7 +43,7 @@ const MappingImportWizardModal = ({ show, setShow, onFinish, displayStrings: use
43
43
  const [selectedIModelId, setSelectedIModelId] = react_1.useState("");
44
44
  const [selectedMappings, setSelectedMappings] = react_1.useState([]);
45
45
  const [importing, setImporting] = react_1.useState(false);
46
- const displayStrings = { ...defaultDisplayStrings, ...userDisplayStrings };
46
+ const displayStrings = react_1.default.useMemo(() => ({ ...defaultDisplayStrings, ...userDisplayStrings }), [userDisplayStrings]);
47
47
  const steps = react_1.useRef([
48
48
  {
49
49
  name: "Select source project",
@@ -1 +1 @@
1
- {"version":3,"file":"MappingImportWizardModal.js","sourceRoot":"","sources":["../../../../src/widget/components/MappingImportWizardModal.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React, { useRef, useState } from \"react\";\nimport type { StepProperties } from \"@itwin/itwinui-react\";\nimport { Modal, Wizard } from \"@itwin/itwinui-react\";\nimport SelectProject from \"./SelectProject\";\nimport \"./MappingImportWizardModal.scss\";\nimport SelectIModel from \"./SelectIModel\";\nimport SelectMappings from \"./SelectMappings\";\nimport type { IMappingTyped } from \"./Mapping\";\nimport ConfirmMappingImport from \"./ConfirmMappingsImport\";\n\nconst defaultDisplayStrings = {\n mappings: \"Mappings\",\n};\ninterface MappingImportWizardModalProps {\n show: boolean;\n setShow: React.Dispatch<React.SetStateAction<boolean>>;\n onFinish: () => Promise<void>;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const MappingImportWizardModal = ({\n show,\n setShow,\n onFinish,\n displayStrings: userDisplayStrings,\n}: MappingImportWizardModalProps) => {\n const [currentStep, setCurrentStep] = useState<number>(0);\n const [selectedProjectId, setSelectedProjectId] = useState<string>(\"\");\n const [selectedIModelId, setSelectedIModelId] = useState<string>(\"\");\n const [selectedMappings, setSelectedMappings] = useState<IMappingTyped[]>([]);\n const [importing, setImporting] = useState<boolean>(false);\n\n const displayStrings = { ...defaultDisplayStrings, ...userDisplayStrings };\n\n const steps = useRef<StepProperties[]>([\n {\n name: \"Select source project\",\n description: `Select the source project to bring your ${displayStrings.mappings} from.`,\n },\n {\n name: \"Select iModel\",\n description: \"Select an iModel within the project you have selected.\",\n },\n {\n name: `Select ${displayStrings.mappings}`,\n description: `Select one or more ${displayStrings.mappings} to import.`,\n },\n {\n name: \"Rename & Confirm\",\n description:\n \"Rename and confirm your selections. Click import when finished.\",\n },\n ]);\n\n const onClose = async () => {\n setShow(false);\n setCurrentStep(0);\n await onFinish();\n };\n\n return (\n <Modal\n title={`Import ${displayStrings.mappings}`}\n modalRootId='grouping-mapping-widget'\n isOpen={show}\n closeOnEsc={false}\n closeOnExternalClick={false}\n isDismissible={!importing}\n styleType='fullPage'\n onClose={async () => {\n await onClose();\n }}\n >\n <div className='gmw-import-wizard-body-container'>\n <Wizard\n currentStep={currentStep}\n steps={steps.current}\n onStepClick={\n importing ? undefined : (index: number) => setCurrentStep(index)\n }\n />\n\n {(() => {\n switch (currentStep) {\n case 0:\n return (\n <SelectProject\n onSelect={(project) => {\n setSelectedProjectId(project.id);\n setCurrentStep(1);\n }}\n onCancel={onClose}\n />\n );\n case 1:\n return (\n <SelectIModel\n projectId={selectedProjectId}\n onSelect={(iModel) => {\n setSelectedIModelId(iModel.id);\n setCurrentStep(2);\n }}\n backFn={() => setCurrentStep(currentStep - 1)}\n onCancel={onClose}\n />\n );\n case 2:\n case 3:\n // Preserve table state within Select Mappings\n return (\n <>\n <div\n style={{ display: currentStep === 2 ? \"flex\" : \"none\" }}\n className=\"gmw-mappings-container\"\n >\n <SelectMappings\n iModelId={selectedIModelId}\n onSelect={(selectedMappings) => {\n setSelectedMappings(selectedMappings);\n setCurrentStep(3);\n }}\n onCancel={onClose}\n backFn={() => setCurrentStep(currentStep - 1)}\n displayStrings={displayStrings}\n />\n </div>\n {currentStep === 3 && (\n <ConfirmMappingImport\n sourceiModelId={selectedIModelId}\n selectedMappings={selectedMappings}\n importing={importing}\n setImporting={setImporting}\n setSelectedMappings={setSelectedMappings}\n backFn={() => setCurrentStep(currentStep - 1)}\n onCancel={onClose}\n onFinish={async () => {\n await onClose();\n setImporting(false);\n }}\n displayStrings={displayStrings}\n />\n )}\n </>\n );\n default:\n return null;\n }\n })()}\n </div>\n </Modal>\n );\n};\n"]}
1
+ {"version":3,"file":"MappingImportWizardModal.js","sourceRoot":"","sources":["../../../../src/widget/components/MappingImportWizardModal.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React, { useRef, useState } from \"react\";\nimport type { StepProperties } from \"@itwin/itwinui-react\";\nimport { Modal, Wizard } from \"@itwin/itwinui-react\";\nimport SelectProject from \"./SelectProject\";\nimport \"./MappingImportWizardModal.scss\";\nimport SelectIModel from \"./SelectIModel\";\nimport SelectMappings from \"./SelectMappings\";\nimport type { IMappingTyped } from \"./Mapping\";\nimport ConfirmMappingImport from \"./ConfirmMappingsImport\";\n\nconst defaultDisplayStrings = {\n mappings: \"Mappings\",\n};\ninterface MappingImportWizardModalProps {\n show: boolean;\n setShow: React.Dispatch<React.SetStateAction<boolean>>;\n onFinish: () => Promise<void>;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const MappingImportWizardModal = ({\n show,\n setShow,\n onFinish,\n displayStrings: userDisplayStrings,\n}: MappingImportWizardModalProps) => {\n const [currentStep, setCurrentStep] = useState<number>(0);\n const [selectedProjectId, setSelectedProjectId] = useState<string>(\"\");\n const [selectedIModelId, setSelectedIModelId] = useState<string>(\"\");\n const [selectedMappings, setSelectedMappings] = useState<IMappingTyped[]>([]);\n const [importing, setImporting] = useState<boolean>(false);\n\n const displayStrings = React.useMemo(\n () => ({ ...defaultDisplayStrings, ...userDisplayStrings }),\n [userDisplayStrings]\n );\n\n const steps = useRef<StepProperties[]>([\n {\n name: \"Select source project\",\n description: `Select the source project to bring your ${displayStrings.mappings} from.`,\n },\n {\n name: \"Select iModel\",\n description: \"Select an iModel within the project you have selected.\",\n },\n {\n name: `Select ${displayStrings.mappings}`,\n description: `Select one or more ${displayStrings.mappings} to import.`,\n },\n {\n name: \"Rename & Confirm\",\n description:\n \"Rename and confirm your selections. Click import when finished.\",\n },\n ]);\n\n const onClose = async () => {\n setShow(false);\n setCurrentStep(0);\n await onFinish();\n };\n\n return (\n <Modal\n title={`Import ${displayStrings.mappings}`}\n modalRootId='grouping-mapping-widget'\n isOpen={show}\n closeOnEsc={false}\n closeOnExternalClick={false}\n isDismissible={!importing}\n styleType='fullPage'\n onClose={async () => {\n await onClose();\n }}\n >\n <div className='gmw-import-wizard-body-container'>\n <Wizard\n currentStep={currentStep}\n steps={steps.current}\n onStepClick={\n importing ? undefined : (index: number) => setCurrentStep(index)\n }\n />\n\n {(() => {\n switch (currentStep) {\n case 0:\n return (\n <SelectProject\n onSelect={(project) => {\n setSelectedProjectId(project.id);\n setCurrentStep(1);\n }}\n onCancel={onClose}\n />\n );\n case 1:\n return (\n <SelectIModel\n projectId={selectedProjectId}\n onSelect={(iModel) => {\n setSelectedIModelId(iModel.id);\n setCurrentStep(2);\n }}\n backFn={() => setCurrentStep(currentStep - 1)}\n onCancel={onClose}\n />\n );\n case 2:\n case 3:\n // Preserve table state within Select Mappings\n return (\n <>\n <div\n style={{ display: currentStep === 2 ? \"flex\" : \"none\" }}\n className=\"gmw-mappings-container\"\n >\n <SelectMappings\n iModelId={selectedIModelId}\n onSelect={(selectedMappings) => {\n setSelectedMappings(selectedMappings);\n setCurrentStep(3);\n }}\n onCancel={onClose}\n backFn={() => setCurrentStep(currentStep - 1)}\n displayStrings={displayStrings}\n />\n </div>\n {currentStep === 3 && (\n <ConfirmMappingImport\n sourceiModelId={selectedIModelId}\n selectedMappings={selectedMappings}\n importing={importing}\n setImporting={setImporting}\n setSelectedMappings={setSelectedMappings}\n backFn={() => setCurrentStep(currentStep - 1)}\n onCancel={onClose}\n onFinish={async () => {\n await onClose();\n setImporting(false);\n }}\n displayStrings={displayStrings}\n />\n )}\n </>\n );\n default:\n return null;\n }\n })()}\n </div>\n </Modal>\n );\n};\n"]}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import type { PropertyRecord } from "@itwin/appui-abstract";
3
+ import "./PropertyAction.scss";
4
+ export interface PropertyActionProps {
5
+ property: PropertyRecord;
6
+ }
7
+ export declare const PropertyAction: ({ property }: PropertyActionProps) => JSX.Element;
8
+ //# sourceMappingURL=PropertyAction.d.ts.map
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.PropertyAction = void 0;
23
+ /*---------------------------------------------------------------------------------------------
24
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
25
+ * See LICENSE.md in the project root for license terms and full copyright notice.
26
+ *--------------------------------------------------------------------------------------------*/
27
+ const react_1 = __importStar(require("react"));
28
+ const appui_abstract_1 = require("@itwin/appui-abstract");
29
+ const PropertyGridWrapperContext_1 = require("./context/PropertyGridWrapperContext");
30
+ const itwinui_react_1 = require("@itwin/itwinui-react");
31
+ require("./PropertyAction.scss");
32
+ const usePropertySelection = (property, currentPropertyList, queryBuilder) => {
33
+ const [isCheckboxLoading, setIsCheckboxLoading] = react_1.useState(false);
34
+ const checkIfPropertyIsSelected = react_1.useCallback((property) => {
35
+ if (property.value.valueFormat === appui_abstract_1.PropertyValueFormat.Primitive) {
36
+ return currentPropertyList.includes(property);
37
+ }
38
+ if (property.value.valueFormat === appui_abstract_1.PropertyValueFormat.Array) {
39
+ return (property.value.items.length === 0 &&
40
+ currentPropertyList.includes(property));
41
+ }
42
+ return Object.values(property.value.members).every((subProp) => checkIfPropertyIsSelected(subProp));
43
+ }, [currentPropertyList]);
44
+ const isPropertySelected = checkIfPropertyIsSelected(property);
45
+ const addProperty = react_1.useCallback(async (prop) => {
46
+ if (prop.value.valueFormat === appui_abstract_1.PropertyValueFormat.Primitive &&
47
+ !currentPropertyList.includes(prop) &&
48
+ (await (queryBuilder === null || queryBuilder === void 0 ? void 0 : queryBuilder.addProperty(prop)))) {
49
+ setIsCheckboxLoading(false);
50
+ return true;
51
+ }
52
+ return false;
53
+ }, [currentPropertyList, queryBuilder]);
54
+ const removeProperty = react_1.useCallback(async (prop) => {
55
+ if (currentPropertyList.includes(prop)) {
56
+ await (queryBuilder === null || queryBuilder === void 0 ? void 0 : queryBuilder.removeProperty(prop));
57
+ setIsCheckboxLoading(false);
58
+ }
59
+ }, [currentPropertyList, queryBuilder]);
60
+ return {
61
+ isPropertySelected,
62
+ addProperty,
63
+ removeProperty,
64
+ isCheckboxLoading,
65
+ setIsCheckboxLoading,
66
+ };
67
+ };
68
+ const PropertyAction = ({ property }) => {
69
+ const { currentPropertyList, queryBuilder, setCurrentPropertyList, setQuery, isUpdating, } = PropertyGridWrapperContext_1.usePropertyGridWrapper();
70
+ const { isPropertySelected, addProperty, removeProperty, isCheckboxLoading, setIsCheckboxLoading, } = usePropertySelection(property, currentPropertyList, queryBuilder);
71
+ react_1.useEffect(() => {
72
+ setIsCheckboxLoading(isPropertySelected && isUpdating);
73
+ }, [isPropertySelected, isUpdating, setIsCheckboxLoading]);
74
+ const onPropertySelectionChanged = react_1.useCallback(async () => {
75
+ var _a, _b;
76
+ if (isPropertySelected) {
77
+ await removeProperty(property);
78
+ setCurrentPropertyList((prevList) => prevList.filter((x) => x !== property));
79
+ setQuery((_a = queryBuilder === null || queryBuilder === void 0 ? void 0 : queryBuilder.buildQueryString()) !== null && _a !== void 0 ? _a : "");
80
+ }
81
+ else {
82
+ if (await addProperty(property)) {
83
+ setCurrentPropertyList((prevList) => prevList.concat(property));
84
+ setQuery((_b = queryBuilder === null || queryBuilder === void 0 ? void 0 : queryBuilder.buildQueryString()) !== null && _b !== void 0 ? _b : "");
85
+ }
86
+ }
87
+ }, [
88
+ addProperty,
89
+ isPropertySelected,
90
+ property,
91
+ removeProperty,
92
+ queryBuilder,
93
+ setCurrentPropertyList,
94
+ setQuery,
95
+ ]);
96
+ return (react_1.default.createElement("div", { className: "gmw-property-selection-checkbox" }, property.value.valueFormat === appui_abstract_1.PropertyValueFormat.Primitive &&
97
+ property.value.value !== undefined && (react_1.default.createElement(itwinui_react_1.Checkbox, { checked: isPropertySelected, onChange: onPropertySelectionChanged, disabled: isUpdating, isLoading: isCheckboxLoading }))));
98
+ };
99
+ exports.PropertyAction = PropertyAction;
100
+ //# sourceMappingURL=PropertyAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyAction.js","sourceRoot":"","sources":["../../../../src/widget/components/PropertyAction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { usePropertyGridWrapper } from \"./context/PropertyGridWrapperContext\";\nimport { Checkbox } from \"@itwin/itwinui-react\";\nimport \"./PropertyAction.scss\";\nimport type { QueryBuilder } from \"./QueryBuilder\";\n\nexport interface PropertyActionProps {\n property: PropertyRecord;\n}\n\nconst usePropertySelection = (\n property: PropertyRecord,\n currentPropertyList: PropertyRecord[],\n queryBuilder: QueryBuilder | undefined\n) => {\n const [isCheckboxLoading, setIsCheckboxLoading] = useState(false);\n\n const checkIfPropertyIsSelected = useCallback(\n (property: PropertyRecord): boolean => {\n if (property.value.valueFormat === PropertyValueFormat.Primitive) {\n return currentPropertyList.includes(property);\n }\n\n if (property.value.valueFormat === PropertyValueFormat.Array) {\n return (\n property.value.items.length === 0 &&\n currentPropertyList.includes(property)\n );\n }\n return Object.values(property.value.members).every(\n (subProp: PropertyRecord) => checkIfPropertyIsSelected(subProp)\n );\n },\n [currentPropertyList]\n );\n\n const isPropertySelected = checkIfPropertyIsSelected(property);\n\n const addProperty = useCallback(\n async (prop: PropertyRecord) => {\n if (\n prop.value.valueFormat === PropertyValueFormat.Primitive &&\n !currentPropertyList.includes(prop) &&\n (await queryBuilder?.addProperty(prop))\n ) {\n setIsCheckboxLoading(false);\n return true;\n }\n return false;\n },\n [currentPropertyList, queryBuilder]\n );\n\n const removeProperty = useCallback(\n async (prop: PropertyRecord) => {\n if (currentPropertyList.includes(prop)) {\n await queryBuilder?.removeProperty(prop);\n setIsCheckboxLoading(false);\n }\n },\n [currentPropertyList, queryBuilder]\n );\n\n return {\n isPropertySelected,\n addProperty,\n removeProperty,\n isCheckboxLoading,\n setIsCheckboxLoading,\n };\n};\n\nexport const PropertyAction = ({ property }: PropertyActionProps) => {\n const {\n currentPropertyList,\n queryBuilder,\n setCurrentPropertyList,\n setQuery,\n isUpdating,\n } = usePropertyGridWrapper();\n\n const {\n isPropertySelected,\n addProperty,\n removeProperty,\n isCheckboxLoading,\n setIsCheckboxLoading,\n } = usePropertySelection(property, currentPropertyList, queryBuilder);\n\n useEffect(() => {\n setIsCheckboxLoading(isPropertySelected && isUpdating);\n }, [isPropertySelected, isUpdating, setIsCheckboxLoading]);\n\n const onPropertySelectionChanged = useCallback(async () => {\n if (isPropertySelected) {\n await removeProperty(property);\n setCurrentPropertyList((prevList) =>\n prevList.filter((x) => x !== property)\n );\n setQuery(queryBuilder?.buildQueryString() ?? \"\");\n } else {\n if (await addProperty(property)) {\n setCurrentPropertyList((prevList) => prevList.concat(property));\n setQuery(queryBuilder?.buildQueryString() ?? \"\");\n }\n }\n }, [\n addProperty,\n isPropertySelected,\n property,\n removeProperty,\n queryBuilder,\n setCurrentPropertyList,\n setQuery,\n ]);\n\n return (\n <div className=\"gmw-property-selection-checkbox\">\n {property.value.valueFormat === PropertyValueFormat.Primitive &&\n property.value.value !== undefined && (\n <Checkbox\n checked={isPropertySelected}\n onChange={onPropertySelectionChanged}\n disabled={isUpdating}\n isLoading={isCheckboxLoading}\n />\n )}\n </div>\n );\n};\n"]}
@@ -0,0 +1,9 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+
6
+ .gmw-property-selection-checkbox {
7
+ display: flex;
8
+ justify-content: center;
9
+ }