@itwin/grouping-mapping-widget 0.13.0 → 0.15.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 (199) 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 +152 -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/GroupAction.d.ts +1 -0
  14. package/lib/cjs/widget/components/GroupAction.js +37 -71
  15. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  16. package/lib/cjs/widget/components/GroupColorLegend.d.ts +10 -0
  17. package/lib/cjs/widget/components/GroupColorLegend.js +20 -0
  18. package/lib/cjs/widget/components/GroupColorLegend.js.map +1 -0
  19. package/lib/cjs/widget/components/GroupColorLegend.scss +9 -0
  20. package/lib/cjs/widget/components/GroupColorToggle.d.ts +9 -0
  21. package/lib/cjs/widget/components/GroupColorToggle.js +69 -0
  22. package/lib/cjs/widget/components/GroupColorToggle.js.map +1 -0
  23. package/lib/cjs/widget/components/GroupItem.d.ts +12 -0
  24. package/lib/cjs/widget/components/GroupItem.js +19 -0
  25. package/lib/cjs/widget/components/GroupItem.js.map +1 -0
  26. package/lib/cjs/widget/components/GroupMenuActions.d.ts +13 -0
  27. package/lib/cjs/widget/components/GroupMenuActions.js +68 -0
  28. package/lib/cjs/widget/components/GroupMenuActions.js.map +1 -0
  29. package/lib/cjs/widget/components/GroupMenuActions.scss +13 -0
  30. package/lib/cjs/widget/components/GroupPropertyAction.js +1 -3
  31. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  32. package/lib/cjs/widget/components/Grouping.d.ts +9 -5
  33. package/lib/cjs/widget/components/Grouping.js +14 -142
  34. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  35. package/lib/cjs/widget/components/Grouping.scss +0 -16
  36. package/lib/cjs/widget/components/GroupingMapping.js +3 -5
  37. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  38. package/lib/cjs/widget/components/GroupingMappingContent.js +1 -1
  39. package/lib/cjs/widget/components/GroupingMappingContent.js.map +1 -1
  40. package/lib/cjs/widget/components/GroupingMappingContext.d.ts +5 -0
  41. package/lib/cjs/widget/components/GroupingMappingContext.js +6 -3
  42. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
  43. package/lib/cjs/widget/components/GroupingMappingRouter.js +21 -22
  44. package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -1
  45. package/lib/cjs/widget/components/GroupsAddButton.d.ts +3 -2
  46. package/lib/cjs/widget/components/GroupsAddButton.js +4 -3
  47. package/lib/cjs/widget/components/GroupsAddButton.js.map +1 -1
  48. package/lib/cjs/widget/components/GroupsAddButton.scss +2 -0
  49. package/lib/cjs/widget/components/GroupsShowHideButtons.d.ts +11 -0
  50. package/lib/cjs/widget/components/GroupsShowHideButtons.js +45 -0
  51. package/lib/cjs/widget/components/GroupsShowHideButtons.js.map +1 -0
  52. package/lib/cjs/widget/components/GroupsVisualization.d.ts +9 -0
  53. package/lib/cjs/widget/components/GroupsVisualization.js +133 -0
  54. package/lib/cjs/widget/components/GroupsVisualization.js.map +1 -0
  55. package/lib/cjs/widget/components/GroupsVisualization.scss +12 -0
  56. package/lib/cjs/widget/components/GroupsVisualizationActions.d.ts +10 -0
  57. package/lib/cjs/widget/components/GroupsVisualizationActions.js +27 -0
  58. package/lib/cjs/widget/components/GroupsVisualizationActions.js.map +1 -0
  59. package/lib/cjs/widget/components/GroupsVisualizationActions.scss +9 -0
  60. package/lib/cjs/widget/components/Mapping.js +1 -1
  61. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  62. package/lib/cjs/widget/components/PropertyMenu.d.ts +1 -2
  63. package/lib/cjs/widget/components/PropertyMenu.js +6 -49
  64. package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
  65. package/lib/cjs/widget/components/PropertyMenu.scss +2 -17
  66. package/lib/cjs/widget/components/PropertyMenuWithVisualization.d.ts +8 -0
  67. package/lib/cjs/widget/components/PropertyMenuWithVisualization.js +45 -0
  68. package/lib/cjs/widget/components/PropertyMenuWithVisualization.js.map +1 -0
  69. package/lib/cjs/widget/components/PropertyMenuWithVisualization.scss +16 -0
  70. package/lib/cjs/widget/components/QueryBuilderCustomUI.d.ts +3 -1
  71. package/lib/cjs/widget/components/QueryBuilderCustomUI.js +2 -1
  72. package/lib/cjs/widget/components/QueryBuilderCustomUI.js.map +1 -1
  73. package/lib/cjs/widget/components/QueryBuilderStep.d.ts +2 -1
  74. package/lib/cjs/widget/components/QueryBuilderStep.js +2 -1
  75. package/lib/cjs/widget/components/QueryBuilderStep.js.map +1 -1
  76. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.d.ts +16 -0
  77. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.js +62 -0
  78. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.js.map +1 -0
  79. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.d.ts +2 -2
  80. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js +1 -1
  81. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  82. package/lib/cjs/widget/components/context/GroupingApiConfigContext.d.ts +2 -0
  83. package/lib/cjs/widget/components/context/GroupingApiConfigContext.js +1 -0
  84. package/lib/cjs/widget/components/context/GroupingApiConfigContext.js.map +1 -1
  85. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js +2 -2
  86. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  87. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.d.ts +4 -0
  88. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  89. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -1
  90. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js +2 -2
  91. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  92. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.scss +0 -1
  93. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.scss +0 -1
  94. package/lib/cjs/widget/components/groupsHelpers.d.ts +1 -1
  95. package/lib/cjs/widget/components/groupsHelpers.js +11 -14
  96. package/lib/cjs/widget/components/groupsHelpers.js.map +1 -1
  97. package/lib/cjs/widget/hooks/useVisualization.d.ts +11 -0
  98. package/lib/cjs/widget/hooks/useVisualization.js +68 -0
  99. package/lib/cjs/widget/hooks/useVisualization.js.map +1 -0
  100. package/lib/esm/grouping-mapping-widget.d.ts +3 -0
  101. package/lib/esm/grouping-mapping-widget.js +3 -0
  102. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  103. package/lib/esm/test/GroupingMappingCustomUI.test.js +2 -2
  104. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  105. package/lib/esm/widget/components/CalculatedPropertyAction.js +9 -121
  106. package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
  107. package/lib/esm/widget/components/CalculatedPropertyAction.scss +1 -12
  108. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.d.ts +12 -0
  109. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js +126 -0
  110. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -0
  111. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.scss +27 -0
  112. package/lib/esm/widget/components/GroupAction.d.ts +1 -0
  113. package/lib/esm/widget/components/GroupAction.js +37 -71
  114. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  115. package/lib/esm/widget/components/GroupColorLegend.d.ts +10 -0
  116. package/lib/esm/widget/components/GroupColorLegend.js +13 -0
  117. package/lib/esm/widget/components/GroupColorLegend.js.map +1 -0
  118. package/lib/esm/widget/components/GroupColorLegend.scss +9 -0
  119. package/lib/esm/widget/components/GroupColorToggle.d.ts +9 -0
  120. package/lib/esm/widget/components/GroupColorToggle.js +46 -0
  121. package/lib/esm/widget/components/GroupColorToggle.js.map +1 -0
  122. package/lib/esm/widget/components/GroupItem.d.ts +12 -0
  123. package/lib/esm/widget/components/GroupItem.js +12 -0
  124. package/lib/esm/widget/components/GroupItem.js.map +1 -0
  125. package/lib/esm/widget/components/GroupMenuActions.d.ts +13 -0
  126. package/lib/esm/widget/components/GroupMenuActions.js +45 -0
  127. package/lib/esm/widget/components/GroupMenuActions.js.map +1 -0
  128. package/lib/esm/widget/components/GroupMenuActions.scss +13 -0
  129. package/lib/esm/widget/components/GroupPropertyAction.js +1 -3
  130. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  131. package/lib/esm/widget/components/Grouping.d.ts +9 -5
  132. package/lib/esm/widget/components/Grouping.js +17 -145
  133. package/lib/esm/widget/components/Grouping.js.map +1 -1
  134. package/lib/esm/widget/components/Grouping.scss +0 -16
  135. package/lib/esm/widget/components/GroupingMapping.js +3 -5
  136. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  137. package/lib/esm/widget/components/GroupingMappingContent.js +1 -1
  138. package/lib/esm/widget/components/GroupingMappingContent.js.map +1 -1
  139. package/lib/esm/widget/components/GroupingMappingContext.d.ts +5 -0
  140. package/lib/esm/widget/components/GroupingMappingContext.js +6 -3
  141. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
  142. package/lib/esm/widget/components/GroupingMappingRouter.js +21 -22
  143. package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -1
  144. package/lib/esm/widget/components/GroupsAddButton.d.ts +3 -2
  145. package/lib/esm/widget/components/GroupsAddButton.js +5 -4
  146. package/lib/esm/widget/components/GroupsAddButton.js.map +1 -1
  147. package/lib/esm/widget/components/GroupsAddButton.scss +2 -0
  148. package/lib/esm/widget/components/GroupsShowHideButtons.d.ts +11 -0
  149. package/lib/esm/widget/components/GroupsShowHideButtons.js +22 -0
  150. package/lib/esm/widget/components/GroupsShowHideButtons.js.map +1 -0
  151. package/lib/esm/widget/components/GroupsVisualization.d.ts +9 -0
  152. package/lib/esm/widget/components/GroupsVisualization.js +110 -0
  153. package/lib/esm/widget/components/GroupsVisualization.js.map +1 -0
  154. package/lib/esm/widget/components/GroupsVisualization.scss +12 -0
  155. package/lib/esm/widget/components/GroupsVisualizationActions.d.ts +10 -0
  156. package/lib/esm/widget/components/GroupsVisualizationActions.js +20 -0
  157. package/lib/esm/widget/components/GroupsVisualizationActions.js.map +1 -0
  158. package/lib/esm/widget/components/GroupsVisualizationActions.scss +9 -0
  159. package/lib/esm/widget/components/Mapping.js +1 -1
  160. package/lib/esm/widget/components/Mapping.js.map +1 -1
  161. package/lib/esm/widget/components/PropertyMenu.d.ts +1 -2
  162. package/lib/esm/widget/components/PropertyMenu.js +7 -50
  163. package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
  164. package/lib/esm/widget/components/PropertyMenu.scss +2 -17
  165. package/lib/esm/widget/components/PropertyMenuWithVisualization.d.ts +8 -0
  166. package/lib/esm/widget/components/PropertyMenuWithVisualization.js +22 -0
  167. package/lib/esm/widget/components/PropertyMenuWithVisualization.js.map +1 -0
  168. package/lib/esm/widget/components/PropertyMenuWithVisualization.scss +16 -0
  169. package/lib/esm/widget/components/QueryBuilderCustomUI.d.ts +3 -1
  170. package/lib/esm/widget/components/QueryBuilderCustomUI.js +2 -1
  171. package/lib/esm/widget/components/QueryBuilderCustomUI.js.map +1 -1
  172. package/lib/esm/widget/components/QueryBuilderStep.d.ts +2 -1
  173. package/lib/esm/widget/components/QueryBuilderStep.js +3 -2
  174. package/lib/esm/widget/components/QueryBuilderStep.js.map +1 -1
  175. package/lib/esm/widget/components/SharedCalculatedPropertyForms.d.ts +16 -0
  176. package/lib/esm/widget/components/SharedCalculatedPropertyForms.js +39 -0
  177. package/lib/esm/widget/components/SharedCalculatedPropertyForms.js.map +1 -0
  178. package/lib/esm/widget/components/context/GroupHilitedElementsContext.d.ts +2 -2
  179. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js +1 -1
  180. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  181. package/lib/esm/widget/components/context/GroupingApiConfigContext.d.ts +2 -0
  182. package/lib/esm/widget/components/context/GroupingApiConfigContext.js +1 -0
  183. package/lib/esm/widget/components/context/GroupingApiConfigContext.js.map +1 -1
  184. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js +2 -2
  185. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  186. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.d.ts +4 -0
  187. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  188. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -1
  189. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js +2 -2
  190. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  191. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.scss +0 -1
  192. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.scss +0 -1
  193. package/lib/esm/widget/components/groupsHelpers.d.ts +1 -1
  194. package/lib/esm/widget/components/groupsHelpers.js +11 -14
  195. package/lib/esm/widget/components/groupsHelpers.js.map +1 -1
  196. package/lib/esm/widget/hooks/useVisualization.d.ts +11 -0
  197. package/lib/esm/widget/hooks/useVisualization.js +64 -0
  198. package/lib/esm/widget/hooks/useVisualization.js.map +1 -0
  199. package/package.json +1 -1
@@ -9,10 +9,13 @@ export { Mappings, MappingsProps } from "./widget/components/Mapping";
9
9
  export { MappingAction, MappingActionProps } from "./widget/components/MappingAction";
10
10
  export { GroupingMappingContext, GroupingMappingContextProps } from "./widget/components/GroupingMappingContext";
11
11
  export { Groupings, GroupingProps } from "./widget/components/Grouping";
12
+ export { GroupsVisualization, GroupsVisualizationProps } from "./widget/components/GroupsVisualization";
12
13
  export { GroupAction, GroupActionProps } from "./widget/components/GroupAction";
13
14
  export { PropertyMenu, PropertyMenuProps } from "./widget/components/PropertyMenu";
15
+ export { PropertyMenuWithVisualization, PropertyMenuWithVisualizationProps } from "./widget/components/PropertyMenuWithVisualization";
14
16
  export { GroupPropertyAction, GroupPropertyActionProps } from "./widget/components/GroupPropertyAction";
15
17
  export { CalculatedPropertyAction, CalculatedPropertyActionProps } from "./widget/components/CalculatedPropertyAction";
18
+ export { CalculatedPropertyActionWithVisuals, CalculatedPropertyActionWithVisualsProps } from "./widget/components/CalculatedPropertyActionWithVisuals";
16
19
  export { CustomCalculationAction, CustomCalculationActionProps } from "./widget/components/CustomCalculationAction";
17
20
  export { SearchGroupingCustomUI } from "./widget/components/customUI/SearchGroupingCustomUI";
18
21
  export { ManualGroupingCustomUI } from "./widget/components/customUI/ManualGroupingCustomUI";
@@ -10,7 +10,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.resolveFormulaDataType = exports.GroupingMappingCustomUIType = exports.GroupQueryBuilderCustomUI = exports.ManualGroupingCustomUI = exports.SearchGroupingCustomUI = exports.CustomCalculationAction = exports.CalculatedPropertyAction = exports.GroupPropertyAction = exports.PropertyMenu = exports.GroupAction = exports.Groupings = exports.GroupingMappingContext = exports.MappingAction = exports.Mappings = exports.useGroupingMappingApiConfig = exports.GroupingMappingApiConfigContext = exports.useMappingClient = exports.MappingClientContext = exports.createMappingClient = exports.createDefaultMappingClient = void 0;
13
+ exports.resolveFormulaDataType = exports.GroupingMappingCustomUIType = exports.GroupQueryBuilderCustomUI = exports.ManualGroupingCustomUI = exports.SearchGroupingCustomUI = exports.CustomCalculationAction = exports.CalculatedPropertyActionWithVisuals = exports.CalculatedPropertyAction = exports.GroupPropertyAction = exports.PropertyMenuWithVisualization = exports.PropertyMenu = exports.GroupAction = exports.GroupsVisualization = exports.Groupings = exports.GroupingMappingContext = exports.MappingAction = exports.Mappings = exports.useGroupingMappingApiConfig = exports.GroupingMappingApiConfigContext = exports.useMappingClient = exports.MappingClientContext = exports.createMappingClient = exports.createDefaultMappingClient = void 0;
14
14
  /*---------------------------------------------------------------------------------------------
15
15
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
16
16
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -36,14 +36,20 @@ var GroupingMappingContext_1 = require("./widget/components/GroupingMappingConte
36
36
  Object.defineProperty(exports, "GroupingMappingContext", { enumerable: true, get: function () { return GroupingMappingContext_1.GroupingMappingContext; } });
37
37
  var Grouping_1 = require("./widget/components/Grouping");
38
38
  Object.defineProperty(exports, "Groupings", { enumerable: true, get: function () { return Grouping_1.Groupings; } });
39
+ var GroupsVisualization_1 = require("./widget/components/GroupsVisualization");
40
+ Object.defineProperty(exports, "GroupsVisualization", { enumerable: true, get: function () { return GroupsVisualization_1.GroupsVisualization; } });
39
41
  var GroupAction_1 = require("./widget/components/GroupAction");
40
42
  Object.defineProperty(exports, "GroupAction", { enumerable: true, get: function () { return GroupAction_1.GroupAction; } });
41
43
  var PropertyMenu_1 = require("./widget/components/PropertyMenu");
42
44
  Object.defineProperty(exports, "PropertyMenu", { enumerable: true, get: function () { return PropertyMenu_1.PropertyMenu; } });
45
+ var PropertyMenuWithVisualization_1 = require("./widget/components/PropertyMenuWithVisualization");
46
+ Object.defineProperty(exports, "PropertyMenuWithVisualization", { enumerable: true, get: function () { return PropertyMenuWithVisualization_1.PropertyMenuWithVisualization; } });
43
47
  var GroupPropertyAction_1 = require("./widget/components/GroupPropertyAction");
44
48
  Object.defineProperty(exports, "GroupPropertyAction", { enumerable: true, get: function () { return GroupPropertyAction_1.GroupPropertyAction; } });
45
49
  var CalculatedPropertyAction_1 = require("./widget/components/CalculatedPropertyAction");
46
50
  Object.defineProperty(exports, "CalculatedPropertyAction", { enumerable: true, get: function () { return CalculatedPropertyAction_1.CalculatedPropertyAction; } });
51
+ var CalculatedPropertyActionWithVisuals_1 = require("./widget/components/CalculatedPropertyActionWithVisuals");
52
+ Object.defineProperty(exports, "CalculatedPropertyActionWithVisuals", { enumerable: true, get: function () { return CalculatedPropertyActionWithVisuals_1.CalculatedPropertyActionWithVisuals; } });
47
53
  var CustomCalculationAction_1 = require("./widget/components/CustomCalculationAction");
48
54
  Object.defineProperty(exports, "CustomCalculationAction", { enumerable: true, get: function () { return CustomCalculationAction_1.CustomCalculationAction; } });
49
55
  var SearchGroupingCustomUI_1 = require("./widget/components/customUI/SearchGroupingCustomUI");
@@ -1 +1 @@
1
- {"version":3,"file":"grouping-mapping-widget.js","sourceRoot":"","sources":["../../src/grouping-mapping-widget.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,iEAA+C;AAE/C,0EAA0E;AAC1E,yFAA2J;AAAlJ,kIAAA,0BAA0B,OAAA;AAAE,2HAAA,mBAAmB,OAAA;AAAE,4HAAA,oBAAoB,OAAA;AAAE,wHAAA,gBAAgB,OAAA;AAChG,iGAA8L;AAA3H,2IAAA,+BAA+B,OAAA;AAAE,uIAAA,2BAA2B,OAAA;AAC/H,yDAAuC;AAEvC,yCAAyC;AACzC,uDAAsE;AAA7D,mGAAA,QAAQ,OAAA;AACjB,mEAAsF;AAA7E,8GAAA,aAAa,OAAA;AACtB,qFAAiH;AAAxG,gIAAA,sBAAsB,OAAA;AAC/B,yDAAwE;AAA/D,qGAAA,SAAS,OAAA;AAClB,+DAAgF;AAAvE,0GAAA,WAAW,OAAA;AACpB,iEAAmF;AAA1E,4GAAA,YAAY,OAAA;AACrB,+EAAwG;AAA/F,0HAAA,mBAAmB,OAAA;AAC5B,yFAAuH;AAA9G,oIAAA,wBAAwB,OAAA;AACjC,uFAAoH;AAA3G,kIAAA,uBAAuB,OAAA;AAChC,8FAA6F;AAApF,gIAAA,sBAAsB,OAAA;AAC/B,8FAA6F;AAApF,gIAAA,sBAAsB,OAAA;AAC/B,oGAAmG;AAA1F,sIAAA,yBAAyB,OAAA;AAClC,gGAA4M;AAA1K,sIAAA,2BAA2B,OAAA;AAE7D,gCAAgC;AAChC,6EAA2E;AAAlE,iIAAA,sBAAsB,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/GroupingMappingWidget\";\n\n/** Interfaces for providing custom MappingClient and API configuration */\nexport { createDefaultMappingClient, createMappingClient, MappingClientContext, useMappingClient } from \"./widget/components/context/MappingClientContext\";\nexport { ClientPrefix, GetAccessTokenFn, GroupingMappingApiConfig, GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from \"./widget/components/context/GroupingApiConfigContext\";\nexport * from \"@itwin/insights-client\";\n\n/** Internal components for custom UIs */\nexport { Mappings, MappingsProps } from \"./widget/components/Mapping\";\nexport { MappingAction, MappingActionProps } from \"./widget/components/MappingAction\";\nexport { GroupingMappingContext, GroupingMappingContextProps } from \"./widget/components/GroupingMappingContext\";\nexport { Groupings, GroupingProps } from \"./widget/components/Grouping\";\nexport { GroupAction, GroupActionProps } from \"./widget/components/GroupAction\";\nexport { PropertyMenu, PropertyMenuProps } from \"./widget/components/PropertyMenu\";\nexport { GroupPropertyAction, GroupPropertyActionProps } from \"./widget/components/GroupPropertyAction\";\nexport { CalculatedPropertyAction, CalculatedPropertyActionProps } from \"./widget/components/CalculatedPropertyAction\";\nexport { CustomCalculationAction, CustomCalculationActionProps } from \"./widget/components/CustomCalculationAction\";\nexport { SearchGroupingCustomUI } from \"./widget/components/customUI/SearchGroupingCustomUI\";\nexport { ManualGroupingCustomUI } from \"./widget/components/customUI/ManualGroupingCustomUI\";\nexport { GroupQueryBuilderCustomUI } from \"./widget/components/customUI/GroupQueryBuilderCustomUI\";\nexport { GroupingMappingCustomUI, GroupingMappingCustomUIType, ContextCustomUI, GroupingCustomUI, GroupingCustomUIProps, ContextCustomUIProps } from \"./widget/components/customUI/GroupingMappingCustomUI\";\n\n/** Formula DataType resolver */\nexport { resolveFormulaDataType } from \"./formula/FormulaDataTypeResolver\";\nexport { DataType, PropertyMap } from \"./formula/Types\";\nexport { IResult } from \"./formula/IResult\";\n"]}
1
+ {"version":3,"file":"grouping-mapping-widget.js","sourceRoot":"","sources":["../../src/grouping-mapping-widget.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,iEAA+C;AAE/C,0EAA0E;AAC1E,yFAA2J;AAAlJ,kIAAA,0BAA0B,OAAA;AAAE,2HAAA,mBAAmB,OAAA;AAAE,4HAAA,oBAAoB,OAAA;AAAE,wHAAA,gBAAgB,OAAA;AAChG,iGAA8L;AAA3H,2IAAA,+BAA+B,OAAA;AAAE,uIAAA,2BAA2B,OAAA;AAC/H,yDAAuC;AAEvC,yCAAyC;AACzC,uDAAsE;AAA7D,mGAAA,QAAQ,OAAA;AACjB,mEAAsF;AAA7E,8GAAA,aAAa,OAAA;AACtB,qFAAiH;AAAxG,gIAAA,sBAAsB,OAAA;AAC/B,yDAAwE;AAA/D,qGAAA,SAAS,OAAA;AAClB,+EAAwG;AAA/F,0HAAA,mBAAmB,OAAA;AAC5B,+DAAgF;AAAvE,0GAAA,WAAW,OAAA;AACpB,iEAAmF;AAA1E,4GAAA,YAAY,OAAA;AACrB,mGAAsI;AAA7H,8IAAA,6BAA6B,OAAA;AACtC,+EAAwG;AAA/F,0HAAA,mBAAmB,OAAA;AAC5B,yFAAuH;AAA9G,oIAAA,wBAAwB,OAAA;AACjC,+GAAwJ;AAA/I,0JAAA,mCAAmC,OAAA;AAC5C,uFAAoH;AAA3G,kIAAA,uBAAuB,OAAA;AAChC,8FAA6F;AAApF,gIAAA,sBAAsB,OAAA;AAC/B,8FAA6F;AAApF,gIAAA,sBAAsB,OAAA;AAC/B,oGAAmG;AAA1F,sIAAA,yBAAyB,OAAA;AAClC,gGAA4M;AAA1K,sIAAA,2BAA2B,OAAA;AAE7D,gCAAgC;AAChC,6EAA2E;AAAlE,iIAAA,sBAAsB,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/GroupingMappingWidget\";\n\n/** Interfaces for providing custom MappingClient and API configuration */\nexport { createDefaultMappingClient, createMappingClient, MappingClientContext, useMappingClient } from \"./widget/components/context/MappingClientContext\";\nexport { ClientPrefix, GetAccessTokenFn, GroupingMappingApiConfig, GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from \"./widget/components/context/GroupingApiConfigContext\";\nexport * from \"@itwin/insights-client\";\n\n/** Internal components for custom UIs */\nexport { Mappings, MappingsProps } from \"./widget/components/Mapping\";\nexport { MappingAction, MappingActionProps } from \"./widget/components/MappingAction\";\nexport { GroupingMappingContext, GroupingMappingContextProps } from \"./widget/components/GroupingMappingContext\";\nexport { Groupings, GroupingProps } from \"./widget/components/Grouping\";\nexport { GroupsVisualization, GroupsVisualizationProps } from \"./widget/components/GroupsVisualization\";\nexport { GroupAction, GroupActionProps } from \"./widget/components/GroupAction\";\nexport { PropertyMenu, PropertyMenuProps } from \"./widget/components/PropertyMenu\";\nexport { PropertyMenuWithVisualization, PropertyMenuWithVisualizationProps } from \"./widget/components/PropertyMenuWithVisualization\";\nexport { GroupPropertyAction, GroupPropertyActionProps } from \"./widget/components/GroupPropertyAction\";\nexport { CalculatedPropertyAction, CalculatedPropertyActionProps } from \"./widget/components/CalculatedPropertyAction\";\nexport { CalculatedPropertyActionWithVisuals, CalculatedPropertyActionWithVisualsProps } from \"./widget/components/CalculatedPropertyActionWithVisuals\";\nexport { CustomCalculationAction, CustomCalculationActionProps } from \"./widget/components/CustomCalculationAction\";\nexport { SearchGroupingCustomUI } from \"./widget/components/customUI/SearchGroupingCustomUI\";\nexport { ManualGroupingCustomUI } from \"./widget/components/customUI/ManualGroupingCustomUI\";\nexport { GroupQueryBuilderCustomUI } from \"./widget/components/customUI/GroupQueryBuilderCustomUI\";\nexport { GroupingMappingCustomUI, GroupingMappingCustomUIType, ContextCustomUI, GroupingCustomUI, GroupingCustomUIProps, ContextCustomUIProps } from \"./widget/components/customUI/GroupingMappingCustomUI\";\n\n/** Formula DataType resolver */\nexport { resolveFormulaDataType } from \"./formula/FormulaDataTypeResolver\";\nexport { DataType, PropertyMap } from \"./formula/Types\";\nexport { IResult } from \"./formula/IResult\";\n"]}
@@ -202,7 +202,7 @@ describe("Groupings View", () => {
202
202
  // Click on the context ui
203
203
  await user.click(contextMenuItems[0]);
204
204
  // Callback should have been called with correct parameters
205
- expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0]);
205
+ expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);
206
206
  });
207
207
  it("Set up both grouping and context custom UI", async () => {
208
208
  // Arange
@@ -254,7 +254,7 @@ describe("Groupings View", () => {
254
254
  // Click on the context ui
255
255
  await user.click(contextMenuItems[1]);
256
256
  // Callback should have been called with correct parameters
257
- expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0]);
257
+ expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);
258
258
  });
259
259
  });
260
260
  //# sourceMappingURL=GroupingMappingCustomUI.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupingMappingCustomUI.test.js","sourceRoot":"","sources":["../../../src/test/GroupingMappingCustomUI.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport { faker } from \"@faker-js/faker\";\nimport { GroupingMappingCustomUIType, Groupings } from \"../grouping-mapping-widget\";\nimport type { GroupCollection, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport * as moq from \"typemoq\";\nimport type { IModelConnection, ViewManager } from \"@itwin/core-frontend\";\nimport type { ContextCustomUIProps, GroupingCustomUIProps, GroupingMappingCustomUI } from \"../grouping-mapping-widget\";\nimport userEvent from \"@testing-library/user-event\";\nimport { render, screen, waitForElementToBeRemoved, within } from \"../test/test-utils\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId = faker.datatype.uuid();\nconst mockMappingId = faker.datatype.uuid();\nconst mockMapping: Mapping = {\n id: mockMappingId,\n mappingName: \"mOcKmApPiNg1\",\n description: \"mOcKmApPiNgDeScRiPtIoN1\",\n createdBy: faker.random.alpha(),\n createdOn: faker.date.past().toDateString(),\n modifiedBy: faker.random.alpha(),\n modifiedOn: faker.date.past().toDateString(),\n extractionEnabled: false,\n _links: {\n imodel: {\n href: \"\",\n },\n },\n};\n\nconst groupsFactory = (): GroupCollection => ({\n groups: Array.from(\n { length: faker.datatype.number({ min: 3, max: 5 }) },\n (_, index) => ({\n id: `${faker.datatype.uuid()}`,\n groupName: `mOcKgRoUp${index}`,\n description: `mOcKgRoUpDeScRiPtIoN${index}`,\n query: `mOcKgRoUpQuErY${index}`,\n _links: {\n imodel: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n },\n })\n ),\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n});\n\nconst connectionMock = moq.Mock.ofType<IModelConnection>();\nconst viewManagerMock = moq.Mock.ofType<ViewManager>();\nconst mappingClientMock = moq.Mock.ofType<IMappingsClient>();\n\njest.mock(\"@itwin/appui-react\", () => ({\n ...jest.requireActual(\"@itwin/appui-react\"),\n useActiveIModelConnection: () => connectionMock.object,\n}));\n\njest.mock(\"@itwin/core-frontend\", () => ({\n ...jest.requireActual(\"@itwin/core-frontend\"),\n IModelApp: {\n viewManager: {},\n },\n}));\n\njest.mock(\"../widget/components/context/MappingClientContext\", () => ({\n ...jest.requireActual(\"../widget/components/context/MappingClientContext\"),\n useMappingClient: () => mappingClientMock.object,\n}));\n\nconst mockGroups = groupsFactory();\n\ndescribe(\"Groupings View\", () => {\n beforeEach(async () => {\n connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId);\n connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);\n\n mappingClientMock\n .setup(async (x) => x.getGroups(moq.It.isAny(), moq.It.isAny(), moq.It.isAny()))\n .returns(async () => Promise.resolve(mockGroups.groups));\n });\n\n afterEach(() => {\n connectionMock.reset();\n mappingClientMock.reset();\n viewManagerMock.reset();\n });\n\n it(\"List all groups\", async () => {\n // Arange\n\n // Act\n const user = userEvent.setup();\n render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the correct random mockGroups.groups count listed\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n horizontalTiles.forEach((horizontalTile, index) => {\n const groupTile = within(horizontalTile);\n expect(\n groupTile.getByText(\n mockGroups.groups[index].groupName\n )\n ).toBeInTheDocument();\n expect(\n groupTile.getByText(\n mockGroups.groups[index].description ?? \"\"\n )\n ).toBeInTheDocument();\n });\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should only have the permanent delete context item.\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(1);\n expect(contextMenuItems[0]).toHaveTextContent(\"Remove\");\n });\n\n it(\"Set up grouping custom UI\", async () => {\n // Arange\n const mockedUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockGroupingUI];\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Each group should have a more icon button\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n expect(moreButton.length).toBeGreaterThan(0);\n\n // Click on first more icon\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n\n // Hover on 'Edit'\n await user.hover(contextMenuItems[0]);\n\n // Should have exactly 1 sub menu item\n const editCustom = screen.getAllByTestId(`gmw-edit-0`);\n expect(editCustom).toHaveLength(1);\n expect(editCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Click on the edit custom UI\n await user.click(editCustom[0]);\n\n const groupName = screen.getAllByText(mockGroups.groups[0].groupName);\n expect(groupName).toHaveLength(1);\n });\n\n it(\"Set up context custom UI - should have add context menu\", async () => {\n // Arange\n const mockedUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI];\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the right group number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[1]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0]);\n });\n\n it(\"Set up both grouping and context custom UI\", async () => {\n // Arange\n const mockedGroupingUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockedContextUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedGroupingUIComponent,\n };\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedContextUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];\n const onClickAddGroup = jest.fn();\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={onClickAddGroup}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n await user.click(addCustom[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickAddGroup).toBeCalledWith(mockGroupingUI.name);\n\n // Check the group tile number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 3 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n\n expect(contextMenuItems).toHaveLength(3);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n expect(contextMenuItems[1]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[2]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[1]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0]);\n });\n});\n"]}
1
+ {"version":3,"file":"GroupingMappingCustomUI.test.js","sourceRoot":"","sources":["../../../src/test/GroupingMappingCustomUI.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport { faker } from \"@faker-js/faker\";\nimport { GroupingMappingCustomUIType, Groupings } from \"../grouping-mapping-widget\";\nimport type { GroupCollection, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport * as moq from \"typemoq\";\nimport type { IModelConnection, ViewManager } from \"@itwin/core-frontend\";\nimport type { ContextCustomUIProps, GroupingCustomUIProps, GroupingMappingCustomUI } from \"../grouping-mapping-widget\";\nimport userEvent from \"@testing-library/user-event\";\nimport { render, screen, waitForElementToBeRemoved, within } from \"../test/test-utils\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId = faker.datatype.uuid();\nconst mockMappingId = faker.datatype.uuid();\nconst mockMapping: Mapping = {\n id: mockMappingId,\n mappingName: \"mOcKmApPiNg1\",\n description: \"mOcKmApPiNgDeScRiPtIoN1\",\n createdBy: faker.random.alpha(),\n createdOn: faker.date.past().toDateString(),\n modifiedBy: faker.random.alpha(),\n modifiedOn: faker.date.past().toDateString(),\n extractionEnabled: false,\n _links: {\n imodel: {\n href: \"\",\n },\n },\n};\n\nconst groupsFactory = (): GroupCollection => ({\n groups: Array.from(\n { length: faker.datatype.number({ min: 3, max: 5 }) },\n (_, index) => ({\n id: `${faker.datatype.uuid()}`,\n groupName: `mOcKgRoUp${index}`,\n description: `mOcKgRoUpDeScRiPtIoN${index}`,\n query: `mOcKgRoUpQuErY${index}`,\n _links: {\n imodel: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n },\n })\n ),\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n});\n\nconst connectionMock = moq.Mock.ofType<IModelConnection>();\nconst viewManagerMock = moq.Mock.ofType<ViewManager>();\nconst mappingClientMock = moq.Mock.ofType<IMappingsClient>();\n\njest.mock(\"@itwin/appui-react\", () => ({\n ...jest.requireActual(\"@itwin/appui-react\"),\n useActiveIModelConnection: () => connectionMock.object,\n}));\n\njest.mock(\"@itwin/core-frontend\", () => ({\n ...jest.requireActual(\"@itwin/core-frontend\"),\n IModelApp: {\n viewManager: {},\n },\n}));\n\njest.mock(\"../widget/components/context/MappingClientContext\", () => ({\n ...jest.requireActual(\"../widget/components/context/MappingClientContext\"),\n useMappingClient: () => mappingClientMock.object,\n}));\n\nconst mockGroups = groupsFactory();\n\ndescribe(\"Groupings View\", () => {\n beforeEach(async () => {\n connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId);\n connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);\n\n mappingClientMock\n .setup(async (x) => x.getGroups(moq.It.isAny(), moq.It.isAny(), moq.It.isAny()))\n .returns(async () => Promise.resolve(mockGroups.groups));\n });\n\n afterEach(() => {\n connectionMock.reset();\n mappingClientMock.reset();\n viewManagerMock.reset();\n });\n\n it(\"List all groups\", async () => {\n // Arange\n\n // Act\n const user = userEvent.setup();\n render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the correct random mockGroups.groups count listed\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n horizontalTiles.forEach((horizontalTile, index) => {\n const groupTile = within(horizontalTile);\n expect(\n groupTile.getByText(\n mockGroups.groups[index].groupName\n )\n ).toBeInTheDocument();\n expect(\n groupTile.getByText(\n mockGroups.groups[index].description ?? \"\"\n )\n ).toBeInTheDocument();\n });\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should only have the permanent delete context item.\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(1);\n expect(contextMenuItems[0]).toHaveTextContent(\"Remove\");\n });\n\n it(\"Set up grouping custom UI\", async () => {\n // Arange\n const mockedUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockGroupingUI];\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Each group should have a more icon button\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n expect(moreButton.length).toBeGreaterThan(0);\n\n // Click on first more icon\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n\n // Hover on 'Edit'\n await user.hover(contextMenuItems[0]);\n\n // Should have exactly 1 sub menu item\n const editCustom = screen.getAllByTestId(`gmw-edit-0`);\n expect(editCustom).toHaveLength(1);\n expect(editCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Click on the edit custom UI\n await user.click(editCustom[0]);\n\n const groupName = screen.getAllByText(mockGroups.groups[0].groupName);\n expect(groupName).toHaveLength(1);\n });\n\n it(\"Set up context custom UI - should have add context menu\", async () => {\n // Arange\n const mockedUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI];\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the right group number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[1]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);\n });\n\n it(\"Set up both grouping and context custom UI\", async () => {\n // Arange\n const mockedGroupingUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockedContextUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedGroupingUIComponent,\n };\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedContextUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];\n const onClickAddGroup = jest.fn();\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={onClickAddGroup}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n await user.click(addCustom[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickAddGroup).toBeCalledWith(mockGroupingUI.name);\n\n // Check the group tile number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 3 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n\n expect(contextMenuItems).toHaveLength(3);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n expect(contextMenuItems[1]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[2]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[1]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);\n });\n});\n"]}
@@ -27,85 +27,26 @@ exports.CalculatedPropertyAction = void 0;
27
27
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
28
28
  * See LICENSE.md in the project root for license terms and full copyright notice.
29
29
  *--------------------------------------------------------------------------------------------*/
30
- const core_frontend_1 = require("@itwin/core-frontend");
31
30
  const itwinui_react_1 = require("@itwin/itwinui-react");
32
31
  const react_1 = __importStar(require("react"));
33
32
  const ActionPanel_1 = __importDefault(require("./ActionPanel"));
34
- const BboxDimensionsDecorator_1 = require("../../decorators/BboxDimensionsDecorator");
35
- const useValidator_1 = __importStar(require("../hooks/useValidator"));
33
+ const useValidator_1 = __importDefault(require("../hooks/useValidator"));
36
34
  const utils_1 = require("./utils");
37
- const viewerUtils_1 = require("./viewerUtils");
38
35
  require("./CalculatedPropertyAction.scss");
39
36
  const MappingClientContext_1 = require("./context/MappingClientContext");
40
37
  const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
41
38
  const insights_client_1 = require("@itwin/insights-client");
42
- const GroupHilitedElementsContext_1 = require("./context/GroupHilitedElementsContext");
43
- const appui_react_1 = require("@itwin/appui-react");
44
- const groupsHelpers_1 = require("./groupsHelpers");
39
+ const SharedCalculatedPropertyForms_1 = require("./SharedCalculatedPropertyForms");
45
40
  const CalculatedPropertyAction = ({ mappingId, group, calculatedProperty, onSaveSuccess, onClickCancel, }) => {
46
- var _a, _b;
41
+ var _a;
47
42
  const { getAccessToken, iModelId } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
48
43
  const mappingClient = MappingClientContext_1.useMappingClient();
49
44
  const [propertyName, setPropertyName] = react_1.useState((_a = calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.propertyName) !== null && _a !== void 0 ? _a : "");
50
- const iModelConnection = appui_react_1.useActiveIModelConnection();
51
- const [type, setType] = react_1.useState((_b = calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.type) !== null && _b !== void 0 ? _b : insights_client_1.CalculatedPropertyType.Undefined);
52
- const [bboxDecorator, setBboxDecorator] = react_1.useState();
45
+ const [type, setType] = react_1.useState(calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.type);
53
46
  const [isLoading, setIsLoading] = react_1.useState(false);
54
- const { hilitedElementsQueryCache } = GroupHilitedElementsContext_1.useGroupHilitedElementsContext();
55
- const [inferredSpatialData, setInferredSpatialData] = react_1.useState();
56
47
  const [validator, showValidationMessage] = useValidator_1.default();
57
- const [resolvedHiliteIds, setResolvedHiliteIds] = react_1.useState([]);
58
- const [colorProperty, setColorProperty] = react_1.useState(false);
59
- react_1.useEffect(() => {
60
- const decorator = new BboxDimensionsDecorator_1.BboxDimensionsDecorator();
61
- core_frontend_1.IModelApp.viewManager.addDecorator(decorator);
62
- setBboxDecorator(decorator);
63
- return () => {
64
- core_frontend_1.IModelApp.viewManager.dropDecorator(decorator);
65
- };
66
- }, []);
67
- react_1.useEffect(() => {
68
- const initialize = async () => {
69
- if (!iModelConnection)
70
- return;
71
- viewerUtils_1.clearEmphasizedOverriddenElements();
72
- if (!colorProperty)
73
- return;
74
- setIsLoading(true);
75
- const result = await groupsHelpers_1.getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);
76
- setResolvedHiliteIds(result.ids);
77
- setIsLoading(false);
78
- };
79
- void initialize();
80
- }, [iModelConnection, hilitedElementsQueryCache, group, colorProperty]);
81
- react_1.useEffect(() => {
82
- if (!colorProperty || resolvedHiliteIds.length === 0) {
83
- return;
84
- }
85
- viewerUtils_1.visualizeElements([resolvedHiliteIds[0]], "red");
86
- void viewerUtils_1.zoomToElements([resolvedHiliteIds[0]]);
87
- }, [colorProperty, resolvedHiliteIds]);
88
- react_1.useEffect(() => {
89
- if (!colorProperty || resolvedHiliteIds.length === 0) {
90
- return;
91
- }
92
- const setContext = async () => {
93
- if (bboxDecorator) {
94
- await bboxDecorator.setContext(resolvedHiliteIds[0]);
95
- setInferredSpatialData(bboxDecorator.getInferredSpatialData());
96
- }
97
- };
98
- void setContext();
99
- }, [bboxDecorator, colorProperty, resolvedHiliteIds]);
100
- react_1.useEffect(() => {
101
- if (bboxDecorator && type && inferredSpatialData) {
102
- inferredSpatialData.has(BboxDimensionsDecorator_1.BboxDimension[type]) && colorProperty
103
- ? bboxDecorator.drawContext(BboxDimensionsDecorator_1.BboxDimension[type])
104
- : bboxDecorator.clearContext();
105
- }
106
- }, [bboxDecorator, colorProperty, inferredSpatialData, type]);
107
48
  const onSave = async () => {
108
- if (!validator.allValid()) {
49
+ if (!validator.allValid() || !type) {
109
50
  showValidationMessage(true);
110
51
  return;
111
52
  }
@@ -132,65 +73,12 @@ const CalculatedPropertyAction = ({ mappingId, group, calculatedProperty, onSave
132
73
  setIsLoading(false);
133
74
  }
134
75
  };
135
- const getSpatialData = (value) => {
136
- var _a;
137
- return (inferredSpatialData === null || inferredSpatialData === void 0 ? void 0 : inferredSpatialData.has(BboxDimensionsDecorator_1.BboxDimension[value])) && (react_1.default.createElement("div", null, `${(_a = inferredSpatialData === null || inferredSpatialData === void 0 ? void 0 : inferredSpatialData.get(BboxDimensionsDecorator_1.BboxDimension[value])) === null || _a === void 0 ? void 0 : _a.toPrecision(4)}m`));
138
- };
139
76
  return (react_1.default.createElement(react_1.default.Fragment, null,
140
77
  react_1.default.createElement("div", { className: 'gmw-calculated-properties-action-container' },
141
78
  react_1.default.createElement(itwinui_react_1.Fieldset, { legend: 'Calculated Property Details', className: 'gmw-details-form' },
142
79
  react_1.default.createElement("div", { className: 'gmw-field-legend-container' },
143
- react_1.default.createElement(itwinui_react_1.Small, { className: 'gmw-field-legend' }, "Asterisk * indicates mandatory fields."),
144
- react_1.default.createElement(itwinui_react_1.ToggleSwitch, { label: 'Visualize Dimensions', labelPosition: 'left', disabled: isLoading, checked: colorProperty, onChange: () => setColorProperty((b) => !b) })),
145
- react_1.default.createElement(itwinui_react_1.LabeledInput, { value: propertyName, required: true, name: 'name', label: 'Name', onChange: (event) => {
146
- setPropertyName(event.target.value);
147
- validator.showMessageFor("name");
148
- }, message: validator.message("name", propertyName, useValidator_1.NAME_REQUIREMENTS), status: validator.message("name", propertyName, useValidator_1.NAME_REQUIREMENTS)
149
- ? "negative"
150
- : undefined, onBlur: () => {
151
- validator.showMessageFor("name");
152
- }, onBlurCapture: (event) => {
153
- setPropertyName(event.target.value);
154
- validator.showMessageFor("name");
155
- } }),
156
- react_1.default.createElement(itwinui_react_1.LabeledSelect, { label: 'Quantity Type', required: true, options: [
157
- { value: insights_client_1.CalculatedPropertyType.Length, label: "Length" },
158
- { value: insights_client_1.CalculatedPropertyType.Area, label: "Area" },
159
- { value: insights_client_1.CalculatedPropertyType.Volume, label: "Volume" },
160
- {
161
- value: insights_client_1.CalculatedPropertyType.BoundingBoxLongestEdgeLength,
162
- label: "Longest Edge Length",
163
- },
164
- {
165
- value: insights_client_1.CalculatedPropertyType.BoundingBoxIntermediateEdgeLength,
166
- label: "Intermediate Edge Length",
167
- },
168
- {
169
- value: insights_client_1.CalculatedPropertyType.BoundingBoxShortestEdgeLength,
170
- label: "Shortest Edge Length",
171
- },
172
- {
173
- value: insights_client_1.CalculatedPropertyType.BoundingBoxDiagonalLength,
174
- label: "Diagonal Length",
175
- },
176
- {
177
- value: insights_client_1.CalculatedPropertyType.BoundingBoxLongestFaceDiagonalLength,
178
- label: "Longest Face Diagonal Length",
179
- },
180
- {
181
- value: insights_client_1.CalculatedPropertyType.BoundingBoxIntermediateFaceDiagonalLength,
182
- label: "Intermediate Face Diagonal Length",
183
- },
184
- {
185
- value: insights_client_1.CalculatedPropertyType.BoundingBoxShortestFaceDiagonalLength,
186
- label: "Shortest Face Diagonal Length",
187
- },
188
- ], value: type, onChange: setType, itemRenderer: (option) => (react_1.default.createElement(itwinui_react_1.MenuItem, null,
189
- react_1.default.createElement("div", { className: 'gmw-gr-cp-menu-item' },
190
- react_1.default.createElement("div", null, option.label),
191
- getSpatialData(option.value)))), selectedItemRenderer: (option) => (react_1.default.createElement("div", { className: 'gmw-select-item' },
192
- react_1.default.createElement("div", null, option.label),
193
- getSpatialData(option.value))), onShow: () => { }, onHide: () => { } }))),
80
+ react_1.default.createElement(itwinui_react_1.Small, { className: 'gmw-field-legend' }, "Asterisk * indicates mandatory fields.")),
81
+ react_1.default.createElement(SharedCalculatedPropertyForms_1.SharedCalculatedPropertyForms, { validator: validator, propertyName: propertyName, setPropertyName: setPropertyName, type: type, setType: setType }))),
194
82
  react_1.default.createElement(ActionPanel_1.default, { onSave: onSave, onCancel: onClickCancel, isSavingDisabled: !(type && propertyName), isLoading: isLoading })));
195
83
  };
196
84
  exports.CalculatedPropertyAction = CalculatedPropertyAction;
@@ -1 +1 @@
1
- {"version":3,"file":"CalculatedPropertyAction.js","sourceRoot":"","sources":["../../../../src/widget/components/CalculatedPropertyAction.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 { IModelApp } from \"@itwin/core-frontend\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Fieldset,\n LabeledInput,\n LabeledSelect,\n MenuItem,\n Small,\n ToggleSwitch,\n} from \"@itwin/itwinui-react\";\nimport React, { useEffect, useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport {\n BboxDimension,\n BboxDimensionsDecorator,\n} from \"../../decorators/BboxDimensionsDecorator\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError } from \"./utils\";\nimport { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements } from \"./viewerUtils\";\nimport \"./CalculatedPropertyAction.scss\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CalculatedProperty, Group } from \"@itwin/insights-client\";\nimport { CalculatedPropertyType } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"./groupsHelpers\";\n\nexport interface CalculatedPropertyActionProps {\n mappingId: string;\n group: Group;\n calculatedProperty?: CalculatedProperty;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const CalculatedPropertyAction = ({\n mappingId,\n group,\n calculatedProperty,\n onSaveSuccess,\n onClickCancel,\n}: CalculatedPropertyActionProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\n calculatedProperty?.propertyName ?? \"\",\n );\n const iModelConnection = useActiveIModelConnection();\n const [type, setType] = useState<CalculatedPropertyType>(calculatedProperty?.type ?? CalculatedPropertyType.Undefined);\n const [bboxDecorator, setBboxDecorator] = useState<BboxDimensionsDecorator | undefined>();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const [inferredSpatialData, setInferredSpatialData] = useState<Map<BboxDimension, number> | undefined>();\n const [validator, showValidationMessage] = useValidator();\n const [resolvedHiliteIds, setResolvedHiliteIds] = useState<string[]>([]);\n const [colorProperty, setColorProperty] = useState<boolean>(false);\n\n useEffect(() => {\n const decorator = new BboxDimensionsDecorator();\n IModelApp.viewManager.addDecorator(decorator);\n setBboxDecorator(decorator);\n return () => {\n IModelApp.viewManager.dropDecorator(decorator);\n };\n }, []);\n\n useEffect(() => {\n const initialize = async () => {\n if (!iModelConnection) return;\n clearEmphasizedOverriddenElements();\n if (!colorProperty) return;\n setIsLoading(true);\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);\n setResolvedHiliteIds(result.ids);\n setIsLoading(false);\n };\n void initialize();\n }, [iModelConnection, hilitedElementsQueryCache, group, colorProperty]);\n\n useEffect(() => {\n if (!colorProperty || resolvedHiliteIds.length === 0) {\n return;\n }\n visualizeElements([resolvedHiliteIds[0]], \"red\");\n void zoomToElements([resolvedHiliteIds[0]]);\n }, [colorProperty, resolvedHiliteIds]);\n\n useEffect(() => {\n if (!colorProperty || resolvedHiliteIds.length === 0) {\n return;\n }\n const setContext = async () => {\n if (bboxDecorator) {\n await bboxDecorator.setContext(resolvedHiliteIds[0]);\n setInferredSpatialData(bboxDecorator.getInferredSpatialData());\n }\n };\n void setContext();\n }, [bboxDecorator, colorProperty, resolvedHiliteIds]);\n\n useEffect(() => {\n if (bboxDecorator && type && inferredSpatialData) {\n inferredSpatialData.has(BboxDimension[type as keyof typeof BboxDimension]) && colorProperty\n ? bboxDecorator.drawContext(\n BboxDimension[type as keyof typeof BboxDimension],\n )\n : bboxDecorator.clearContext();\n }\n }, [bboxDecorator, colorProperty, inferredSpatialData, type]);\n\n const onSave = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n\n const accessToken = await getAccessToken();\n\n calculatedProperty\n ? await mappingClient.updateCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n calculatedProperty.id,\n {\n propertyName,\n type,\n },\n )\n : await mappingClient.createCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n {\n propertyName,\n type,\n },\n );\n onSaveSuccess();\n setPropertyName(\"\");\n setType(CalculatedPropertyType.Undefined);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n const getSpatialData = (value: string) =>\n inferredSpatialData?.has(\n BboxDimension[value as keyof typeof BboxDimension],\n ) && (\n <div>\n {`${inferredSpatialData\n ?.get(BboxDimension[value as keyof typeof BboxDimension])\n ?.toPrecision(4)}m`}\n </div>\n );\n\n return (\n <>\n <div className='gmw-calculated-properties-action-container'>\n <Fieldset legend='Calculated Property Details' className='gmw-details-form'>\n <div className='gmw-field-legend-container'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <ToggleSwitch\n label='Visualize Dimensions'\n labelPosition='left'\n disabled={isLoading}\n checked={colorProperty}\n onChange={() => setColorProperty((b) => !b)}\n ></ToggleSwitch>\n </div>\n <LabeledInput\n value={propertyName}\n required\n name='name'\n label='Name'\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", propertyName, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", propertyName, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledSelect<CalculatedPropertyType>\n label='Quantity Type'\n required\n options={[\n { value: CalculatedPropertyType.Length, label: \"Length\" },\n { value: CalculatedPropertyType.Area, label: \"Area\" },\n { value: CalculatedPropertyType.Volume, label: \"Volume\" },\n {\n value: CalculatedPropertyType.BoundingBoxLongestEdgeLength,\n label: \"Longest Edge Length\",\n },\n {\n value: CalculatedPropertyType.BoundingBoxIntermediateEdgeLength,\n label: \"Intermediate Edge Length\",\n },\n {\n value: CalculatedPropertyType.BoundingBoxShortestEdgeLength,\n label: \"Shortest Edge Length\",\n },\n {\n value: CalculatedPropertyType.BoundingBoxDiagonalLength,\n label: \"Diagonal Length\",\n },\n {\n value: CalculatedPropertyType.BoundingBoxLongestFaceDiagonalLength,\n label: \"Longest Face Diagonal Length\",\n },\n {\n value: CalculatedPropertyType.BoundingBoxIntermediateFaceDiagonalLength,\n label: \"Intermediate Face Diagonal Length\",\n },\n {\n value: CalculatedPropertyType.BoundingBoxShortestFaceDiagonalLength,\n label: \"Shortest Face Diagonal Length\",\n },\n ]}\n value={type}\n onChange={setType}\n itemRenderer={(option: SelectOption<string>) => (\n <MenuItem>\n <div className='gmw-gr-cp-menu-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n </MenuItem>\n )}\n selectedItemRenderer={(option: SelectOption<string>) => (\n <div className='gmw-select-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n )}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!(type && propertyName)}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"CalculatedPropertyAction.js","sourceRoot":"","sources":["../../../../src/widget/components/CalculatedPropertyAction.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,wDAG8B;AAC9B,+CAAwC;AACxC,gEAAwC;AACxC,yEAAiD;AACjD,mCAAsC;AACtC,2CAAyC;AACzC,yEAAkE;AAClE,iFAAiF;AAEjF,4DAAgE;AAChE,mFAAgF;AAUzE,MAAM,wBAAwB,GAAG,CAAC,EACvC,SAAS,EACT,KAAK,EACL,kBAAkB,EAClB,aAAa,EACb,aAAa,GACiB,EAAE,EAAE;;IAClC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,sDAA2B,EAAE,CAAC;IACnE,MAAM,aAAa,GAAG,uCAAgB,EAAE,CAAC;IACzC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,gBAAQ,CAC9C,MAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,YAAY,mCAAI,EAAE,CACvC,CAAC;IACF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,gBAAQ,CAAqC,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,CAAC,CAAC;IAC/F,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAC3D,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,sBAAY,EAAE,CAAC;IAE1D,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE;YAClC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO;SACR;QACD,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,CAAC;YAEnB,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YAE3C,kBAAkB;gBAChB,CAAC,CAAC,MAAM,aAAa,CAAC,wBAAwB,CAC5C,WAAW,EACX,QAAQ,EACR,SAAS,EACT,KAAK,CAAC,EAAE,EACR,kBAAkB,CAAC,EAAE,EACrB;oBACE,YAAY;oBACZ,IAAI;iBACL,CACF;gBACD,CAAC,CAAC,MAAM,aAAa,CAAC,wBAAwB,CAC5C,WAAW,EACX,QAAQ,EACR,SAAS,EACT,KAAK,CAAC,EAAE,EACR;oBACE,YAAY;oBACZ,IAAI;iBACL,CACF,CAAC;YACJ,aAAa,EAAE,CAAC;YAChB,eAAe,CAAC,EAAE,CAAC,CAAC;YACpB,OAAO,CAAC,wCAAsB,CAAC,SAAS,CAAC,CAAC;SAC3C;QAAC,OAAO,KAAU,EAAE;YACnB,mBAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;gBAAS;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;IAEF,OAAO,CACL;QACE,uCAAK,SAAS,EAAC,4CAA4C;YACzD,8BAAC,wBAAQ,IAAC,MAAM,EAAC,6BAA6B,EAAC,SAAS,EAAC,kBAAkB;gBACzE,uCAAK,SAAS,EAAC,4BAA4B;oBACzC,8BAAC,qBAAK,IAAC,SAAS,EAAC,kBAAkB,6CAE3B,CACJ;gBACN,8BAAC,6DAA6B,IAC5B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,GAChB,CACO,CACP;QACN,8BAAC,qBAAW,IACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EACvB,gBAAgB,EAAE,CAAC,CAAC,IAAI,IAAI,YAAY,CAAC,EACzC,SAAS,EAAE,SAAS,GACpB,CACD,CACJ,CAAC;AACJ,CAAC,CAAC;AApFW,QAAA,wBAAwB,4BAoFnC","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 Fieldset,\n Small,\n} from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator from \"../hooks/useValidator\";\nimport { handleError } from \"./utils\";\nimport \"./CalculatedPropertyAction.scss\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CalculatedProperty, Group } from \"@itwin/insights-client\";\nimport { CalculatedPropertyType } from \"@itwin/insights-client\";\nimport { SharedCalculatedPropertyForms } from \"./SharedCalculatedPropertyForms\";\n\nexport interface CalculatedPropertyActionProps {\n mappingId: string;\n group: Group;\n calculatedProperty?: CalculatedProperty;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const CalculatedPropertyAction = ({\n mappingId,\n group,\n calculatedProperty,\n onSaveSuccess,\n onClickCancel,\n}: CalculatedPropertyActionProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\n calculatedProperty?.propertyName ?? \"\",\n );\n const [type, setType] = useState<CalculatedPropertyType | undefined>(calculatedProperty?.type);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [validator, showValidationMessage] = useValidator();\n\n const onSave = async () => {\n if (!validator.allValid() || !type) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n\n const accessToken = await getAccessToken();\n\n calculatedProperty\n ? await mappingClient.updateCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n calculatedProperty.id,\n {\n propertyName,\n type,\n },\n )\n : await mappingClient.createCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n {\n propertyName,\n type,\n },\n );\n onSaveSuccess();\n setPropertyName(\"\");\n setType(CalculatedPropertyType.Undefined);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <div className='gmw-calculated-properties-action-container'>\n <Fieldset legend='Calculated Property Details' className='gmw-details-form'>\n <div className='gmw-field-legend-container'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n </div>\n <SharedCalculatedPropertyForms\n validator={validator}\n propertyName={propertyName}\n setPropertyName={setPropertyName}\n type={type}\n setType={setType}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!(type && propertyName)}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- @import '~@itwin/itwinui-css/scss/variables';
5
+ @import "~@itwin/itwinui-css/scss/variables";
6
6
 
7
7
  .gmw-calculated-properties-action-container {
8
8
  overflow-x: auto;
@@ -12,16 +12,5 @@
12
12
  display: flex;
13
13
  flex-direction: column;
14
14
  gap: $iui-baseline;
15
-
16
- .gmw-select-item {
17
- display: flex;
18
- justify-content: space-between;
19
- width: 100%;
20
- }
21
15
  }
22
16
  }
23
-
24
- .gmw-gr-cp-menu-item {
25
- display: flex;
26
- justify-content: space-between;
27
- }
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import "./CalculatedPropertyActionWithVisuals.scss";
3
+ import type { CalculatedProperty, Group } from "@itwin/insights-client";
4
+ export interface CalculatedPropertyActionWithVisualsProps {
5
+ mappingId: string;
6
+ group: Group;
7
+ calculatedProperty?: CalculatedProperty;
8
+ onSaveSuccess: () => void;
9
+ onClickCancel?: () => void;
10
+ }
11
+ export declare const CalculatedPropertyActionWithVisuals: ({ mappingId, group, calculatedProperty, onSaveSuccess, onClickCancel, }: CalculatedPropertyActionWithVisualsProps) => JSX.Element;
12
+ //# sourceMappingURL=CalculatedPropertyActionWithVisuals.d.ts.map
@@ -0,0 +1,152 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.CalculatedPropertyActionWithVisuals = void 0;
26
+ /*---------------------------------------------------------------------------------------------
27
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
28
+ * See LICENSE.md in the project root for license terms and full copyright notice.
29
+ *--------------------------------------------------------------------------------------------*/
30
+ const core_frontend_1 = require("@itwin/core-frontend");
31
+ const itwinui_react_1 = require("@itwin/itwinui-react");
32
+ const react_1 = __importStar(require("react"));
33
+ const ActionPanel_1 = __importDefault(require("./ActionPanel"));
34
+ const BboxDimensionsDecorator_1 = require("../../decorators/BboxDimensionsDecorator");
35
+ const useValidator_1 = __importDefault(require("../hooks/useValidator"));
36
+ const utils_1 = require("./utils");
37
+ const viewerUtils_1 = require("./viewerUtils");
38
+ require("./CalculatedPropertyActionWithVisuals.scss");
39
+ const MappingClientContext_1 = require("./context/MappingClientContext");
40
+ const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
41
+ const GroupHilitedElementsContext_1 = require("./context/GroupHilitedElementsContext");
42
+ const groupsHelpers_1 = require("./groupsHelpers");
43
+ const SharedCalculatedPropertyForms_1 = require("./SharedCalculatedPropertyForms");
44
+ const CalculatedPropertyActionWithVisuals = ({ mappingId, group, calculatedProperty, onSaveSuccess, onClickCancel, }) => {
45
+ var _a;
46
+ const { getAccessToken, iModelId, iModelConnection } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
47
+ const mappingClient = MappingClientContext_1.useMappingClient();
48
+ const [propertyName, setPropertyName] = react_1.useState((_a = calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.propertyName) !== null && _a !== void 0 ? _a : "");
49
+ const [type, setType] = react_1.useState(calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.type);
50
+ const [bboxDecorator, setBboxDecorator] = react_1.useState();
51
+ const [isLoading, setIsLoading] = react_1.useState(false);
52
+ const { hilitedElementsQueryCache } = GroupHilitedElementsContext_1.useGroupHilitedElementsContext();
53
+ const [inferredSpatialData, setInferredSpatialData] = react_1.useState();
54
+ const [validator, showValidationMessage] = useValidator_1.default();
55
+ const [resolvedHiliteIds, setResolvedHiliteIds] = react_1.useState([]);
56
+ const [colorProperty, setColorProperty] = react_1.useState(false);
57
+ react_1.useEffect(() => {
58
+ const decorator = new BboxDimensionsDecorator_1.BboxDimensionsDecorator();
59
+ core_frontend_1.IModelApp.viewManager.addDecorator(decorator);
60
+ setBboxDecorator(decorator);
61
+ return () => {
62
+ core_frontend_1.IModelApp.viewManager.dropDecorator(decorator);
63
+ };
64
+ }, []);
65
+ react_1.useEffect(() => {
66
+ const initialize = async () => {
67
+ if (!iModelConnection)
68
+ return;
69
+ viewerUtils_1.clearEmphasizedOverriddenElements();
70
+ if (!colorProperty)
71
+ return;
72
+ setIsLoading(true);
73
+ const result = await groupsHelpers_1.getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);
74
+ setResolvedHiliteIds(result.ids);
75
+ setIsLoading(false);
76
+ };
77
+ void initialize();
78
+ }, [iModelConnection, hilitedElementsQueryCache, group, colorProperty]);
79
+ react_1.useEffect(() => {
80
+ if (!colorProperty || resolvedHiliteIds.length === 0) {
81
+ return;
82
+ }
83
+ viewerUtils_1.visualizeElements([resolvedHiliteIds[0]], "red");
84
+ void viewerUtils_1.zoomToElements([resolvedHiliteIds[0]]);
85
+ }, [colorProperty, resolvedHiliteIds]);
86
+ react_1.useEffect(() => {
87
+ if (!colorProperty || resolvedHiliteIds.length === 0) {
88
+ return;
89
+ }
90
+ const setContext = async () => {
91
+ if (bboxDecorator) {
92
+ await bboxDecorator.setContext(resolvedHiliteIds[0]);
93
+ setInferredSpatialData(bboxDecorator.getInferredSpatialData());
94
+ }
95
+ };
96
+ void setContext();
97
+ }, [bboxDecorator, colorProperty, resolvedHiliteIds]);
98
+ react_1.useEffect(() => {
99
+ if (bboxDecorator && type && inferredSpatialData) {
100
+ inferredSpatialData.has(BboxDimensionsDecorator_1.BboxDimension[type]) && colorProperty
101
+ ? bboxDecorator.drawContext(BboxDimensionsDecorator_1.BboxDimension[type])
102
+ : bboxDecorator.clearContext();
103
+ }
104
+ }, [bboxDecorator, colorProperty, inferredSpatialData, type]);
105
+ const onSave = async () => {
106
+ if (!validator.allValid() || !type) {
107
+ showValidationMessage(true);
108
+ return;
109
+ }
110
+ try {
111
+ setIsLoading(true);
112
+ const accessToken = await getAccessToken();
113
+ calculatedProperty
114
+ ? await mappingClient.updateCalculatedProperty(accessToken, iModelId, mappingId, group.id, calculatedProperty.id, {
115
+ propertyName,
116
+ type,
117
+ })
118
+ : await mappingClient.createCalculatedProperty(accessToken, iModelId, mappingId, group.id, {
119
+ propertyName,
120
+ type,
121
+ });
122
+ onSaveSuccess();
123
+ setPropertyName("");
124
+ setType(undefined);
125
+ }
126
+ catch (error) {
127
+ utils_1.handleError(error.status);
128
+ }
129
+ finally {
130
+ setIsLoading(false);
131
+ }
132
+ };
133
+ const getSpatialData = (value) => {
134
+ var _a;
135
+ return (inferredSpatialData === null || inferredSpatialData === void 0 ? void 0 : inferredSpatialData.has(BboxDimensionsDecorator_1.BboxDimension[value])) && (react_1.default.createElement("div", null, `${(_a = inferredSpatialData === null || inferredSpatialData === void 0 ? void 0 : inferredSpatialData.get(BboxDimensionsDecorator_1.BboxDimension[value])) === null || _a === void 0 ? void 0 : _a.toPrecision(4)}m`));
136
+ };
137
+ return (react_1.default.createElement(react_1.default.Fragment, null,
138
+ react_1.default.createElement("div", { className: 'gmw-calculated-properties-action-container' },
139
+ react_1.default.createElement(itwinui_react_1.Fieldset, { legend: 'Calculated Property Details', className: 'gmw-details-form' },
140
+ react_1.default.createElement("div", { className: 'gmw-field-legend-container' },
141
+ react_1.default.createElement(itwinui_react_1.Small, { className: 'gmw-field-legend' }, "Asterisk * indicates mandatory fields."),
142
+ react_1.default.createElement(itwinui_react_1.ToggleSwitch, { label: 'Visualize Dimensions', labelPosition: 'left', disabled: isLoading, checked: colorProperty, onChange: () => setColorProperty((b) => !b) })),
143
+ react_1.default.createElement(SharedCalculatedPropertyForms_1.SharedCalculatedPropertyForms, { validator: validator, propertyName: propertyName, setPropertyName: setPropertyName, type: type, setType: setType, itemRenderer: (option) => (react_1.default.createElement(itwinui_react_1.MenuItem, null,
144
+ react_1.default.createElement("div", { className: 'gmw-gr-cp-menu-item' },
145
+ react_1.default.createElement("div", null, option.label),
146
+ getSpatialData(option.value)))), selectedItemRenderer: (option) => (react_1.default.createElement("div", { className: 'gmw-select-item' },
147
+ react_1.default.createElement("div", null, option.label),
148
+ getSpatialData(option.value))) }))),
149
+ react_1.default.createElement(ActionPanel_1.default, { onSave: onSave, onCancel: onClickCancel, isSavingDisabled: !(type && propertyName), isLoading: isLoading })));
150
+ };
151
+ exports.CalculatedPropertyActionWithVisuals = CalculatedPropertyActionWithVisuals;
152
+ //# sourceMappingURL=CalculatedPropertyActionWithVisuals.js.map