@itwin/grouping-mapping-widget 0.11.1 → 0.12.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 (189) hide show
  1. package/lib/cjs/grouping-mapping-widget.d.ts +4 -1
  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/WidgetHeader.test.js +3 -3
  5. package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
  6. package/lib/cjs/widget/components/CalculatedPropertyAction.d.ts +7 -9
  7. package/lib/cjs/widget/components/CalculatedPropertyAction.js +49 -24
  8. package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
  9. package/lib/cjs/widget/components/CalculatedPropertyTable.d.ts +9 -16
  10. package/lib/cjs/widget/components/CalculatedPropertyTable.js +29 -31
  11. package/lib/cjs/widget/components/CalculatedPropertyTable.js.map +1 -1
  12. package/lib/cjs/widget/components/CalculatedPropertyTable.scss +9 -0
  13. package/lib/cjs/widget/components/CustomCalculationAction.d.ts +6 -9
  14. package/lib/cjs/widget/components/CustomCalculationAction.js +79 -9
  15. package/lib/cjs/widget/components/CustomCalculationAction.js.map +1 -1
  16. package/lib/cjs/widget/components/CustomCalculationTable.d.ts +8 -16
  17. package/lib/cjs/widget/components/CustomCalculationTable.js +22 -29
  18. package/lib/cjs/widget/components/CustomCalculationTable.js.map +1 -1
  19. package/lib/cjs/widget/components/DeleteModal.d.ts +4 -5
  20. package/lib/cjs/widget/components/DeleteModal.js +9 -13
  21. package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
  22. package/lib/cjs/widget/components/GroupAction.js +1 -0
  23. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  24. package/lib/cjs/widget/components/GroupInformationPanel.d.ts +10 -0
  25. package/lib/cjs/widget/components/GroupInformationPanel.js +23 -0
  26. package/lib/cjs/widget/components/GroupInformationPanel.js.map +1 -0
  27. package/lib/cjs/widget/components/GroupInformationPanel.scss +13 -0
  28. package/lib/cjs/widget/components/GroupPropertyAction.d.ts +6 -9
  29. package/lib/cjs/widget/components/GroupPropertyAction.js +26 -15
  30. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  31. package/lib/cjs/widget/components/GroupPropertyTable.d.ts +8 -15
  32. package/lib/cjs/widget/components/GroupPropertyTable.js +23 -28
  33. package/lib/cjs/widget/components/GroupPropertyTable.js.map +1 -1
  34. package/lib/cjs/widget/components/Grouping.d.ts +2 -1
  35. package/lib/cjs/widget/components/Grouping.js +12 -15
  36. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  37. package/lib/cjs/widget/components/Grouping.scss +2 -9
  38. package/lib/cjs/widget/components/GroupingMapping.js +1 -2
  39. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  40. package/lib/cjs/widget/components/GroupingMappingContent.js +8 -4
  41. package/lib/cjs/widget/components/GroupingMappingContent.js.map +1 -1
  42. package/lib/cjs/widget/components/GroupingMappingContext.js +17 -1
  43. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
  44. package/lib/cjs/widget/components/GroupingMappingHeader.js +2 -2
  45. package/lib/cjs/widget/components/GroupingMappingHeader.js.map +1 -1
  46. package/lib/cjs/widget/components/GroupingMappingRouter.js +23 -2
  47. package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -1
  48. package/lib/cjs/widget/components/GroupsAddButton.d.ts +9 -0
  49. package/lib/cjs/widget/components/GroupsAddButton.js +17 -0
  50. package/lib/cjs/widget/components/GroupsAddButton.js.map +1 -0
  51. package/lib/cjs/widget/components/GroupsAddButton.scss +7 -0
  52. package/lib/cjs/widget/components/Mapping.js +5 -11
  53. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  54. package/lib/cjs/widget/components/PropertyMenu.d.ts +12 -17
  55. package/lib/cjs/widget/components/PropertyMenu.js +52 -155
  56. package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
  57. package/lib/cjs/widget/components/PropertyMenu.scss +4 -28
  58. package/lib/cjs/widget/components/PropertyNameCell.d.ts +11 -0
  59. package/lib/cjs/widget/components/PropertyNameCell.js +15 -0
  60. package/lib/cjs/widget/components/PropertyNameCell.js.map +1 -0
  61. package/lib/cjs/widget/components/PropertyTable.d.ts +18 -0
  62. package/lib/cjs/widget/components/PropertyTable.js +54 -0
  63. package/lib/cjs/widget/components/PropertyTable.js.map +1 -0
  64. package/lib/cjs/widget/components/PropertyTable.scss +11 -0
  65. package/lib/cjs/widget/components/PropertyTableToolbar.d.ts +10 -0
  66. package/lib/cjs/widget/components/PropertyTableToolbar.js +23 -0
  67. package/lib/cjs/widget/components/PropertyTableToolbar.js.map +1 -0
  68. package/lib/cjs/widget/components/PropertyTableToolbar.scss +12 -0
  69. package/lib/cjs/widget/components/ToggleGroupVisibility.d.ts +9 -0
  70. package/lib/cjs/widget/components/ToggleGroupVisibility.js +16 -0
  71. package/lib/cjs/widget/components/ToggleGroupVisibility.js.map +1 -0
  72. package/lib/cjs/widget/components/ToggleGroupVisibility.scss +9 -0
  73. package/lib/cjs/widget/components/WidgetHeader.d.ts +9 -0
  74. package/lib/cjs/widget/components/WidgetHeader.js +22 -0
  75. package/lib/cjs/widget/components/WidgetHeader.js.map +1 -0
  76. package/lib/cjs/widget/components/WidgetHeader.scss +36 -0
  77. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.d.ts +6 -1
  78. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  79. package/lib/cjs/widget/components/context/PropertiesContext.d.ts +15 -0
  80. package/lib/cjs/widget/components/context/PropertiesContext.js +43 -0
  81. package/lib/cjs/widget/components/context/PropertiesContext.js.map +1 -0
  82. package/lib/cjs/widget/components/groupsHelpers.d.ts +6 -3
  83. package/lib/cjs/widget/components/groupsHelpers.js +43 -40
  84. package/lib/cjs/widget/components/groupsHelpers.js.map +1 -1
  85. package/lib/cjs/widget/components/utils.d.ts +0 -6
  86. package/lib/cjs/widget/components/utils.js +1 -9
  87. package/lib/cjs/widget/components/utils.js.map +1 -1
  88. package/lib/cjs/widget/components/utils.scss +0 -29
  89. package/lib/cjs/widget/components/viewerUtils.d.ts +4 -2
  90. package/lib/cjs/widget/components/viewerUtils.js +4 -22
  91. package/lib/cjs/widget/components/viewerUtils.js.map +1 -1
  92. package/lib/cjs/widget/hooks/useFetchData.d.ts +3 -5
  93. package/lib/cjs/widget/hooks/useFetchData.js +9 -7
  94. package/lib/cjs/widget/hooks/useFetchData.js.map +1 -1
  95. package/lib/esm/grouping-mapping-widget.d.ts +4 -1
  96. package/lib/esm/grouping-mapping-widget.js +3 -0
  97. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  98. package/lib/esm/test/WidgetHeader.test.js +1 -1
  99. package/lib/esm/test/WidgetHeader.test.js.map +1 -1
  100. package/lib/esm/widget/components/CalculatedPropertyAction.d.ts +7 -9
  101. package/lib/esm/widget/components/CalculatedPropertyAction.js +50 -27
  102. package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
  103. package/lib/esm/widget/components/CalculatedPropertyTable.d.ts +9 -16
  104. package/lib/esm/widget/components/CalculatedPropertyTable.js +30 -31
  105. package/lib/esm/widget/components/CalculatedPropertyTable.js.map +1 -1
  106. package/lib/esm/widget/components/CalculatedPropertyTable.scss +9 -0
  107. package/lib/esm/widget/components/CustomCalculationAction.d.ts +6 -9
  108. package/lib/esm/widget/components/CustomCalculationAction.js +79 -11
  109. package/lib/esm/widget/components/CustomCalculationAction.js.map +1 -1
  110. package/lib/esm/widget/components/CustomCalculationTable.d.ts +8 -16
  111. package/lib/esm/widget/components/CustomCalculationTable.js +23 -29
  112. package/lib/esm/widget/components/CustomCalculationTable.js.map +1 -1
  113. package/lib/esm/widget/components/DeleteModal.d.ts +4 -5
  114. package/lib/esm/widget/components/DeleteModal.js +9 -13
  115. package/lib/esm/widget/components/DeleteModal.js.map +1 -1
  116. package/lib/esm/widget/components/GroupAction.js +1 -0
  117. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  118. package/lib/esm/widget/components/GroupInformationPanel.d.ts +10 -0
  119. package/lib/esm/widget/components/GroupInformationPanel.js +16 -0
  120. package/lib/esm/widget/components/GroupInformationPanel.js.map +1 -0
  121. package/lib/esm/widget/components/GroupInformationPanel.scss +13 -0
  122. package/lib/esm/widget/components/GroupPropertyAction.d.ts +6 -9
  123. package/lib/esm/widget/components/GroupPropertyAction.js +25 -15
  124. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  125. package/lib/esm/widget/components/GroupPropertyTable.d.ts +8 -15
  126. package/lib/esm/widget/components/GroupPropertyTable.js +24 -28
  127. package/lib/esm/widget/components/GroupPropertyTable.js.map +1 -1
  128. package/lib/esm/widget/components/Grouping.d.ts +2 -1
  129. package/lib/esm/widget/components/Grouping.js +14 -17
  130. package/lib/esm/widget/components/Grouping.js.map +1 -1
  131. package/lib/esm/widget/components/Grouping.scss +2 -9
  132. package/lib/esm/widget/components/GroupingMapping.js +1 -2
  133. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  134. package/lib/esm/widget/components/GroupingMappingContent.js +9 -5
  135. package/lib/esm/widget/components/GroupingMappingContent.js.map +1 -1
  136. package/lib/esm/widget/components/GroupingMappingContext.js +17 -1
  137. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
  138. package/lib/esm/widget/components/GroupingMappingHeader.js +1 -1
  139. package/lib/esm/widget/components/GroupingMappingHeader.js.map +1 -1
  140. package/lib/esm/widget/components/GroupingMappingRouter.js +23 -2
  141. package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -1
  142. package/lib/esm/widget/components/GroupsAddButton.d.ts +9 -0
  143. package/lib/esm/widget/components/GroupsAddButton.js +10 -0
  144. package/lib/esm/widget/components/GroupsAddButton.js.map +1 -0
  145. package/lib/esm/widget/components/GroupsAddButton.scss +7 -0
  146. package/lib/esm/widget/components/Mapping.js +5 -11
  147. package/lib/esm/widget/components/Mapping.js.map +1 -1
  148. package/lib/esm/widget/components/PropertyMenu.d.ts +12 -17
  149. package/lib/esm/widget/components/PropertyMenu.js +54 -154
  150. package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
  151. package/lib/esm/widget/components/PropertyMenu.scss +4 -28
  152. package/lib/esm/widget/components/PropertyNameCell.d.ts +11 -0
  153. package/lib/esm/widget/components/PropertyNameCell.js +8 -0
  154. package/lib/esm/widget/components/PropertyNameCell.js.map +1 -0
  155. package/lib/esm/widget/components/PropertyTable.d.ts +18 -0
  156. package/lib/esm/widget/components/PropertyTable.js +28 -0
  157. package/lib/esm/widget/components/PropertyTable.js.map +1 -0
  158. package/lib/esm/widget/components/PropertyTable.scss +11 -0
  159. package/lib/esm/widget/components/PropertyTableToolbar.d.ts +10 -0
  160. package/lib/esm/widget/components/PropertyTableToolbar.js +16 -0
  161. package/lib/esm/widget/components/PropertyTableToolbar.js.map +1 -0
  162. package/lib/esm/widget/components/PropertyTableToolbar.scss +12 -0
  163. package/lib/esm/widget/components/ToggleGroupVisibility.d.ts +9 -0
  164. package/lib/esm/widget/components/ToggleGroupVisibility.js +9 -0
  165. package/lib/esm/widget/components/ToggleGroupVisibility.js.map +1 -0
  166. package/lib/esm/widget/components/ToggleGroupVisibility.scss +9 -0
  167. package/lib/esm/widget/components/WidgetHeader.d.ts +9 -0
  168. package/lib/esm/widget/components/WidgetHeader.js +15 -0
  169. package/lib/esm/widget/components/WidgetHeader.js.map +1 -0
  170. package/lib/esm/widget/components/WidgetHeader.scss +36 -0
  171. package/lib/esm/widget/components/context/GroupHilitedElementsContext.d.ts +6 -1
  172. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  173. package/lib/esm/widget/components/context/PropertiesContext.d.ts +15 -0
  174. package/lib/esm/widget/components/context/PropertiesContext.js +20 -0
  175. package/lib/esm/widget/components/context/PropertiesContext.js.map +1 -0
  176. package/lib/esm/widget/components/groupsHelpers.d.ts +6 -3
  177. package/lib/esm/widget/components/groupsHelpers.js +41 -40
  178. package/lib/esm/widget/components/groupsHelpers.js.map +1 -1
  179. package/lib/esm/widget/components/utils.d.ts +0 -6
  180. package/lib/esm/widget/components/utils.js +0 -7
  181. package/lib/esm/widget/components/utils.js.map +1 -1
  182. package/lib/esm/widget/components/utils.scss +0 -29
  183. package/lib/esm/widget/components/viewerUtils.d.ts +4 -2
  184. package/lib/esm/widget/components/viewerUtils.js +3 -20
  185. package/lib/esm/widget/components/viewerUtils.js.map +1 -1
  186. package/lib/esm/widget/hooks/useFetchData.d.ts +3 -5
  187. package/lib/esm/widget/hooks/useFetchData.js +9 -7
  188. package/lib/esm/widget/hooks/useFetchData.js.map +1 -1
  189. package/package.json +1 -1
@@ -22,6 +22,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.CustomCalculationAction = void 0;
25
26
  /*---------------------------------------------------------------------------------------------
26
27
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
27
28
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -38,17 +39,84 @@ const useFormulaValidation_1 = require("../hooks/useFormulaValidation");
38
39
  const MappingClientContext_1 = require("./context/MappingClientContext");
39
40
  const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
40
41
  const insights_client_1 = require("@itwin/insights-client");
41
- const CustomCalculationAction = ({ iModelId, mappingId, groupId, properties, customCalculation, returnFn, }) => {
42
+ const PropertiesContext_1 = require("./context/PropertiesContext");
43
+ const stringToPossibleDataType = (str) => {
44
+ switch (str === null || str === void 0 ? void 0 : str.toLowerCase()) {
45
+ case "double":
46
+ case "number": return "Number";
47
+ case "string": return "String";
48
+ case "boolean": return "Boolean";
49
+ default: return "Undefined";
50
+ }
51
+ };
52
+ const convertToPropertyMap = (groupProperties, calculatedProperties, customCalculations, selectedPropertyName) => {
53
+ const map = {};
54
+ const selectedLowerName = selectedPropertyName === null || selectedPropertyName === void 0 ? void 0 : selectedPropertyName.toLowerCase();
55
+ groupProperties.forEach((p) => {
56
+ var _a;
57
+ const lowerName = (_a = p.propertyName) === null || _a === void 0 ? void 0 : _a.toLowerCase();
58
+ if (lowerName && lowerName !== selectedLowerName)
59
+ map[lowerName] = stringToPossibleDataType(p.dataType);
60
+ });
61
+ calculatedProperties.forEach((p) => {
62
+ var _a;
63
+ const lowerName = (_a = p.propertyName) === null || _a === void 0 ? void 0 : _a.toLowerCase();
64
+ if (lowerName)
65
+ map[lowerName] = "Number";
66
+ });
67
+ customCalculations.forEach((p) => {
68
+ var _a;
69
+ const lowerName = (_a = p.propertyName) === null || _a === void 0 ? void 0 : _a.toLowerCase();
70
+ if (lowerName && lowerName !== selectedLowerName)
71
+ map[lowerName] = stringToPossibleDataType(p.dataType);
72
+ });
73
+ return map;
74
+ };
75
+ const CustomCalculationAction = ({ mappingId, groupId, customCalculation, onSaveSuccess, onClickCancel, }) => {
42
76
  var _a, _b, _c;
43
- const { getAccessToken } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
77
+ const { getAccessToken, iModelId } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
44
78
  const mappingClient = MappingClientContext_1.useMappingClient();
45
79
  const [propertyName, setPropertyName] = react_1.useState((_a = customCalculation === null || customCalculation === void 0 ? void 0 : customCalculation.propertyName) !== null && _a !== void 0 ? _a : "");
46
80
  const [formula, setFormula] = react_1.useState((_b = customCalculation === null || customCalculation === void 0 ? void 0 : customCalculation.formula) !== null && _b !== void 0 ? _b : "");
81
+ const { groupProperties, setGroupProperties, calculatedProperties, setCalculatedProperties, customCalculationProperties, setCustomCalculationProperties, } = PropertiesContext_1.usePropertiesContext();
47
82
  const [quantityType, setQuantityType] = react_1.useState((_c = customCalculation === null || customCalculation === void 0 ? void 0 : customCalculation.quantityType) !== null && _c !== void 0 ? _c : insights_client_1.QuantityType.Undefined);
48
- const [isLoading, setIsLoading] = react_1.useState(false);
83
+ const [isLoading, setIsLoading] = react_1.useState(true);
49
84
  const [formulaErrorMessage, setFormulaErrorMessage] = react_1.useState("");
50
85
  const [validator, showValidationMessage] = useValidator_1.default();
86
+ const [properties, setProperties] = react_1.useState({});
51
87
  const { isValid, forceValidation } = useFormulaValidation_1.useFormulaValidation(propertyName.toLowerCase(), formula, properties, setFormulaErrorMessage);
88
+ const initialize = react_1.useCallback(async () => {
89
+ const accessToken = await getAccessToken();
90
+ const [groupProps, calcProps, customCalcProps] = await Promise.all([
91
+ mappingClient.getGroupProperties(accessToken, iModelId, mappingId, groupId),
92
+ mappingClient.getCalculatedProperties(accessToken, iModelId, mappingId, groupId),
93
+ mappingClient.getCustomCalculations(accessToken, iModelId, mappingId, groupId),
94
+ ]);
95
+ setGroupProperties(groupProps);
96
+ setCalculatedProperties(calcProps);
97
+ setCustomCalculationProperties(customCalcProps);
98
+ }, [getAccessToken, groupId, iModelId, mappingClient, mappingId, setCalculatedProperties, setCustomCalculationProperties, setGroupProperties]);
99
+ const fetchAllProperties = react_1.useCallback(async () => {
100
+ setIsLoading(true);
101
+ try {
102
+ if (!groupProperties || !calculatedProperties || !customCalculationProperties) {
103
+ await initialize();
104
+ }
105
+ }
106
+ catch (error) {
107
+ utils_1.handleError(error.status);
108
+ }
109
+ finally {
110
+ setIsLoading(false);
111
+ }
112
+ }, [calculatedProperties, customCalculationProperties, groupProperties, initialize]);
113
+ react_1.useEffect(() => {
114
+ const propertiesMap = convertToPropertyMap(groupProperties !== null && groupProperties !== void 0 ? groupProperties : [], calculatedProperties !== null && calculatedProperties !== void 0 ? calculatedProperties : [], customCalculationProperties !== null && customCalculationProperties !== void 0 ? customCalculationProperties : []);
115
+ setProperties(propertiesMap);
116
+ }, [calculatedProperties, customCalculationProperties, groupProperties]);
117
+ react_1.useEffect(() => {
118
+ void fetchAllProperties();
119
+ }, [fetchAllProperties]);
52
120
  const onSave = async () => {
53
121
  if (!validator.allValid()) {
54
122
  showValidationMessage(true);
@@ -71,7 +139,10 @@ const CustomCalculationAction = ({ iModelId, mappingId, groupId, properties, cus
71
139
  formula,
72
140
  quantityType,
73
141
  });
74
- await returnFn(true);
142
+ onSaveSuccess();
143
+ setPropertyName("");
144
+ setFormula("");
145
+ setQuantityType(insights_client_1.QuantityType.Undefined);
75
146
  }
76
147
  catch (error) {
77
148
  // error instanceof Response refuses to be true when it should be.
@@ -86,13 +157,12 @@ const CustomCalculationAction = ({ iModelId, mappingId, groupId, properties, cus
86
157
  else {
87
158
  utils_1.handleError(error.status);
88
159
  }
160
+ }
161
+ finally {
89
162
  setIsLoading(false);
90
163
  }
91
164
  };
92
165
  return (react_1.default.createElement(react_1.default.Fragment, null,
93
- react_1.default.createElement(utils_1.WidgetHeader, { title: customCalculation
94
- ? `${customCalculation.propertyName}`
95
- : "Create Custom Calculation", returnFn: async () => returnFn(false) }),
96
166
  react_1.default.createElement("div", { className: 'gmw-custom-calculation-action-container' },
97
167
  react_1.default.createElement(itwinui_react_1.Fieldset, { legend: 'Custom Calculation Details', className: 'gmw-details-form' },
98
168
  react_1.default.createElement(itwinui_react_1.Small, { className: 'gmw-field-legend' }, "Asterisk * indicates mandatory fields."),
@@ -111,7 +181,7 @@ const CustomCalculationAction = ({ iModelId, mappingId, groupId, properties, cus
111
181
  setFormula(event.target.value);
112
182
  }, message: formulaErrorMessage, status: formulaErrorMessage ? "negative" : undefined }),
113
183
  react_1.default.createElement(itwinui_react_1.LabeledSelect, { label: 'Quantity Type', disabled: isLoading, options: GroupPropertyAction_1.quantityTypesSelectionOptions, value: quantityType, onChange: setQuantityType, onShow: () => { }, onHide: () => { } }))),
114
- react_1.default.createElement(ActionPanel_1.default, { onSave: onSave, onCancel: async () => returnFn(false), isSavingDisabled: !(formula && propertyName && isValid), isLoading: isLoading })));
184
+ react_1.default.createElement(ActionPanel_1.default, { onSave: onSave, onCancel: onClickCancel, isSavingDisabled: !(formula && propertyName && isValid), isLoading: isLoading })));
115
185
  };
116
- exports.default = CustomCalculationAction;
186
+ exports.CustomCalculationAction = CustomCalculationAction;
117
187
  //# sourceMappingURL=CustomCalculationAction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomCalculationAction.js","sourceRoot":"","sources":["../../../../src/widget/components/CustomCalculationAction.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 Fieldset,\n LabeledInput,\n LabeledSelect,\n LabeledTextarea,\n Small,\n} from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, WidgetHeader } from \"./utils\";\nimport \"./CalculatedPropertyAction.scss\";\nimport type { ICustomCalculationTyped } from \"./CustomCalculationTable\";\nimport \"./CustomCalculationAction.scss\";\nimport { quantityTypesSelectionOptions } from \"./GroupPropertyAction\";\nimport { useFormulaValidation } from \"../hooks/useFormulaValidation\";\nimport type { PropertyMap } from \"../../formula/Types\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { QuantityType } from \"@itwin/insights-client\";\n\ninterface CalculatedPropertyActionProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n properties: PropertyMap;\n customCalculation?: ICustomCalculationTyped;\n returnFn: (modified: boolean) => Promise<void>;\n}\n\nconst CustomCalculationAction = ({\n iModelId,\n mappingId,\n groupId,\n properties,\n customCalculation,\n returnFn,\n}: CalculatedPropertyActionProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\n customCalculation?.propertyName ?? \"\",\n );\n const [formula, setFormula] = useState<string>(\n customCalculation?.formula ?? \"\",\n );\n const [quantityType, setQuantityType] = useState<QuantityType>(customCalculation?.quantityType ?? QuantityType.Undefined);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [formulaErrorMessage, setFormulaErrorMessage] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const { isValid, forceValidation } = useFormulaValidation(propertyName.toLowerCase(), formula, properties, setFormulaErrorMessage);\n\n const onSave = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n if (!forceValidation()) {\n return;\n }\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n customCalculation\n ? await mappingClient.updateCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n customCalculation.id,\n {\n propertyName,\n formula,\n quantityType,\n }\n )\n : await mappingClient.createCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n {\n propertyName,\n formula,\n quantityType,\n }\n );\n await returnFn(true);\n } catch (error: any) {\n // error instanceof Response refuses to be true when it should be.\n if (error.status === 422) {\n error = error as Response;\n const erroredResponse = await error.json();\n if (\n erroredResponse.error.code === \"InvalidInsightsRequest\" &&\n erroredResponse.error.target === \"formula\"\n ) {\n setFormulaErrorMessage(erroredResponse.error.message);\n }\n } else {\n handleError(error.status);\n }\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <WidgetHeader\n title={\n customCalculation\n ? `${customCalculation.propertyName}`\n : \"Create Custom Calculation\"\n }\n returnFn={async () => returnFn(false)}\n />\n <div className='gmw-custom-calculation-action-container'>\n <Fieldset legend='Custom Calculation Details' className='gmw-details-form'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n value={propertyName}\n required\n name='name'\n label='Name'\n disabled={isLoading}\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 <LabeledTextarea\n value={formula}\n required\n name='formula'\n label='Formula'\n disabled={isLoading}\n onChange={(event) => {\n setFormula(event.target.value);\n }}\n message={formulaErrorMessage}\n status={formulaErrorMessage ? \"negative\" : undefined}\n />\n <LabeledSelect<QuantityType>\n label='Quantity Type'\n disabled={isLoading}\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={async () => returnFn(false)}\n isSavingDisabled={!(formula && propertyName && isValid)}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default CustomCalculationAction;\n"]}
1
+ {"version":3,"file":"CustomCalculationAction.js","sourceRoot":"","sources":["../../../../src/widget/components/CustomCalculationAction.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 Fieldset,\n LabeledInput,\n LabeledSelect,\n LabeledTextarea,\n Small,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError } from \"./utils\";\nimport \"./CalculatedPropertyAction.scss\";\nimport \"./CustomCalculationAction.scss\";\nimport { quantityTypesSelectionOptions } from \"./GroupPropertyAction\";\nimport { useFormulaValidation } from \"../hooks/useFormulaValidation\";\nimport type { PossibleDataType, PropertyMap } from \"../../formula/Types\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CalculatedProperty, CustomCalculation, GroupProperty } from \"@itwin/insights-client\";\nimport { QuantityType } from \"@itwin/insights-client\";\nimport { usePropertiesContext } from \"./context/PropertiesContext\";\n\nexport interface CustomCalculationActionProps {\n mappingId: string;\n groupId: string;\n customCalculation?: CustomCalculation;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nconst stringToPossibleDataType = (str?: string): PossibleDataType => {\n switch (str?.toLowerCase()) {\n case \"double\":\n case \"number\": return \"Number\";\n case \"string\": return \"String\";\n case \"boolean\": return \"Boolean\";\n default: return \"Undefined\";\n }\n};\n\nconst convertToPropertyMap = (\n groupProperties: GroupProperty[],\n calculatedProperties: CalculatedProperty[],\n customCalculations: CustomCalculation[],\n selectedPropertyName?: string\n): PropertyMap => {\n const map: PropertyMap = {};\n const selectedLowerName = selectedPropertyName?.toLowerCase();\n\n groupProperties.forEach((p) => {\n const lowerName = p.propertyName?.toLowerCase();\n if (lowerName && lowerName !== selectedLowerName)\n map[lowerName] = stringToPossibleDataType(p.dataType);\n });\n\n calculatedProperties.forEach((p) => {\n const lowerName = p.propertyName?.toLowerCase();\n if (lowerName)\n map[lowerName] = \"Number\";\n });\n\n customCalculations.forEach((p) => {\n const lowerName = p.propertyName?.toLowerCase();\n if (lowerName && lowerName !== selectedLowerName)\n map[lowerName] = stringToPossibleDataType(p.dataType);\n });\n\n return map;\n};\n\nexport const CustomCalculationAction = ({\n mappingId,\n groupId,\n customCalculation,\n onSaveSuccess,\n onClickCancel,\n}: CustomCalculationActionProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\n customCalculation?.propertyName ?? \"\",\n );\n const [formula, setFormula] = useState<string>(\n customCalculation?.formula ?? \"\",\n );\n const {\n groupProperties,\n setGroupProperties,\n calculatedProperties,\n setCalculatedProperties,\n customCalculationProperties,\n setCustomCalculationProperties,\n } = usePropertiesContext();\n const [quantityType, setQuantityType] = useState<QuantityType>(customCalculation?.quantityType ?? QuantityType.Undefined);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [formulaErrorMessage, setFormulaErrorMessage] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [properties, setProperties] = useState<PropertyMap>({});\n const { isValid, forceValidation } = useFormulaValidation(propertyName.toLowerCase(), formula, properties, setFormulaErrorMessage);\n\n const initialize = useCallback(async () => {\n const accessToken = await getAccessToken();\n const [groupProps, calcProps, customCalcProps] = await Promise.all([\n mappingClient.getGroupProperties(accessToken, iModelId, mappingId, groupId),\n mappingClient.getCalculatedProperties(accessToken, iModelId, mappingId, groupId),\n mappingClient.getCustomCalculations(accessToken, iModelId, mappingId, groupId),\n ]);\n setGroupProperties(groupProps);\n setCalculatedProperties(calcProps);\n setCustomCalculationProperties(customCalcProps);\n }, [getAccessToken, groupId, iModelId, mappingClient, mappingId, setCalculatedProperties, setCustomCalculationProperties, setGroupProperties]);\n\n const fetchAllProperties = useCallback(async () => {\n setIsLoading(true);\n try {\n if (!groupProperties || !calculatedProperties || !customCalculationProperties) {\n await initialize();\n }\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [calculatedProperties, customCalculationProperties, groupProperties, initialize]);\n\n useEffect(() => {\n const propertiesMap = convertToPropertyMap(groupProperties ?? [], calculatedProperties ?? [], customCalculationProperties ?? []);\n setProperties(propertiesMap);\n }, [calculatedProperties, customCalculationProperties, groupProperties]);\n\n useEffect(() => {\n void fetchAllProperties();\n }, [fetchAllProperties]);\n\n const onSave = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n if (!forceValidation()) {\n return;\n }\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n customCalculation\n ? await mappingClient.updateCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n customCalculation.id,\n {\n propertyName,\n formula,\n quantityType,\n }\n )\n : await mappingClient.createCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n {\n propertyName,\n formula,\n quantityType,\n }\n );\n onSaveSuccess();\n setPropertyName(\"\");\n setFormula(\"\");\n setQuantityType(QuantityType.Undefined);\n } catch (error: any) {\n // error instanceof Response refuses to be true when it should be.\n if (error.status === 422) {\n error = error as Response;\n const erroredResponse = await error.json();\n if (\n erroredResponse.error.code === \"InvalidInsightsRequest\" &&\n erroredResponse.error.target === \"formula\"\n ) {\n setFormulaErrorMessage(erroredResponse.error.message);\n }\n } else {\n handleError(error.status);\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <div className='gmw-custom-calculation-action-container'>\n <Fieldset legend='Custom Calculation Details' className='gmw-details-form'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n value={propertyName}\n required\n name='name'\n label='Name'\n disabled={isLoading}\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 <LabeledTextarea\n value={formula}\n required\n name='formula'\n label='Formula'\n disabled={isLoading}\n onChange={(event) => {\n setFormula(event.target.value);\n }}\n message={formulaErrorMessage}\n status={formulaErrorMessage ? \"negative\" : undefined}\n />\n <LabeledSelect<QuantityType>\n label='Quantity Type'\n disabled={isLoading}\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!(formula && propertyName && isValid)}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
@@ -1,21 +1,13 @@
1
- import React from "react";
2
- import type { CreateTypeFromInterface } from "../utils";
3
- import { PropertyMenuView } from "./PropertyMenu";
4
- import type { CellProps } from "react-table";
1
+ /// <reference types="react" />
5
2
  import type { CustomCalculation } from "@itwin/insights-client";
6
- export declare type ICustomCalculationTyped = CreateTypeFromInterface<CustomCalculation>;
7
- interface CustomCalculationTableProps {
8
- iModelId: string;
3
+ export interface CustomCalculationTableProps {
9
4
  mappingId: string;
10
5
  groupId: string;
11
- setSelectedCustomCalculation: React.Dispatch<React.SetStateAction<ICustomCalculationTyped | undefined>>;
12
- setGroupModifyView: React.Dispatch<React.SetStateAction<PropertyMenuView>>;
13
- onCustomCalculationModify: (value: CellProps<ICustomCalculationTyped>) => void;
14
- isLoadingCustomCalculations: boolean;
15
- customCalculations: ICustomCalculationTyped[];
16
- refreshCustomCalculations: () => Promise<void>;
17
- selectedCustomCalculation?: ICustomCalculationTyped;
6
+ onClickAdd?: () => void;
7
+ onClickModify?: (value: CustomCalculation) => void;
8
+ isLoading: boolean;
9
+ customCalculations: CustomCalculation[];
10
+ refresh: () => Promise<void>;
18
11
  }
19
- declare const CustomCalculationTable: ({ iModelId, mappingId, groupId, setSelectedCustomCalculation, setGroupModifyView, onCustomCalculationModify, isLoadingCustomCalculations, customCalculations, refreshCustomCalculations, selectedCustomCalculation, }: CustomCalculationTableProps) => JSX.Element;
20
- export default CustomCalculationTable;
12
+ export declare const CustomCalculationTable: ({ mappingId, groupId, onClickAdd, onClickModify, isLoading, customCalculations, refresh, }: CustomCalculationTableProps) => JSX.Element;
21
13
  //# sourceMappingURL=CustomCalculationTable.d.ts.map
@@ -18,10 +18,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.CustomCalculationTable = void 0;
25
23
  /*---------------------------------------------------------------------------------------------
26
24
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
27
25
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -29,16 +27,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
27
  const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
30
28
  const itwinui_react_1 = require("@itwin/itwinui-react");
31
29
  const react_1 = __importStar(require("react"));
32
- const PropertyMenu_1 = require("./PropertyMenu");
33
- const DeleteModal_1 = __importDefault(require("./DeleteModal"));
34
30
  const MappingClientContext_1 = require("./context/MappingClientContext");
31
+ const PropertyNameCell_1 = require("./PropertyNameCell");
32
+ const PropertyTable_1 = require("./PropertyTable");
35
33
  const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
36
- const CustomCalculationTable = ({ iModelId, mappingId, groupId, setSelectedCustomCalculation, setGroupModifyView, onCustomCalculationModify, isLoadingCustomCalculations, customCalculations, refreshCustomCalculations, selectedCustomCalculation, }) => {
37
- var _a;
38
- const { getAccessToken } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
34
+ const CustomCalculationTable = ({ mappingId, groupId, onClickAdd, onClickModify, isLoading, customCalculations, refresh, }) => {
39
35
  const mappingClient = MappingClientContext_1.useMappingClient();
40
- const [showCustomCalculationDeleteModal, setShowCustomCalculationDeleteModal,] = react_1.useState(false);
41
- const CustomCalculationsColumns = react_1.useMemo(() => [
36
+ const { getAccessToken, iModelId } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
37
+ const columnsFactory = react_1.useCallback((handleShowDeleteModal) => [
42
38
  {
43
39
  Header: "Table",
44
40
  columns: [
@@ -46,7 +42,7 @@ const CustomCalculationTable = ({ iModelId, mappingId, groupId, setSelectedCusto
46
42
  id: "propertyName",
47
43
  Header: "Custom Calculation",
48
44
  accessor: "propertyName",
49
- Cell: (value) => (react_1.default.createElement("div", { className: 'iui-anchor', onClick: () => onCustomCalculationModify(value) }, value.row.original.propertyName)),
45
+ Cell: (value) => (react_1.default.createElement(PropertyNameCell_1.PropertyNameCell, { property: value.row.original, onClickModify: onClickModify })),
50
46
  },
51
47
  {
52
48
  id: "formula",
@@ -58,14 +54,16 @@ const CustomCalculationTable = ({ iModelId, mappingId, groupId, setSelectedCusto
58
54
  Header: "",
59
55
  width: 80,
60
56
  Cell: (value) => {
61
- return (react_1.default.createElement(itwinui_react_1.DropdownMenu, { menuItems: (close) => [
62
- react_1.default.createElement(itwinui_react_1.MenuItem, { key: 0, onClick: () => onCustomCalculationModify(value), icon: react_1.default.createElement(itwinui_icons_react_1.SvgEdit, null) }, "Modify"),
63
- react_1.default.createElement(itwinui_react_1.MenuItem, { key: 1, onClick: () => {
64
- setSelectedCustomCalculation(value.row.original);
65
- setShowCustomCalculationDeleteModal(true);
57
+ return (react_1.default.createElement(itwinui_react_1.DropdownMenu, { menuItems: (close) => [onClickModify ? [
58
+ react_1.default.createElement(itwinui_react_1.MenuItem, { key: 0, onClick: () => {
59
+ onClickModify(value.row.original);
60
+ close();
61
+ }, icon: react_1.default.createElement(itwinui_icons_react_1.SvgEdit, null) }, "Modify")
62
+ ] : [], react_1.default.createElement(itwinui_react_1.MenuItem, { key: 1, onClick: () => {
63
+ handleShowDeleteModal(value.row.original);
66
64
  close();
67
65
  }, icon: react_1.default.createElement(itwinui_icons_react_1.SvgDelete, null) }, "Remove"),
68
- ] },
66
+ ].flatMap((p) => p) },
69
67
  react_1.default.createElement(itwinui_react_1.IconButton, { styleType: 'borderless' },
70
68
  react_1.default.createElement(itwinui_icons_react_1.SvgMore, { style: {
71
69
  width: "16px",
@@ -75,17 +73,12 @@ const CustomCalculationTable = ({ iModelId, mappingId, groupId, setSelectedCusto
75
73
  },
76
74
  ],
77
75
  },
78
- ], [onCustomCalculationModify, setSelectedCustomCalculation]);
79
- return (react_1.default.createElement(react_1.default.Fragment, null,
80
- react_1.default.createElement(itwinui_react_1.Button, { startIcon: react_1.default.createElement(itwinui_icons_react_1.SvgAdd, null), styleType: 'high-visibility', onClick: () => {
81
- setGroupModifyView(PropertyMenu_1.PropertyMenuView.ADD_CUSTOM_CALCULATION);
82
- } }, "Add Custom Calculation"),
83
- react_1.default.createElement(itwinui_react_1.Table, { data: customCalculations, density: 'extra-condensed', columns: CustomCalculationsColumns, emptyTableContent: 'No Custom Calculations', isSortable: true, isLoading: isLoadingCustomCalculations }),
84
- react_1.default.createElement(DeleteModal_1.default, { entityName: (_a = selectedCustomCalculation === null || selectedCustomCalculation === void 0 ? void 0 : selectedCustomCalculation.propertyName) !== null && _a !== void 0 ? _a : "", show: showCustomCalculationDeleteModal, setShow: setShowCustomCalculationDeleteModal, onDelete: async () => {
85
- var _a;
86
- const accessToken = await getAccessToken();
87
- await mappingClient.deleteCustomCalculation(accessToken, iModelId, mappingId, groupId, (_a = selectedCustomCalculation === null || selectedCustomCalculation === void 0 ? void 0 : selectedCustomCalculation.id) !== null && _a !== void 0 ? _a : "");
88
- }, refresh: refreshCustomCalculations })));
76
+ ], [onClickModify]);
77
+ const deleteProperty = react_1.useCallback(async (propertyId) => {
78
+ const accessToken = await getAccessToken();
79
+ await mappingClient.deleteCustomCalculation(accessToken, iModelId, mappingId, groupId, propertyId);
80
+ }, [getAccessToken, groupId, iModelId, mappingClient, mappingId]);
81
+ return (react_1.default.createElement(PropertyTable_1.PropertyTable, { propertyType: "Custom Calculation", columnsFactory: columnsFactory, data: customCalculations, isLoading: isLoading, onClickAdd: onClickAdd, refreshProperties: refresh, deleteProperty: deleteProperty }));
89
82
  };
90
- exports.default = CustomCalculationTable;
83
+ exports.CustomCalculationTable = CustomCalculationTable;
91
84
  //# sourceMappingURL=CustomCalculationTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomCalculationTable.js","sourceRoot":"","sources":["../../../../src/widget/components/CustomCalculationTable.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 SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n Table,\n} from \"@itwin/itwinui-react\";\nimport React, { useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport { PropertyMenuView } from \"./PropertyMenu\";\nimport type { CellProps } from \"react-table\";\nimport DeleteModal from \"./DeleteModal\";\nimport type { CustomCalculation } from \"@itwin/insights-client\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nexport type ICustomCalculationTyped =\n CreateTypeFromInterface<CustomCalculation>;\n\ninterface CustomCalculationTableProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n setSelectedCustomCalculation: React.Dispatch<React.SetStateAction<ICustomCalculationTyped | undefined>>;\n setGroupModifyView: React.Dispatch<React.SetStateAction<PropertyMenuView>>;\n onCustomCalculationModify: (value: CellProps<ICustomCalculationTyped>) => void;\n isLoadingCustomCalculations: boolean;\n customCalculations: ICustomCalculationTyped[];\n refreshCustomCalculations: () => Promise<void>;\n selectedCustomCalculation?: ICustomCalculationTyped;\n}\n\nconst CustomCalculationTable = ({\n iModelId,\n mappingId,\n groupId,\n setSelectedCustomCalculation,\n setGroupModifyView,\n onCustomCalculationModify,\n isLoadingCustomCalculations,\n customCalculations,\n refreshCustomCalculations,\n selectedCustomCalculation,\n}: CustomCalculationTableProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [\n showCustomCalculationDeleteModal,\n setShowCustomCalculationDeleteModal,\n ] = useState<boolean>(false);\n\n const CustomCalculationsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"propertyName\",\n Header: \"Custom Calculation\",\n accessor: \"propertyName\",\n Cell: (value: CellProps<ICustomCalculationTyped>) => (\n <div\n className='iui-anchor'\n onClick={() => onCustomCalculationModify(value)}\n >\n {value.row.original.propertyName}\n </div>\n ),\n },\n {\n id: \"formula\",\n Header: \"Formula\",\n accessor: \"formula\",\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<ICustomCalculationTyped>) => {\n return (\n <DropdownMenu\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => onCustomCalculationModify(value)}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={() => {\n setSelectedCustomCalculation(value.row.original);\n setShowCustomCalculationDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ]}\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 ],\n },\n ],\n [onCustomCalculationModify, setSelectedCustomCalculation],\n );\n\n return (\n <>\n <Button\n startIcon={<SvgAdd />}\n styleType='high-visibility'\n onClick={() => {\n setGroupModifyView(PropertyMenuView.ADD_CUSTOM_CALCULATION);\n }}\n >\n Add Custom Calculation\n </Button>\n <Table<ICustomCalculationTyped>\n data={customCalculations}\n density='extra-condensed'\n columns={CustomCalculationsColumns}\n emptyTableContent='No Custom Calculations'\n isSortable\n isLoading={isLoadingCustomCalculations}\n />\n\n <DeleteModal\n entityName={selectedCustomCalculation?.propertyName ?? \"\"}\n show={showCustomCalculationDeleteModal}\n setShow={setShowCustomCalculationDeleteModal}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n selectedCustomCalculation?.id ?? \"\",\n );\n }}\n refresh={refreshCustomCalculations}\n />\n </>\n );\n};\n\nexport default CustomCalculationTable;\n"]}
1
+ {"version":3,"file":"CustomCalculationTable.js","sourceRoot":"","sources":["../../../../src/widget/components/CustomCalculationTable.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 SvgDelete,\n SvgEdit,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n DropdownMenu,\n IconButton,\n MenuItem,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback } from \"react\";\nimport type { CellProps } from \"react-table\";\nimport type { CustomCalculation } from \"@itwin/insights-client\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { PropertyNameCell } from \"./PropertyNameCell\";\nimport { PropertyTable } from \"./PropertyTable\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nexport interface CustomCalculationTableProps {\n mappingId: string;\n groupId: string;\n onClickAdd?: () => void;\n onClickModify?: (value: CustomCalculation) => void;\n isLoading: boolean;\n customCalculations: CustomCalculation[];\n refresh: () => Promise<void>;\n}\n\nexport const CustomCalculationTable = ({\n mappingId,\n groupId,\n onClickAdd,\n onClickModify,\n isLoading,\n customCalculations,\n refresh,\n}: CustomCalculationTableProps) => {\n const mappingClient = useMappingClient();\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n\n const columnsFactory = useCallback(\n (handleShowDeleteModal: (value: CustomCalculation) => void) => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"propertyName\",\n Header: \"Custom Calculation\",\n accessor: \"propertyName\",\n Cell: (value: CellProps<CustomCalculation>) => (\n <PropertyNameCell\n property={value.row.original}\n onClickModify={onClickModify}\n />\n ),\n },\n {\n id: \"formula\",\n Header: \"Formula\",\n accessor: \"formula\",\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<CustomCalculation>) => {\n return (\n <DropdownMenu\n menuItems={(close: () => void) => [onClickModify ? [\n <MenuItem\n key={0}\n onClick={() => {\n onClickModify(value.row.original);\n close();\n }}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>] : [],\n <MenuItem\n key={1}\n onClick={() => {\n handleShowDeleteModal(value.row.original);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ].flatMap((p) => p)}\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 ],\n },\n ],\n [onClickModify],\n );\n\n const deleteProperty = useCallback(async (propertyId: string) => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n propertyId,\n );\n }, [getAccessToken, groupId, iModelId, mappingClient, mappingId]);\n\n return (\n <PropertyTable\n propertyType=\"Custom Calculation\"\n columnsFactory={columnsFactory}\n data={customCalculations}\n isLoading={isLoading}\n onClickAdd={onClickAdd}\n refreshProperties={refresh}\n deleteProperty={deleteProperty}\n />\n );\n};\n\n"]}
@@ -1,12 +1,11 @@
1
- import React from "react";
1
+ /// <reference types="react" />
2
2
  import "./DeleteModal.scss";
3
3
  export interface DeleteModalProps {
4
- entityName: string;
5
- show: boolean;
6
- setShow: React.Dispatch<React.SetStateAction<boolean>>;
4
+ entityName?: string;
5
+ onClose: () => void;
7
6
  onDelete: () => Promise<void>;
8
7
  refresh: () => Promise<void>;
9
8
  }
10
- export declare const DeleteModal: ({ entityName, show, setShow, onDelete, refresh, }: DeleteModalProps) => JSX.Element;
9
+ export declare const DeleteModal: ({ entityName, onClose, onDelete, refresh, }: DeleteModalProps) => JSX.Element;
11
10
  export default DeleteModal;
12
11
  //# sourceMappingURL=DeleteModal.d.ts.map
@@ -28,37 +28,33 @@ const itwinui_react_1 = require("@itwin/itwinui-react");
28
28
  const react_1 = __importStar(require("react"));
29
29
  require("./DeleteModal.scss");
30
30
  const utils_1 = require("./utils");
31
- const DeleteModal = ({ entityName, show, setShow, onDelete, refresh, }) => {
32
- const [isLoading, setIsLoading] = react_1.useState(false);
31
+ const DeleteModal = ({ entityName, onClose, onDelete, refresh, }) => {
32
+ const [isDeleting, setIsDeleting] = react_1.useState(false);
33
33
  const deleteCallback = async () => {
34
34
  try {
35
- setIsLoading(true);
35
+ setIsDeleting(true);
36
36
  await onDelete();
37
- setShow(false);
38
37
  await refresh();
38
+ onClose();
39
39
  }
40
40
  catch (error) {
41
41
  utils_1.handleError(error.status);
42
42
  }
43
43
  finally {
44
- setIsLoading(false);
44
+ setIsDeleting(false);
45
45
  }
46
46
  };
47
47
  return (react_1.default.createElement(react_1.default.Fragment, null,
48
- react_1.default.createElement(itwinui_react_1.Modal, { title: 'Confirm', modalRootId: 'grouping-mapping-widget', isOpen: show, isDismissible: !isLoading, onClose: () => {
49
- setShow(false);
50
- } },
48
+ react_1.default.createElement(itwinui_react_1.Modal, { title: 'Confirm', modalRootId: 'grouping-mapping-widget', isOpen: !!entityName, isDismissible: !isDeleting, onClose: onClose },
51
49
  react_1.default.createElement("div", { className: "gmw-delete-modal-body-text" },
52
50
  react_1.default.createElement(itwinui_react_1.Leading, null, "Are you sure you want to delete"),
53
51
  react_1.default.createElement("strong", null, react_1.default.createElement(itwinui_react_1.MiddleTextTruncation, { text: `${entityName}?` }))),
54
52
  react_1.default.createElement(itwinui_react_1.ModalButtonBar, null,
55
- isLoading &&
53
+ isDeleting &&
56
54
  react_1.default.createElement("div", { className: "gmw-loading-delete" },
57
55
  react_1.default.createElement(utils_1.LoadingSpinner, null)),
58
- react_1.default.createElement(itwinui_react_1.Button, { styleType: 'high-visibility', onClick: deleteCallback, disabled: isLoading }, "Delete"),
59
- react_1.default.createElement(itwinui_react_1.Button, { styleType: 'default', onClick: () => {
60
- setShow(false);
61
- }, disabled: isLoading }, "Cancel")))));
56
+ react_1.default.createElement(itwinui_react_1.Button, { styleType: 'high-visibility', onClick: deleteCallback, disabled: isDeleting }, "Delete"),
57
+ react_1.default.createElement(itwinui_react_1.Button, { styleType: 'default', onClick: onClose, disabled: isDeleting }, "Cancel")))));
62
58
  };
63
59
  exports.DeleteModal = DeleteModal;
64
60
  exports.default = exports.DeleteModal;
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteModal.js","sourceRoot":"","sources":["../../../../src/widget/components/DeleteModal.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,wDAM8B;AAC9B,+CAAwC;AACxC,8BAA4B;AAC5B,mCAAsD;AAU/C,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,OAAO,GACU,EAAE,EAAE;IACrB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAE3D,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,MAAM,OAAO,EAAE,CAAC;SACjB;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,8BAAC,qBAAK,IACJ,KAAK,EAAC,SAAS,EACf,WAAW,EAAC,yBAAyB,EACrC,MAAM,EAAE,IAAI,EACZ,aAAa,EAAE,CAAC,SAAS,EACzB,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAED,uCAAK,SAAS,EAAC,4BAA4B;gBACzC,8BAAC,uBAAO,0CAEE;gBACV,8CACG,8BAAC,oCAAoB,IAAC,IAAI,EAAE,GAAG,UAAU,GAAG,GAAI,CAC1C,CACL;YACN,8BAAC,8BAAc;gBACZ,SAAS;oBACR,uCAAK,SAAS,EAAC,oBAAoB;wBACjC,8BAAC,sBAAc,OAAG,CACd;gBACR,8BAAC,sBAAM,IAAC,SAAS,EAAC,iBAAiB,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,aAEvE;gBACT,8BAAC,sBAAM,IACL,SAAS,EAAC,SAAS,EACnB,OAAO,EAAE,GAAG,EAAE;wBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC,EACD,QAAQ,EAAE,SAAS,aAGZ,CACM,CACX,CACP,CACJ,CAAC;AACJ,CAAC,CAAC;AA9DW,QAAA,WAAW,eA8DtB;AAEF,kBAAe,mBAAW,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport {\n Button,\n Leading,\n MiddleTextTruncation,\n Modal,\n ModalButtonBar,\n} from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport \"./DeleteModal.scss\";\nimport { handleError, LoadingSpinner } from \"./utils\";\n\nexport interface DeleteModalProps {\n entityName: string;\n show: boolean;\n setShow: React.Dispatch<React.SetStateAction<boolean>>;\n onDelete: () => Promise<void>;\n refresh: () => Promise<void>;\n}\n\nexport const DeleteModal = ({\n entityName,\n show,\n setShow,\n onDelete,\n refresh,\n}: DeleteModalProps) => {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const deleteCallback = async () => {\n try {\n setIsLoading(true);\n await onDelete();\n setShow(false);\n await refresh();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <Modal\n title='Confirm'\n modalRootId='grouping-mapping-widget'\n isOpen={show}\n isDismissible={!isLoading}\n onClose={() => {\n setShow(false);\n }}\n >\n <div className=\"gmw-delete-modal-body-text\">\n <Leading>\n Are you sure you want to delete\n </Leading>\n <strong>\n {<MiddleTextTruncation text={`${entityName}?`} />}\n </strong>\n </div>\n <ModalButtonBar>\n {isLoading &&\n <div className=\"gmw-loading-delete\">\n <LoadingSpinner />\n </div>}\n <Button styleType='high-visibility' onClick={deleteCallback} disabled={isLoading}>\n Delete\n </Button>\n <Button\n styleType='default'\n onClick={() => {\n setShow(false);\n }}\n disabled={isLoading}\n >\n Cancel\n </Button>\n </ModalButtonBar>\n </Modal>\n </>\n );\n};\n\nexport default DeleteModal;\n"]}
1
+ {"version":3,"file":"DeleteModal.js","sourceRoot":"","sources":["../../../../src/widget/components/DeleteModal.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,wDAM8B;AAC9B,+CAAwC;AACxC,8BAA4B;AAC5B,mCAAsD;AAS/C,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,OAAO,EACP,QAAQ,EACR,OAAO,GACU,EAAE,EAAE;IACrB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAE7D,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI;YACF,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM,QAAQ,EAAE,CAAC;YACjB,MAAM,OAAO,EAAE,CAAC;YAChB,OAAO,EAAE,CAAC;SACX;QAAC,OAAO,KAAU,EAAE;YACnB,mBAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;gBAAS;YACR,aAAa,CAAC,KAAK,CAAC,CAAC;SACtB;IACH,CAAC,CAAC;IAEF,OAAO,CACL;QACE,8BAAC,qBAAK,IACJ,KAAK,EAAC,SAAS,EACf,WAAW,EAAC,yBAAyB,EACrC,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,aAAa,EAAE,CAAC,UAAU,EAC1B,OAAO,EAAE,OAAO;YAEhB,uCAAK,SAAS,EAAC,4BAA4B;gBACzC,8BAAC,uBAAO,0CAEE;gBACV,8CACG,8BAAC,oCAAoB,IAAC,IAAI,EAAE,GAAG,UAAU,GAAG,GAAI,CAC1C,CACL;YACN,8BAAC,8BAAc;gBACZ,UAAU;oBACT,uCAAK,SAAS,EAAC,oBAAoB;wBACjC,8BAAC,sBAAc,OAAG,CACd;gBACR,8BAAC,sBAAM,IAAC,SAAS,EAAC,iBAAiB,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,aAExE;gBACT,8BAAC,sBAAM,IACL,SAAS,EAAC,SAAS,EACnB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,UAAU,aAGb,CACM,CACX,CACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAzDW,QAAA,WAAW,eAyDtB;AAEF,kBAAe,mBAAW,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport {\n Button,\n Leading,\n MiddleTextTruncation,\n Modal,\n ModalButtonBar,\n} from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport \"./DeleteModal.scss\";\nimport { handleError, LoadingSpinner } from \"./utils\";\n\nexport interface DeleteModalProps {\n entityName?: string;\n onClose: () => void;\n onDelete: () => Promise<void>;\n refresh: () => Promise<void>;\n}\n\nexport const DeleteModal = ({\n entityName,\n onClose,\n onDelete,\n refresh,\n}: DeleteModalProps) => {\n const [isDeleting, setIsDeleting] = useState<boolean>(false);\n\n const deleteCallback = async () => {\n try {\n setIsDeleting(true);\n await onDelete();\n await refresh();\n onClose();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <>\n <Modal\n title='Confirm'\n modalRootId='grouping-mapping-widget'\n isOpen={!!entityName}\n isDismissible={!isDeleting}\n onClose={onClose}\n >\n <div className=\"gmw-delete-modal-body-text\">\n <Leading>\n Are you sure you want to delete\n </Leading>\n <strong>\n {<MiddleTextTruncation text={`${entityName}?`} />}\n </strong>\n </div>\n <ModalButtonBar>\n {isDeleting &&\n <div className=\"gmw-loading-delete\">\n <LoadingSpinner />\n </div>}\n <Button styleType='high-visibility' onClick={deleteCallback} disabled={isDeleting}>\n Delete\n </Button>\n <Button\n styleType='default'\n onClick={onClose}\n disabled={isDeleting}\n >\n Cancel\n </Button>\n </ModalButtonBar>\n </Modal>\n </>\n );\n};\n\nexport default DeleteModal;\n"]}
@@ -68,6 +68,7 @@ const GroupAction = (props) => {
68
68
  }
69
69
  }, [iModelConnection]);
70
70
  const displayStrings = { ...defaultDisplayStrings, ...props.displayStrings };
71
+ react_1.useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);
71
72
  const resetView = async () => {
72
73
  if (groups.length > 0) {
73
74
  if (showGroupColor) {
@@ -1 +1 @@
1
- {"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.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 type { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport {\n Fieldset,\n LabeledInput,\n RadioTile,\n RadioTileGroup,\n Small,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport type { ReactElement } from \"react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n EmptyMessage,\n handleError,\n handleInputChange,\n} from \"./utils\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport {\n clearEmphasizedElements,\n clearOverriddenElements,\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport { SvgAdd } from \"@itwin/itwinui-icons-react\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"./groupsHelpers\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nexport interface GroupActionProps {\n mappingId: string;\n group?: Group;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const GroupAction = (props: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [queryGenerationType, setQueryGenerationType] = useState(\n props.queryGenerationType,\n );\n const isUpdating = isLoading || isRendering;\n\n useEffect(() => {\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n }, [iModelConnection]);\n\n const displayStrings = { ...defaultDisplayStrings, ...props.displayStrings };\n\n const resetView = async () => {\n if (groups.length > 0) {\n if (showGroupColor) {\n await visualizeGroupColors(iModelConnection, groups, groups, hiddenGroupsIds, hilitedElementsQueryCache);\n } else {\n clearOverriddenElements();\n }\n }\n clearEmphasizedElements();\n };\n\n const changeGroupByType = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const {\n target: { value },\n } = event;\n setQueryGenerationType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n };\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(\n evt.imodel,\n evt.level,\n );\n const query = selection.instanceKeys.size > 0\n ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`\n : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection, queryGenerationType]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n\n setIsRendering(true);\n transparentOverriddenElements();\n const resolvedHiliteIds = await visualizeElementsByQuery(\n query,\n \"red\",\n iModelConnection,\n );\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(\"Sorry, we have failed to generate a valid query. 😔\");\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n props.group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n props.mappingId,\n props.group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(\n accessToken,\n iModelId,\n props.mappingId,\n {\n ...details,\n query: currentQuery,\n },\n );\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n props.onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [validator, showValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, iModelConnection]);\n\n const createQueryBuilderComponent = () => {\n if (queryGenerationType && queryGenerationType.length > 0) {\n const selectedCustomUI = groupUIs.find(\n (e) => e.name === queryGenerationType,\n );\n if (selectedCustomUI) {\n return React.createElement(selectedCustomUI.uiComponent, {\n updateQuery: setQuery,\n isUpdating,\n resetView,\n });\n }\n }\n return <EmptyMessage message='No query generation method selected. ' />;\n };\n\n const isBlockingActions = !(\n details.groupName &&\n (query || simpleSelectionQuery) &&\n !isRendering &&\n !isLoading\n );\n\n const getRadioTileComponent = (\n icon: ReactElement,\n value: string,\n label: string,\n ) => {\n return (\n <RadioTile\n name={\"groupby\"}\n icon={icon}\n key={value}\n onChange={changeGroupByType}\n value={value}\n label={label}\n disabled={isUpdating}\n checked={queryGenerationType === value}\n />\n );\n };\n\n return (\n <>\n <div className='gmw-group-add-modify-container'>\n <Fieldset legend={displayStrings.groupDetails} className='gmw-group-details'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='groupName'\n name='groupName'\n label='Name'\n value={details.groupName}\n required\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n message={validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )}\n status={\n validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"groupName\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={details.description}\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n }}\n />\n </Fieldset>\n <Fieldset legend={displayStrings.groupBy} className='gmw-query-builder-container'>\n <RadioTileGroup className='gmw-radio-group-tile' required>\n {groupUIs.map((ext) => getRadioTileComponent(ext.icon ?? <SvgAdd />, ext.name, ext.displayLabel))}\n </RadioTileGroup>\n {queryGenerationType && createQueryBuilderComponent()}\n </Fieldset>\n </div>\n <ActionPanel\n onSave={async () => {\n await save();\n }}\n onCancel={props.onClickCancel ? async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n props.onClickCancel && props.onClickCancel();\n } : undefined}\n isSavingDisabled={isBlockingActions}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AASA,wEAA4D;AAC5D,oDAA+D;AAC/D,wDAO8B;AAE9B,+CAAgE;AAChE,mCAIiB;AACjB,8BAA4B;AAC5B,gEAAwC;AACxC,sEAAwE;AACxE,+CAMuB;AACvB,iFAAiF;AACjF,yEAAkE;AAClE,6FAAsF;AACtF,oEAAoD;AAEpD,gFAAiF;AAEjF,uFAAuF;AACvF,mDAAuD;AAEvD,MAAM,qBAAqB,GAAG;IAC5B,YAAY,EAAE,eAAe;IAC7B,OAAO,EAAE,UAAU;CACpB,CAAC;AAWK,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;;IACrD,MAAM,gBAAgB,GAAG,uCAAyB,EAAsB,CAAC;IACzE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,yBAAyB,EAAE,GAAG,4DAA8B,EAAE,CAAC;IAChH,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,sDAA2B,EAAE,CAAC;IACnE,MAAM,aAAa,GAAG,uCAAgB,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAuB,2DAA0B,EAAE,CAAC,SAAS;SACxE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qDAA2B,CAAC,QAAQ,CAAuB,CAAC;IACxF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,gBAAQ,CAAC;QACrC,SAAS,EAAE,MAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,SAAS,mCAAI,EAAE;QACvC,WAAW,EAAE,MAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,WAAW,mCAAI,EAAE;KAC5C,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,gBAAQ,CAAS,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,gBAAQ,CAAS,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,sBAAY,EAAE,CAAC;IAC1D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAC3D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAC/D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,gBAAQ,CAC5D,KAAK,CAAC,mBAAmB,CAC1B,CAAC;IACF,MAAM,UAAU,GAAG,SAAS,IAAI,WAAW,CAAC;IAE5C,iBAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,gBAAgB,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;SACxE;IACH,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,MAAM,cAAc,GAAG,EAAE,GAAG,qBAAqB,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;IAE7E,iBAAS,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAEhG,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,IAAI,cAAc,EAAE;gBAClB,MAAM,oCAAoB,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC;aAC1G;iBAAM;gBACL,qCAAuB,EAAE,CAAC;aAC3B;SACF;QACD,qCAAuB,EAAE,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,EAC7B,KAA0C,EAC1C,EAAE;QACF,MAAM,EACJ,MAAM,EAAE,EAAE,KAAK,EAAE,GAClB,GAAG,KAAK,CAAC;QACV,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC9B,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;QACF,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,SAAS,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,iBAAS,CAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAAG,oCAAY,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CACvE,KAAK,EACH,GAA6B,EAC7B,iBAAqC,EACrC,EAAE;YACF,IAAI,mBAAmB,KAAK,WAAW,EAAE;gBACvC,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAC9C,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,KAAK,CACV,CAAC;gBACF,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC;oBAC3C,CAAC,CAAC,4BAA4B,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;oBAC1E,CAAC,CAAC,EAAE,CAAC;gBACP,uBAAuB,CAAC,KAAK,CAAC,CAAC;aAChC;QACH,CAAC,CACF,CAAC;QACF,OAAO,GAAG,EAAE;YACV,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE5C,iBAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;YAC7B,IAAI;gBACF,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE;oBAC1B,OAAO;iBACR;gBAED,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,2CAA6B,EAAE,CAAC;gBAChC,MAAM,iBAAiB,GAAG,MAAM,sCAAwB,CACtD,KAAK,EACL,KAAK,EACL,gBAAgB,CACjB,CAAC;gBACF,MAAM,4BAAc,CAAC,iBAAiB,CAAC,CAAC;aACzC;YAAC,MAAM;gBACN,uBAAO,CAAC,QAAQ,CAAC,qDAAqD,CAAC,CAAC;aACzE;oBAAS;gBACR,cAAc,CAAC,KAAK,CAAC,CAAC;aACvB;QACH,CAAC,CAAC;QAEF,KAAK,WAAW,EAAE,CAAC;IACrB,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9B,iBAAS,CAAC,GAAG,EAAE;QACb,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,MAAM,IAAI,GAAG,mBAAW,CAAC,KAAK,IAAI,EAAE;;QAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;YACzB,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO;SACR;QACD,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,YAAY,GAAG,KAAK,IAAI,oBAAoB,CAAC;YAEnD,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YAE3C,KAAK,CAAC,KAAK;gBACT,CAAC,CAAC,MAAM,aAAa,CAAC,WAAW,CAC/B,WAAW,EACX,QAAQ,EACR,KAAK,CAAC,SAAS,EACf,MAAA,KAAK,CAAC,KAAK,CAAC,EAAE,mCAAI,EAAE,EACpB,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CACpC;gBACD,CAAC,CAAC,MAAM,aAAa,CAAC,WAAW,CAC/B,WAAW,EACX,QAAQ,EACR,KAAK,CAAC,SAAS,EACf;oBACE,GAAG,OAAO;oBACV,KAAK,EAAE,YAAY;iBACpB,CACF,CAAC;YACJ,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;YACF,UAAU,CAAC;gBACT,SAAS,EAAE,MAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,SAAS,mCAAI,EAAE;gBACvC,WAAW,EAAE,MAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,WAAW,mCAAI,EAAE;aAC5C,CAAC,CAAC;YACH,KAAK,CAAC,aAAa,EAAE,CAAC;SACvB;QAAC,OAAO,KAAU,EAAE;YACnB,mBAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;gBAAS;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,qBAAqB,EAAE,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE/I,MAAM,2BAA2B,GAAG,GAAG,EAAE;QACvC,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;YACzD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CACtC,CAAC;YACF,IAAI,gBAAgB,EAAE;gBACpB,OAAO,eAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE;oBACvD,WAAW,EAAE,QAAQ;oBACrB,UAAU;oBACV,SAAS;iBACV,CAAC,CAAC;aACJ;SACF;QACD,OAAO,8BAAC,oBAAY,IAAC,OAAO,EAAC,uCAAuC,GAAG,CAAC;IAC1E,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,CACzB,OAAO,CAAC,SAAS;QACjB,CAAC,KAAK,IAAI,oBAAoB,CAAC;QAC/B,CAAC,WAAW;QACZ,CAAC,SAAS,CACX,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAC5B,IAAkB,EAClB,KAAa,EACb,KAAa,EACb,EAAE;QACF,OAAO,CACL,8BAAC,yBAAS,IACR,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,KAAK,EACV,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,mBAAmB,KAAK,KAAK,GACtC,CACH,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL;QACE,uCAAK,SAAS,EAAC,gCAAgC;YAC7C,8BAAC,wBAAQ,IAAC,MAAM,EAAE,cAAc,CAAC,YAAY,EAAE,SAAS,EAAC,mBAAmB;gBAC1E,8BAAC,qBAAK,IAAC,SAAS,EAAC,kBAAkB,6CAE3B;gBACR,8BAAC,4BAAY,IACX,EAAE,EAAC,WAAW,EACd,IAAI,EAAC,WAAW,EAChB,KAAK,EAAC,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,SAAS,EACxB,QAAQ,QACR,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,yBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC9C,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBACxC,CAAC,EACD,OAAO,EAAE,SAAS,CAAC,OAAO,CACxB,WAAW,EACX,OAAO,CAAC,SAAS,EACjB,gCAAiB,CAClB,EACD,MAAM,EACJ,SAAS,CAAC,OAAO,CACf,WAAW,EACX,OAAO,CAAC,SAAS,EACjB,gCAAiB,CAClB;wBACC,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,SAAS,EAEf,MAAM,EAAE,GAAG,EAAE;wBACX,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBACxC,CAAC,EACD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,yBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC9C,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBACxC,CAAC,GACD;gBACF,8BAAC,4BAAY,IACX,EAAE,EAAC,aAAa,EAChB,IAAI,EAAC,aAAa,EAClB,KAAK,EAAC,aAAa,EACnB,KAAK,EAAE,OAAO,CAAC,WAAW,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,yBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBAChD,CAAC,GACD,CACO;YACX,8BAAC,wBAAQ,IAAC,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,SAAS,EAAC,6BAA6B;gBAC/E,8BAAC,8BAAc,IAAC,SAAS,EAAC,sBAAsB,EAAC,QAAQ,UACtD,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,qBAAqB,CAAC,MAAA,GAAG,CAAC,IAAI,mCAAI,8BAAC,4BAAM,OAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,CAAA,EAAA,CAAC,CAClF;gBAChB,mBAAmB,IAAI,2BAA2B,EAAE,CAC5C,CACP;QACN,8BAAC,qBAAW,IACV,MAAM,EAAE,KAAK,IAAI,EAAE;gBACjB,MAAM,IAAI,EAAE,CAAC;YACf,CAAC,EACD,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBACzC,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;gBACF,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC,CAAC,SAAS,EACb,gBAAgB,EAAE,iBAAiB,EACnC,SAAS,EAAE,SAAS,GACpB,CACD,CACJ,CAAC;AACJ,CAAC,CAAC;AA/QW,QAAA,WAAW,eA+QtB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport {\n Fieldset,\n LabeledInput,\n RadioTile,\n RadioTileGroup,\n Small,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport type { ReactElement } from \"react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n EmptyMessage,\n handleError,\n handleInputChange,\n} from \"./utils\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport {\n clearEmphasizedElements,\n clearOverriddenElements,\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport { SvgAdd } from \"@itwin/itwinui-icons-react\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"./groupsHelpers\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nexport interface GroupActionProps {\n mappingId: string;\n group?: Group;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const GroupAction = (props: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [queryGenerationType, setQueryGenerationType] = useState(\n props.queryGenerationType,\n );\n const isUpdating = isLoading || isRendering;\n\n useEffect(() => {\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n }, [iModelConnection]);\n\n const displayStrings = { ...defaultDisplayStrings, ...props.displayStrings };\n\n useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);\n\n const resetView = async () => {\n if (groups.length > 0) {\n if (showGroupColor) {\n await visualizeGroupColors(iModelConnection, groups, groups, hiddenGroupsIds, hilitedElementsQueryCache);\n } else {\n clearOverriddenElements();\n }\n }\n clearEmphasizedElements();\n };\n\n const changeGroupByType = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const {\n target: { value },\n } = event;\n setQueryGenerationType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n };\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(\n evt.imodel,\n evt.level,\n );\n const query = selection.instanceKeys.size > 0\n ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`\n : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection, queryGenerationType]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n\n setIsRendering(true);\n transparentOverriddenElements();\n const resolvedHiliteIds = await visualizeElementsByQuery(\n query,\n \"red\",\n iModelConnection,\n );\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(\"Sorry, we have failed to generate a valid query. 😔\");\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n props.group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n props.mappingId,\n props.group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(\n accessToken,\n iModelId,\n props.mappingId,\n {\n ...details,\n query: currentQuery,\n },\n );\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n props.onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [validator, showValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, iModelConnection]);\n\n const createQueryBuilderComponent = () => {\n if (queryGenerationType && queryGenerationType.length > 0) {\n const selectedCustomUI = groupUIs.find(\n (e) => e.name === queryGenerationType,\n );\n if (selectedCustomUI) {\n return React.createElement(selectedCustomUI.uiComponent, {\n updateQuery: setQuery,\n isUpdating,\n resetView,\n });\n }\n }\n return <EmptyMessage message='No query generation method selected. ' />;\n };\n\n const isBlockingActions = !(\n details.groupName &&\n (query || simpleSelectionQuery) &&\n !isRendering &&\n !isLoading\n );\n\n const getRadioTileComponent = (\n icon: ReactElement,\n value: string,\n label: string,\n ) => {\n return (\n <RadioTile\n name={\"groupby\"}\n icon={icon}\n key={value}\n onChange={changeGroupByType}\n value={value}\n label={label}\n disabled={isUpdating}\n checked={queryGenerationType === value}\n />\n );\n };\n\n return (\n <>\n <div className='gmw-group-add-modify-container'>\n <Fieldset legend={displayStrings.groupDetails} className='gmw-group-details'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='groupName'\n name='groupName'\n label='Name'\n value={details.groupName}\n required\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n message={validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )}\n status={\n validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"groupName\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={details.description}\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n }}\n />\n </Fieldset>\n <Fieldset legend={displayStrings.groupBy} className='gmw-query-builder-container'>\n <RadioTileGroup className='gmw-radio-group-tile' required>\n {groupUIs.map((ext) => getRadioTileComponent(ext.icon ?? <SvgAdd />, ext.name, ext.displayLabel))}\n </RadioTileGroup>\n {queryGenerationType && createQueryBuilderComponent()}\n </Fieldset>\n </div>\n <ActionPanel\n onSave={async () => {\n await save();\n }}\n onCancel={props.onClickCancel ? async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n props.onClickCancel && props.onClickCancel();\n } : undefined}\n isSavingDisabled={isBlockingActions}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import "./GroupInformationPanel.scss";
3
+ export interface GroupInformationPanelProps {
4
+ isOpen: boolean;
5
+ onClose: () => void;
6
+ groupName: string;
7
+ query: string;
8
+ }
9
+ export declare const GroupInformationPanel: ({ isOpen, onClose, groupName, query }: GroupInformationPanelProps) => JSX.Element;
10
+ //# sourceMappingURL=GroupInformationPanel.d.ts.map
@@ -0,0 +1,23 @@
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.GroupInformationPanel = 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 react_1 = __importDefault(require("react"));
12
+ const itwinui_react_1 = require("@itwin/itwinui-react");
13
+ require("./GroupInformationPanel.scss");
14
+ const GroupInformationPanel = ({ isOpen, onClose, groupName, query }) => {
15
+ return (react_1.default.createElement(itwinui_react_1.InformationPanel, { isOpen: isOpen },
16
+ react_1.default.createElement(itwinui_react_1.InformationPanelHeader, { onClose: onClose },
17
+ react_1.default.createElement(itwinui_react_1.Text, { variant: "subheading" }, `${groupName} Information`)),
18
+ react_1.default.createElement(itwinui_react_1.InformationPanelBody, null,
19
+ react_1.default.createElement("div", { className: "gmw-group-information-body" },
20
+ react_1.default.createElement(itwinui_react_1.LabeledTextarea, { label: "Query", rows: 15, readOnly: true, defaultValue: query })))));
21
+ };
22
+ exports.GroupInformationPanel = GroupInformationPanel;
23
+ //# sourceMappingURL=GroupInformationPanel.js.map