@itwin/grouping-mapping-widget 0.3.1 → 0.3.4

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 (253) hide show
  1. package/lib/cjs/formula/FormulaFunctionProvider.d.ts +18 -0
  2. package/lib/cjs/formula/FormulaFunctionProvider.js +136 -0
  3. package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -0
  4. package/lib/cjs/formula/FormulaOperatorsProvider.d.ts +34 -0
  5. package/lib/cjs/formula/FormulaOperatorsProvider.js +185 -0
  6. package/lib/cjs/formula/FormulaOperatorsProvider.js.map +1 -0
  7. package/lib/cjs/formula/FormulaSplitter.d.ts +2 -0
  8. package/lib/cjs/formula/FormulaSplitter.js +140 -0
  9. package/lib/cjs/formula/FormulaSplitter.js.map +1 -0
  10. package/lib/cjs/formula/FormulaTokensValidator.d.ts +5 -0
  11. package/lib/cjs/formula/FormulaTokensValidator.js +135 -0
  12. package/lib/cjs/formula/FormulaTokensValidator.js.map +1 -0
  13. package/lib/cjs/formula/FormulaValidator.d.ts +3 -0
  14. package/lib/cjs/formula/FormulaValidator.js +35 -0
  15. package/lib/cjs/formula/FormulaValidator.js.map +1 -0
  16. package/lib/cjs/formula/IResult.d.ts +5 -0
  17. package/lib/cjs/formula/IResult.js +3 -0
  18. package/lib/cjs/formula/IResult.js.map +1 -0
  19. package/lib/cjs/formula/InfixToPostfixConverter.d.ts +18 -0
  20. package/lib/cjs/formula/InfixToPostfixConverter.js +299 -0
  21. package/lib/cjs/formula/InfixToPostfixConverter.js.map +1 -0
  22. package/lib/cjs/formula/InputStream.d.ts +12 -0
  23. package/lib/cjs/formula/InputStream.js +36 -0
  24. package/lib/cjs/formula/InputStream.js.map +1 -0
  25. package/lib/cjs/formula/ParenthesisValidator.d.ts +7 -0
  26. package/lib/cjs/formula/ParenthesisValidator.js +34 -0
  27. package/lib/cjs/formula/ParenthesisValidator.js.map +1 -0
  28. package/lib/cjs/formula/Queue.d.ts +11 -0
  29. package/lib/cjs/formula/Queue.js +42 -0
  30. package/lib/cjs/formula/Queue.js.map +1 -0
  31. package/lib/cjs/formula/Stack.d.ts +14 -0
  32. package/lib/cjs/formula/Stack.js +71 -0
  33. package/lib/cjs/formula/Stack.js.map +1 -0
  34. package/lib/cjs/formula/StringBuilder.d.ts +9 -0
  35. package/lib/cjs/formula/StringBuilder.js +26 -0
  36. package/lib/cjs/formula/StringBuilder.js.map +1 -0
  37. package/lib/cjs/formula/Types.d.ts +8 -0
  38. package/lib/cjs/formula/Types.js +3 -0
  39. package/lib/cjs/formula/Types.js.map +1 -0
  40. package/lib/cjs/formula/Utils.d.ts +7 -0
  41. package/lib/cjs/formula/Utils.js +39 -0
  42. package/lib/cjs/formula/Utils.js.map +1 -0
  43. package/lib/cjs/widget/GroupingMappingWidget.d.ts +4 -0
  44. package/lib/cjs/widget/GroupingMappingWidget.js +6 -23
  45. package/lib/cjs/widget/GroupingMappingWidget.js.map +1 -1
  46. package/lib/cjs/widget/components/BlockingOverlay.d.ts +7 -0
  47. package/lib/cjs/widget/components/BlockingOverlay.js +21 -0
  48. package/lib/cjs/widget/components/BlockingOverlay.js.map +1 -0
  49. package/lib/cjs/widget/components/BlockingOverlay.scss +26 -0
  50. package/lib/cjs/widget/components/CalculatedPropertyAction.d.ts +3 -3
  51. package/lib/cjs/widget/components/CalculatedPropertyAction.js +15 -10
  52. package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
  53. package/lib/cjs/widget/components/CalculatedPropertyTable.d.ts +9 -6
  54. package/lib/cjs/widget/components/CalculatedPropertyTable.js +8 -33
  55. package/lib/cjs/widget/components/CalculatedPropertyTable.js.map +1 -1
  56. package/lib/cjs/widget/components/ConfirmMappingsImport.d.ts +3 -3
  57. package/lib/cjs/widget/components/ConfirmMappingsImport.js +6 -3
  58. package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
  59. package/lib/cjs/widget/components/ConfirmMappingsImport.scss +4 -2
  60. package/lib/cjs/widget/components/CustomCalculationAction.d.ts +6 -4
  61. package/lib/cjs/widget/components/CustomCalculationAction.js +23 -12
  62. package/lib/cjs/widget/components/CustomCalculationAction.js.map +1 -1
  63. package/lib/cjs/widget/components/CustomCalculationTable.d.ts +9 -6
  64. package/lib/cjs/widget/components/CustomCalculationTable.js +8 -33
  65. package/lib/cjs/widget/components/CustomCalculationTable.js.map +1 -1
  66. package/lib/cjs/widget/components/GroupAction.d.ts +2 -2
  67. package/lib/cjs/widget/components/GroupAction.js +10 -13
  68. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  69. package/lib/cjs/widget/components/GroupPropertyAction.d.ts +1 -1
  70. package/lib/cjs/widget/components/GroupPropertyAction.js +12 -8
  71. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  72. package/lib/cjs/widget/components/GroupPropertyTable.d.ts +9 -6
  73. package/lib/cjs/widget/components/GroupPropertyTable.js +8 -33
  74. package/lib/cjs/widget/components/GroupPropertyTable.js.map +1 -1
  75. package/lib/cjs/widget/components/Grouping.d.ts +3 -3
  76. package/lib/cjs/widget/components/Grouping.js +22 -22
  77. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  78. package/lib/cjs/widget/components/GroupingMapping.d.ts +12 -2
  79. package/lib/cjs/widget/components/GroupingMapping.js +18 -4
  80. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  81. package/lib/cjs/widget/components/Mapping.d.ts +2 -2
  82. package/lib/cjs/widget/components/Mapping.js +37 -15
  83. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  84. package/lib/cjs/widget/components/MappingAction.d.ts +2 -2
  85. package/lib/cjs/widget/components/MappingAction.js +15 -14
  86. package/lib/cjs/widget/components/MappingAction.js.map +1 -1
  87. package/lib/cjs/widget/components/MappingImportWizardModal.js +2 -2
  88. package/lib/cjs/widget/components/MappingImportWizardModal.js.map +1 -1
  89. package/lib/cjs/widget/components/MappingImportWizardModal.scss +6 -2
  90. package/lib/cjs/widget/components/PropertyMenu.d.ts +2 -2
  91. package/lib/cjs/widget/components/PropertyMenu.js +68 -21
  92. package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
  93. package/lib/cjs/widget/components/SelectIModel.js +4 -8
  94. package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
  95. package/lib/cjs/widget/components/SelectIModel.scss +2 -1
  96. package/lib/cjs/widget/components/SelectMapping.scss +2 -1
  97. package/lib/cjs/widget/components/SelectMappings.d.ts +2 -2
  98. package/lib/cjs/widget/components/SelectMappings.js +10 -11
  99. package/lib/cjs/widget/components/SelectMappings.js.map +1 -1
  100. package/lib/cjs/widget/components/SelectProject.js +12 -16
  101. package/lib/cjs/widget/components/SelectProject.js.map +1 -1
  102. package/lib/cjs/widget/components/SelectProject.scss +3 -8
  103. package/lib/cjs/widget/hooks/useFetchData.d.ts +9 -0
  104. package/lib/cjs/widget/hooks/useFetchData.js +41 -0
  105. package/lib/cjs/widget/hooks/useFetchData.js.map +1 -0
  106. package/lib/cjs/widget/hooks/useFormulaValidation.d.ts +6 -0
  107. package/lib/cjs/widget/hooks/useFormulaValidation.js +29 -0
  108. package/lib/cjs/widget/hooks/useFormulaValidation.js.map +1 -0
  109. package/lib/cjs/widget/utils.d.ts +1 -0
  110. package/lib/cjs/widget/utils.js +9 -0
  111. package/lib/cjs/widget/utils.js.map +1 -1
  112. package/lib/esm/formula/FormulaFunctionProvider.d.ts +18 -0
  113. package/lib/esm/formula/FormulaFunctionProvider.js +130 -0
  114. package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -0
  115. package/lib/esm/formula/FormulaOperatorsProvider.d.ts +34 -0
  116. package/lib/esm/formula/FormulaOperatorsProvider.js +174 -0
  117. package/lib/esm/formula/FormulaOperatorsProvider.js.map +1 -0
  118. package/lib/esm/formula/FormulaSplitter.d.ts +2 -0
  119. package/lib/esm/formula/FormulaSplitter.js +136 -0
  120. package/lib/esm/formula/FormulaSplitter.js.map +1 -0
  121. package/lib/esm/formula/FormulaTokensValidator.d.ts +5 -0
  122. package/lib/esm/formula/FormulaTokensValidator.js +131 -0
  123. package/lib/esm/formula/FormulaTokensValidator.js.map +1 -0
  124. package/lib/esm/formula/FormulaValidator.d.ts +3 -0
  125. package/lib/esm/formula/FormulaValidator.js +31 -0
  126. package/lib/esm/formula/FormulaValidator.js.map +1 -0
  127. package/lib/esm/formula/IResult.d.ts +5 -0
  128. package/lib/esm/formula/IResult.js +2 -0
  129. package/lib/esm/formula/IResult.js.map +1 -0
  130. package/lib/esm/formula/InfixToPostfixConverter.d.ts +18 -0
  131. package/lib/esm/formula/InfixToPostfixConverter.js +295 -0
  132. package/lib/esm/formula/InfixToPostfixConverter.js.map +1 -0
  133. package/lib/esm/formula/InputStream.d.ts +12 -0
  134. package/lib/esm/formula/InputStream.js +32 -0
  135. package/lib/esm/formula/InputStream.js.map +1 -0
  136. package/lib/esm/formula/ParenthesisValidator.d.ts +7 -0
  137. package/lib/esm/formula/ParenthesisValidator.js +30 -0
  138. package/lib/esm/formula/ParenthesisValidator.js.map +1 -0
  139. package/lib/esm/formula/Queue.d.ts +11 -0
  140. package/lib/esm/formula/Queue.js +38 -0
  141. package/lib/esm/formula/Queue.js.map +1 -0
  142. package/lib/esm/formula/Stack.d.ts +14 -0
  143. package/lib/esm/formula/Stack.js +67 -0
  144. package/lib/esm/formula/Stack.js.map +1 -0
  145. package/lib/esm/formula/StringBuilder.d.ts +9 -0
  146. package/lib/esm/formula/StringBuilder.js +22 -0
  147. package/lib/esm/formula/StringBuilder.js.map +1 -0
  148. package/lib/esm/formula/Types.d.ts +8 -0
  149. package/lib/esm/formula/Types.js +2 -0
  150. package/lib/esm/formula/Types.js.map +1 -0
  151. package/lib/esm/formula/Utils.d.ts +7 -0
  152. package/lib/esm/formula/Utils.js +30 -0
  153. package/lib/esm/formula/Utils.js.map +1 -0
  154. package/lib/esm/widget/GroupingMappingWidget.d.ts +4 -0
  155. package/lib/esm/widget/GroupingMappingWidget.js +6 -4
  156. package/lib/esm/widget/GroupingMappingWidget.js.map +1 -1
  157. package/lib/esm/widget/components/BlockingOverlay.d.ts +7 -0
  158. package/lib/esm/widget/components/BlockingOverlay.js +14 -0
  159. package/lib/esm/widget/components/BlockingOverlay.js.map +1 -0
  160. package/lib/esm/widget/components/BlockingOverlay.scss +26 -0
  161. package/lib/esm/widget/components/CalculatedPropertyAction.d.ts +3 -3
  162. package/lib/esm/widget/components/CalculatedPropertyAction.js +16 -11
  163. package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
  164. package/lib/esm/widget/components/CalculatedPropertyTable.d.ts +9 -6
  165. package/lib/esm/widget/components/CalculatedPropertyTable.js +9 -34
  166. package/lib/esm/widget/components/CalculatedPropertyTable.js.map +1 -1
  167. package/lib/esm/widget/components/ConfirmMappingsImport.d.ts +3 -3
  168. package/lib/esm/widget/components/ConfirmMappingsImport.js +7 -4
  169. package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
  170. package/lib/esm/widget/components/ConfirmMappingsImport.scss +4 -2
  171. package/lib/esm/widget/components/CustomCalculationAction.d.ts +6 -4
  172. package/lib/esm/widget/components/CustomCalculationAction.js +24 -13
  173. package/lib/esm/widget/components/CustomCalculationAction.js.map +1 -1
  174. package/lib/esm/widget/components/CustomCalculationTable.d.ts +9 -6
  175. package/lib/esm/widget/components/CustomCalculationTable.js +9 -34
  176. package/lib/esm/widget/components/CustomCalculationTable.js.map +1 -1
  177. package/lib/esm/widget/components/GroupAction.d.ts +2 -2
  178. package/lib/esm/widget/components/GroupAction.js +11 -14
  179. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  180. package/lib/esm/widget/components/GroupPropertyAction.d.ts +1 -1
  181. package/lib/esm/widget/components/GroupPropertyAction.js +13 -9
  182. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  183. package/lib/esm/widget/components/GroupPropertyTable.d.ts +9 -6
  184. package/lib/esm/widget/components/GroupPropertyTable.js +9 -34
  185. package/lib/esm/widget/components/GroupPropertyTable.js.map +1 -1
  186. package/lib/esm/widget/components/Grouping.d.ts +3 -3
  187. package/lib/esm/widget/components/Grouping.js +23 -23
  188. package/lib/esm/widget/components/Grouping.js.map +1 -1
  189. package/lib/esm/widget/components/GroupingMapping.d.ts +12 -2
  190. package/lib/esm/widget/components/GroupingMapping.js +17 -4
  191. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  192. package/lib/esm/widget/components/Mapping.d.ts +2 -2
  193. package/lib/esm/widget/components/Mapping.js +39 -17
  194. package/lib/esm/widget/components/Mapping.js.map +1 -1
  195. package/lib/esm/widget/components/MappingAction.d.ts +2 -2
  196. package/lib/esm/widget/components/MappingAction.js +17 -16
  197. package/lib/esm/widget/components/MappingAction.js.map +1 -1
  198. package/lib/esm/widget/components/MappingImportWizardModal.js +2 -2
  199. package/lib/esm/widget/components/MappingImportWizardModal.js.map +1 -1
  200. package/lib/esm/widget/components/MappingImportWizardModal.scss +6 -2
  201. package/lib/esm/widget/components/PropertyMenu.d.ts +2 -2
  202. package/lib/esm/widget/components/PropertyMenu.js +69 -22
  203. package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
  204. package/lib/esm/widget/components/SelectIModel.js +5 -6
  205. package/lib/esm/widget/components/SelectIModel.js.map +1 -1
  206. package/lib/esm/widget/components/SelectIModel.scss +2 -1
  207. package/lib/esm/widget/components/SelectMapping.scss +2 -1
  208. package/lib/esm/widget/components/SelectMappings.d.ts +2 -2
  209. package/lib/esm/widget/components/SelectMappings.js +11 -12
  210. package/lib/esm/widget/components/SelectMappings.js.map +1 -1
  211. package/lib/esm/widget/components/SelectProject.js +13 -14
  212. package/lib/esm/widget/components/SelectProject.js.map +1 -1
  213. package/lib/esm/widget/components/SelectProject.scss +3 -8
  214. package/lib/esm/widget/hooks/useFetchData.d.ts +9 -0
  215. package/lib/esm/widget/hooks/useFetchData.js +35 -0
  216. package/lib/esm/widget/hooks/useFetchData.js.map +1 -0
  217. package/lib/esm/widget/hooks/useFormulaValidation.d.ts +6 -0
  218. package/lib/esm/widget/hooks/useFormulaValidation.js +25 -0
  219. package/lib/esm/widget/hooks/useFormulaValidation.js.map +1 -0
  220. package/lib/esm/widget/utils.d.ts +1 -0
  221. package/lib/esm/widget/utils.js +7 -1
  222. package/lib/esm/widget/utils.js.map +1 -1
  223. package/package.json +3 -2
  224. package/lib/cjs/api/generated/api.d.ts +0 -3222
  225. package/lib/cjs/api/generated/api.js +0 -5291
  226. package/lib/cjs/api/generated/api.js.map +0 -1
  227. package/lib/cjs/api/generated/configuration.d.ts +0 -56
  228. package/lib/cjs/api/generated/configuration.js +0 -30
  229. package/lib/cjs/api/generated/configuration.js.map +0 -1
  230. package/lib/cjs/api/generated/index.d.ts +0 -14
  231. package/lib/cjs/api/generated/index.js +0 -31
  232. package/lib/cjs/api/generated/index.js.map +0 -1
  233. package/lib/cjs/api/reportingClient.d.ts +0 -34
  234. package/lib/cjs/api/reportingClient.js +0 -177
  235. package/lib/cjs/api/reportingClient.js.map +0 -1
  236. package/lib/cjs/widget/hooks/useFetchAccessToken.d.ts +0 -3
  237. package/lib/cjs/widget/hooks/useFetchAccessToken.js +0 -22
  238. package/lib/cjs/widget/hooks/useFetchAccessToken.js.map +0 -1
  239. package/lib/esm/api/generated/api.d.ts +0 -3222
  240. package/lib/esm/api/generated/api.js +0 -5248
  241. package/lib/esm/api/generated/api.js.map +0 -1
  242. package/lib/esm/api/generated/configuration.d.ts +0 -56
  243. package/lib/esm/api/generated/configuration.js +0 -26
  244. package/lib/esm/api/generated/configuration.js.map +0 -1
  245. package/lib/esm/api/generated/index.d.ts +0 -14
  246. package/lib/esm/api/generated/index.js +0 -19
  247. package/lib/esm/api/generated/index.js.map +0 -1
  248. package/lib/esm/api/reportingClient.d.ts +0 -34
  249. package/lib/esm/api/reportingClient.js +0 -173
  250. package/lib/esm/api/reportingClient.js.map +0 -1
  251. package/lib/esm/widget/hooks/useFetchAccessToken.d.ts +0 -3
  252. package/lib/esm/widget/hooks/useFetchAccessToken.js +0 -20
  253. package/lib/esm/widget/hooks/useFetchAccessToken.js.map +0 -1
@@ -29,40 +29,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
30
30
  const itwinui_react_1 = require("@itwin/itwinui-react");
31
31
  const react_1 = __importStar(require("react"));
32
- const reportingClient_1 = require("../../api/reportingClient");
33
32
  const DeleteModal_1 = __importDefault(require("./DeleteModal"));
34
33
  const PropertyMenu_1 = require("./PropertyMenu");
35
- const utils_1 = require("./utils");
36
- const fetchGroupProperties = async (setGroupProperties, iModelId, mappingId, groupId, setIsLoading) => {
34
+ const insights_client_1 = require("@itwin/insights-client");
35
+ const GroupingMapping_1 = require("./GroupingMapping");
36
+ const GroupPropertyTable = ({ iModelId, mappingId, groupId, selectedGroupProperty, onGroupPropertyModify, setSelectedGroupProperty, isLoadingGroupProperties, groupProperties, refreshGroupProperties, setGroupModifyView, }) => {
37
37
  var _a;
38
- try {
39
- setIsLoading(true);
40
- const groupProperties = await reportingClient_1.reportingClientApi.getGroupProperties(iModelId, mappingId, groupId);
41
- setGroupProperties((_a = groupProperties.properties) !== null && _a !== void 0 ? _a : []);
42
- }
43
- catch (error) {
44
- utils_1.handleError(error.status);
45
- }
46
- finally {
47
- setIsLoading(false);
48
- }
49
- };
50
- const useFetchGroupProperties = (iModelId, mappingId, groupId, setIsLoading) => {
51
- const [groupProperties, setGroupProperties] = react_1.useState([]);
52
- react_1.useEffect(() => {
53
- void fetchGroupProperties(setGroupProperties, iModelId, mappingId, groupId, setIsLoading);
54
- }, [groupId, iModelId, mappingId, setIsLoading]);
55
- return [groupProperties, setGroupProperties];
56
- };
57
- const GroupPropertyTable = ({ iModelId, mappingId, groupId, selectedGroupProperty, onGroupPropertyModify, setSelectedGroupProperty, setGroupModifyView, }) => {
58
- var _a;
59
- const [isLoading, setIsLoading] = react_1.useState(true);
60
- const [groupProperties, setGroupProperties] = useFetchGroupProperties(iModelId, mappingId, groupId, setIsLoading);
38
+ const apiContext = react_1.useContext(GroupingMapping_1.ApiContext);
61
39
  const [showGroupPropertyDeleteModal, setShowGroupPropertyDeleteModal] = react_1.useState(false);
62
- const refresh = react_1.useCallback(async () => {
63
- setGroupProperties([]);
64
- await fetchGroupProperties(setGroupProperties, iModelId, mappingId, groupId, setIsLoading);
65
- }, [groupId, iModelId, mappingId, setGroupProperties]);
66
40
  const groupPropertiesColumns = react_1.useMemo(() => [
67
41
  {
68
42
  Header: "Table",
@@ -100,11 +74,12 @@ const GroupPropertyTable = ({ iModelId, mappingId, groupId, selectedGroupPropert
100
74
  react_1.default.createElement(itwinui_react_1.Button, { startIcon: react_1.default.createElement(itwinui_icons_react_1.SvgAdd, null), styleType: 'high-visibility', onClick: () => {
101
75
  setGroupModifyView(PropertyMenu_1.PropertyMenuView.ADD_GROUP_PROPERTY);
102
76
  } }, "Add Property"),
103
- react_1.default.createElement(itwinui_react_1.Table, { data: groupProperties, density: 'extra-condensed', columns: groupPropertiesColumns, emptyTableContent: 'No Group Properties', isSortable: true, isLoading: isLoading }),
77
+ react_1.default.createElement(itwinui_react_1.Table, { data: groupProperties, density: 'extra-condensed', columns: groupPropertiesColumns, emptyTableContent: 'No Group Properties', isSortable: true, isLoading: isLoadingGroupProperties }),
104
78
  react_1.default.createElement(DeleteModal_1.default, { entityName: (_a = selectedGroupProperty === null || selectedGroupProperty === void 0 ? void 0 : selectedGroupProperty.propertyName) !== null && _a !== void 0 ? _a : "", show: showGroupPropertyDeleteModal, setShow: setShowGroupPropertyDeleteModal, onDelete: async () => {
105
79
  var _a;
106
- await reportingClient_1.reportingClientApi.deleteGroupProperty(iModelId, mappingId, groupId, (_a = selectedGroupProperty === null || selectedGroupProperty === void 0 ? void 0 : selectedGroupProperty.id) !== null && _a !== void 0 ? _a : "");
107
- }, refresh: refresh })));
80
+ const reportingClientApi = new insights_client_1.ReportingClient(apiContext.prefix);
81
+ await reportingClientApi.deleteGroupProperty(apiContext.accessToken, iModelId, mappingId, groupId, (_a = selectedGroupProperty === null || selectedGroupProperty === void 0 ? void 0 : selectedGroupProperty.id) !== null && _a !== void 0 ? _a : "");
82
+ }, refresh: refreshGroupProperties })));
108
83
  };
109
84
  exports.default = GroupPropertyTable;
110
85
  //# sourceMappingURL=GroupPropertyTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupPropertyTable.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupPropertyTable.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, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { GroupPropertyReportingAPI } from \"../../api/generated/api\";\nimport { reportingClientApi } from \"../../api/reportingClient\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport type { CellProps } from \"react-table\";\nimport DeleteModal from \"./DeleteModal\";\nimport { PropertyMenuView } from \"./PropertyMenu\";\nimport { handleError } from \"./utils\";\n\nexport type GroupProperty = CreateTypeFromInterface<GroupPropertyReportingAPI>;\n\nconst fetchGroupProperties = async (\n setGroupProperties: React.Dispatch<React.SetStateAction<GroupProperty[]>>,\n iModelId: string,\n mappingId: string,\n groupId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n) => {\n try {\n setIsLoading(true);\n const groupProperties = await reportingClientApi.getGroupProperties(\n iModelId,\n mappingId,\n groupId,\n );\n setGroupProperties(groupProperties.properties ?? []);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nconst useFetchGroupProperties = (\n iModelId: string,\n mappingId: string,\n groupId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n): [GroupProperty[], React.Dispatch<React.SetStateAction<GroupProperty[]>>] => {\n const [groupProperties, setGroupProperties] = useState<GroupProperty[]>([]);\n\n useEffect(() => {\n void fetchGroupProperties(\n setGroupProperties,\n iModelId,\n mappingId,\n groupId,\n setIsLoading,\n );\n }, [groupId, iModelId, mappingId, setIsLoading]);\n\n return [groupProperties, setGroupProperties];\n};\n\ninterface GroupPropertyTableProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n\n setSelectedGroupProperty: React.Dispatch<\n React.SetStateAction<\n CreateTypeFromInterface<GroupPropertyReportingAPI> | undefined\n >\n >;\n setGroupModifyView: React.Dispatch<React.SetStateAction<PropertyMenuView>>;\n onGroupPropertyModify: (value: CellProps<GroupProperty>) => void;\n selectedGroupProperty?: GroupProperty;\n}\n\nconst GroupPropertyTable = ({\n iModelId,\n mappingId,\n groupId,\n selectedGroupProperty,\n onGroupPropertyModify,\n setSelectedGroupProperty,\n setGroupModifyView,\n}: GroupPropertyTableProps) => {\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [groupProperties, setGroupProperties] = useFetchGroupProperties(\n iModelId,\n mappingId,\n groupId,\n setIsLoading,\n );\n const [showGroupPropertyDeleteModal, setShowGroupPropertyDeleteModal] =\n useState<boolean>(false);\n\n const refresh = useCallback(async () => {\n setGroupProperties([]);\n await fetchGroupProperties(\n setGroupProperties,\n iModelId,\n mappingId,\n groupId,\n setIsLoading,\n );\n }, [groupId, iModelId, mappingId, setGroupProperties]);\n\n const groupPropertiesColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"propertyName\",\n Header: \"Property\",\n accessor: \"propertyName\",\n Cell: (value: CellProps<GroupProperty>) => (\n <div\n className='iui-anchor'\n onClick={() => onGroupPropertyModify(value)}\n >\n {value.row.original.propertyName}\n </div>\n ),\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<GroupProperty>) => {\n return (\n <DropdownMenu\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => onGroupPropertyModify(value)}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={() => {\n setSelectedGroupProperty(value.row.original);\n setShowGroupPropertyDeleteModal(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 [onGroupPropertyModify, setSelectedGroupProperty],\n );\n\n return (\n <>\n <Button\n startIcon={<SvgAdd />}\n styleType='high-visibility'\n onClick={() => {\n setGroupModifyView(PropertyMenuView.ADD_GROUP_PROPERTY);\n }}\n >\n Add Property\n </Button>\n <Table<GroupProperty>\n data={groupProperties}\n density='extra-condensed'\n columns={groupPropertiesColumns}\n emptyTableContent='No Group Properties'\n isSortable\n isLoading={isLoading}\n />\n <DeleteModal\n entityName={selectedGroupProperty?.propertyName ?? \"\"}\n show={showGroupPropertyDeleteModal}\n setShow={setShowGroupPropertyDeleteModal}\n onDelete={async () => {\n await reportingClientApi.deleteGroupProperty(\n iModelId,\n mappingId,\n groupId,\n selectedGroupProperty?.id ?? \"\",\n );\n }}\n refresh={refresh}\n />\n </>\n );\n};\n\nexport default GroupPropertyTable;\n"]}
1
+ {"version":3,"file":"GroupPropertyTable.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupPropertyTable.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, { useContext, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport type { CellProps } from \"react-table\";\nimport DeleteModal from \"./DeleteModal\";\nimport { PropertyMenuView } from \"./PropertyMenu\";\nimport type { GroupProperty } from \"@itwin/insights-client\";\nimport { ReportingClient } from \"@itwin/insights-client\";\nimport { ApiContext } from \"./GroupingMapping\";\n\nexport type GroupPropertyType = CreateTypeFromInterface<GroupProperty>;\n\ninterface GroupPropertyTableProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n setSelectedGroupProperty: React.Dispatch<\n React.SetStateAction<\n CreateTypeFromInterface<GroupPropertyType> | undefined\n >\n >;\n setGroupModifyView: React.Dispatch<React.SetStateAction<PropertyMenuView>>;\n onGroupPropertyModify: (value: CellProps<GroupPropertyType>) => void;\n isLoadingGroupProperties: boolean;\n groupProperties: GroupPropertyType[];\n refreshGroupProperties: () => Promise<void>;\n selectedGroupProperty?: GroupPropertyType;\n}\n\nconst GroupPropertyTable = ({\n iModelId,\n mappingId,\n groupId,\n selectedGroupProperty,\n onGroupPropertyModify,\n setSelectedGroupProperty,\n isLoadingGroupProperties,\n groupProperties,\n refreshGroupProperties,\n setGroupModifyView,\n}: GroupPropertyTableProps) => {\n const apiContext = useContext(ApiContext);\n const [showGroupPropertyDeleteModal, setShowGroupPropertyDeleteModal] =\n useState<boolean>(false);\n\n const groupPropertiesColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"propertyName\",\n Header: \"Property\",\n accessor: \"propertyName\",\n Cell: (value: CellProps<GroupPropertyType>) => (\n <div\n className='iui-anchor'\n onClick={() => onGroupPropertyModify(value)}\n >\n {value.row.original.propertyName}\n </div>\n ),\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<GroupPropertyType>) => {\n return (\n <DropdownMenu\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => onGroupPropertyModify(value)}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={() => {\n setSelectedGroupProperty(value.row.original);\n setShowGroupPropertyDeleteModal(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 [onGroupPropertyModify, setSelectedGroupProperty],\n );\n\n return (\n <>\n <Button\n startIcon={<SvgAdd />}\n styleType='high-visibility'\n onClick={() => {\n setGroupModifyView(PropertyMenuView.ADD_GROUP_PROPERTY);\n }}\n >\n Add Property\n </Button>\n <Table<GroupPropertyType>\n data={groupProperties}\n density='extra-condensed'\n columns={groupPropertiesColumns}\n emptyTableContent='No Group Properties'\n isSortable\n isLoading={isLoadingGroupProperties}\n />\n <DeleteModal\n entityName={selectedGroupProperty?.propertyName ?? \"\"}\n show={showGroupPropertyDeleteModal}\n setShow={setShowGroupPropertyDeleteModal}\n onDelete={async () => {\n const reportingClientApi = new ReportingClient(apiContext.prefix);\n await reportingClientApi.deleteGroupProperty(\n apiContext.accessToken,\n iModelId,\n mappingId,\n groupId,\n selectedGroupProperty?.id ?? \"\",\n );\n }}\n refresh={refreshGroupProperties}\n />\n </>\n );\n};\n\nexport default GroupPropertyTable;\n"]}
@@ -1,10 +1,10 @@
1
1
  /// <reference types="react" />
2
- import type { GroupReportingAPI, MappingReportingAPI } from "../../api/generated/api";
3
2
  import type { CreateTypeFromInterface } from "../utils";
4
3
  import "./Grouping.scss";
5
- export declare type Group = CreateTypeFromInterface<GroupReportingAPI>;
4
+ import type { Group, Mapping } from "@itwin/insights-client";
5
+ export declare type GroupType = CreateTypeFromInterface<Group>;
6
6
  interface GroupsTreeProps {
7
- mapping: MappingReportingAPI;
7
+ mapping: Mapping;
8
8
  goBack: () => Promise<void>;
9
9
  }
10
10
  export declare const Groupings: ({ mapping, goBack }: GroupsTreeProps) => JSX.Element | null;
@@ -26,7 +26,6 @@ exports.Groupings = void 0;
26
26
  const react_table_1 = require("react-table");
27
27
  const appui_react_1 = require("@itwin/appui-react");
28
28
  const react_1 = __importStar(require("react"));
29
- const reportingClient_1 = require("../../api/reportingClient");
30
29
  const itwinui_react_1 = require("@itwin/itwinui-react");
31
30
  const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
32
31
  const DeleteModal_1 = __importDefault(require("./DeleteModal"));
@@ -35,6 +34,8 @@ const PropertyMenu_1 = require("./PropertyMenu");
35
34
  const viewerUtils_1 = require("./viewerUtils");
36
35
  const utils_1 = require("./utils");
37
36
  const GroupAction_1 = __importDefault(require("./GroupAction"));
37
+ const insights_client_1 = require("@itwin/insights-client");
38
+ const GroupingMapping_1 = require("./GroupingMapping");
38
39
  var GroupsView;
39
40
  (function (GroupsView) {
40
41
  GroupsView["GROUPS"] = "groups";
@@ -42,12 +43,12 @@ var GroupsView;
42
43
  GroupsView["ADD"] = "ADD";
43
44
  GroupsView["PROPERTIES"] = "properties";
44
45
  })(GroupsView || (GroupsView = {}));
45
- const fetchGroups = async (setGroups, iModelId, mappingId, setIsLoading) => {
46
- var _a;
46
+ const fetchGroups = async (setGroups, iModelId, mappingId, setIsLoading, apiContext) => {
47
47
  try {
48
48
  setIsLoading(true);
49
- const groups = await reportingClient_1.reportingClientApi.getGroups(iModelId, mappingId);
50
- setGroups((_a = groups.groups) !== null && _a !== void 0 ? _a : []);
49
+ const reportingClientApi = new insights_client_1.ReportingClient(apiContext.prefix);
50
+ const groups = await reportingClientApi.getGroups(apiContext.accessToken, iModelId, mappingId);
51
+ setGroups(groups);
51
52
  }
52
53
  catch (error) {
53
54
  utils_1.handleError(error.status);
@@ -56,32 +57,30 @@ const fetchGroups = async (setGroups, iModelId, mappingId, setIsLoading) => {
56
57
  setIsLoading(false);
57
58
  }
58
59
  };
59
- const useFetchGroups = (iModelId, mappingId, setIsLoading) => {
60
- const [groups, setGroups] = react_1.useState([]);
61
- react_1.useEffect(() => {
62
- void fetchGroups(setGroups, iModelId, mappingId, setIsLoading);
63
- }, [iModelId, mappingId, setIsLoading]);
64
- return [groups, setGroups];
65
- };
66
60
  const Groupings = ({ mapping, goBack }) => {
67
- var _a, _b, _c, _d, _e, _f, _g;
61
+ var _a, _b, _c, _d, _e, _f;
68
62
  const iModelConnection = appui_react_1.useActiveIModelConnection();
63
+ const apiContext = react_1.useContext(GroupingMapping_1.ApiContext);
69
64
  const iModelId = (_a = appui_react_1.useActiveIModelConnection()) === null || _a === void 0 ? void 0 : _a.iModelId;
70
65
  const [showDeleteModal, setShowDeleteModal] = react_1.useState(false);
71
66
  const [isLoading, setIsLoading] = react_1.useState(true);
72
67
  const [groupsView, setGroupsView] = react_1.useState(GroupsView.GROUPS);
73
68
  const [selectedGroup, setSelectedGroup] = react_1.useState(undefined);
74
- const [groups, setGroups] = useFetchGroups(iModelId, (_b = mapping.id) !== null && _b !== void 0 ? _b : "", setIsLoading);
75
69
  const hilitedElements = react_1.useRef(new Map());
76
70
  const [selectedRows, setSelectedRows] = react_1.useState({});
77
71
  const [isLoadingQuery, setLoadingQuery] = react_1.useState(false);
72
+ const [groups, setGroups] = react_1.useState([]);
73
+ react_1.useEffect(() => {
74
+ var _a;
75
+ void fetchGroups(setGroups, iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", setIsLoading, apiContext);
76
+ }, [apiContext, iModelId, mapping.id, setIsLoading]);
78
77
  const refresh = react_1.useCallback(async () => {
79
78
  var _a;
80
79
  setGroupsView(GroupsView.GROUPS);
81
80
  setSelectedGroup(undefined);
82
81
  setGroups([]);
83
- await fetchGroups(setGroups, iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", setIsLoading);
84
- }, [iModelId, mapping.id, setGroups]);
82
+ await fetchGroups(setGroups, iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", setIsLoading, apiContext);
83
+ }, [apiContext, iModelId, mapping.id, setGroups]);
85
84
  const addGroup = () => {
86
85
  // TODO Retain selection in view without emphasizes. Goal is to make it so we can distinguish
87
86
  // hilited elements from regular elements without emphasis due to it blocking selection. For now clearing
@@ -239,31 +238,32 @@ const Groupings = ({ mapping, goBack }) => {
239
238
  };
240
239
  switch (groupsView) {
241
240
  case GroupsView.ADD:
242
- return (react_1.default.createElement(GroupAction_1.default, { iModelId: iModelId, mappingId: (_c = mapping.id) !== null && _c !== void 0 ? _c : "", goBack: async () => {
241
+ return (react_1.default.createElement(GroupAction_1.default, { iModelId: iModelId, mappingId: (_b = mapping.id) !== null && _b !== void 0 ? _b : "", goBack: async () => {
243
242
  viewerUtils_1.clearEmphasizedElements();
244
243
  setGroupsView(GroupsView.GROUPS);
245
244
  await refresh();
246
245
  } }));
247
246
  case GroupsView.MODIFYING:
248
- return selectedGroup ? (react_1.default.createElement(GroupAction_1.default, { iModelId: iModelId, mappingId: (_d = mapping.id) !== null && _d !== void 0 ? _d : "", group: selectedGroup, goBack: async () => {
247
+ return selectedGroup ? (react_1.default.createElement(GroupAction_1.default, { iModelId: iModelId, mappingId: (_c = mapping.id) !== null && _c !== void 0 ? _c : "", group: selectedGroup, goBack: async () => {
249
248
  viewerUtils_1.clearEmphasizedElements();
250
249
  setGroupsView(GroupsView.GROUPS);
251
250
  await refresh();
252
251
  } })) : null;
253
252
  case GroupsView.PROPERTIES:
254
- return selectedGroup ? (react_1.default.createElement(PropertyMenu_1.PropertyMenu, { iModelId: iModelId, mappingId: (_e = mapping.id) !== null && _e !== void 0 ? _e : "", group: selectedGroup, goBack: propertyMenuGoBack })) : null;
253
+ return selectedGroup ? (react_1.default.createElement(PropertyMenu_1.PropertyMenu, { iModelId: iModelId, mappingId: (_d = mapping.id) !== null && _d !== void 0 ? _d : "", group: selectedGroup, goBack: propertyMenuGoBack })) : null;
255
254
  default:
256
255
  return (react_1.default.createElement(react_1.default.Fragment, null,
257
- react_1.default.createElement(utils_1.WidgetHeader, { title: (_f = mapping.mappingName) !== null && _f !== void 0 ? _f : "", disabled: isLoading || isLoadingQuery, returnFn: async () => {
256
+ react_1.default.createElement(utils_1.WidgetHeader, { title: (_e = mapping.mappingName) !== null && _e !== void 0 ? _e : "", disabled: isLoading || isLoadingQuery, returnFn: async () => {
258
257
  viewerUtils_1.clearEmphasizedElements();
259
258
  await goBack();
260
259
  } }),
261
260
  react_1.default.createElement("div", { className: 'groups-container' },
262
261
  react_1.default.createElement(itwinui_react_1.Button, { startIcon: isLoadingQuery ? react_1.default.createElement(itwinui_react_1.ProgressRadial, { size: "small", indeterminate: true }) : react_1.default.createElement(itwinui_icons_react_1.SvgAdd, null), styleType: 'high-visibility', disabled: isLoadingQuery, onClick: () => addGroup() }, isLoadingQuery ? "Loading Group(s)" : "Add Group"),
263
262
  react_1.default.createElement(itwinui_react_1.Table, { data: groups, density: 'extra-condensed', columns: groupsColumns, emptyTableContent: 'No Groups available.', isSortable: true, isSelectable: true, onSelect: onSelect, isLoading: isLoading, isRowDisabled: () => isLoadingQuery, stateReducer: tableStateReducer, useControlledState: controlledState })),
264
- react_1.default.createElement(DeleteModal_1.default, { entityName: (_g = selectedGroup === null || selectedGroup === void 0 ? void 0 : selectedGroup.groupName) !== null && _g !== void 0 ? _g : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
263
+ react_1.default.createElement(DeleteModal_1.default, { entityName: (_f = selectedGroup === null || selectedGroup === void 0 ? void 0 : selectedGroup.groupName) !== null && _f !== void 0 ? _f : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
265
264
  var _a, _b;
266
- await reportingClient_1.reportingClientApi.deleteGroup(iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", (_b = selectedGroup === null || selectedGroup === void 0 ? void 0 : selectedGroup.id) !== null && _b !== void 0 ? _b : "");
265
+ const reportingClientApi = new insights_client_1.ReportingClient(apiContext.prefix);
266
+ await reportingClientApi.deleteGroup(apiContext.accessToken, iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", (_b = selectedGroup === null || selectedGroup === void 0 ? void 0 : selectedGroup.id) !== null && _b !== void 0 ? _b : "");
267
267
  }, refresh: refresh })));
268
268
  }
269
269
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Grouping.js","sourceRoot":"","sources":["../../../../src/widget/components/Grouping.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 {\n ActionType,\n CellProps,\n TableInstance,\n TableState,\n} from \"react-table\";\nimport {\n actions,\n} from \"react-table\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { GroupReportingAPI, MappingReportingAPI } from \"../../api/generated/api\";\nimport { reportingClientApi } from \"../../api/reportingClient\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n ProgressRadial,\n Table,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgList,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport DeleteModal from \"./DeleteModal\";\nimport \"./Grouping.scss\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { PropertyMenu } from \"./PropertyMenu\";\nimport {\n clearEmphasizedElements,\n visualizeElements,\n visualizeElementsById,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { fetchIdsFromQuery, handleError, WidgetHeader } from \"./utils\";\nimport GroupAction from \"./GroupAction\";\n\nexport type Group = CreateTypeFromInterface<GroupReportingAPI>;\n\nenum GroupsView {\n GROUPS = \"groups\",\n MODIFYING = \"modifying\",\n ADD = \"ADD\",\n PROPERTIES = \"properties\",\n}\n\ninterface GroupsTreeProps {\n mapping: MappingReportingAPI;\n goBack: () => Promise<void>;\n}\n\nconst fetchGroups = async (\n setGroups: React.Dispatch<React.SetStateAction<Group[]>>,\n iModelId: string,\n mappingId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n) => {\n try {\n setIsLoading(true);\n const groups = await reportingClientApi.getGroups(iModelId, mappingId);\n setGroups(groups.groups ?? []);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nconst useFetchGroups = (\n iModelId: string,\n mappingId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n): [Group[], React.Dispatch<React.SetStateAction<Group[]>>] => {\n const [groups, setGroups] = useState<GroupReportingAPI[]>([]);\n\n useEffect(() => {\n void fetchGroups(setGroups, iModelId, mappingId, setIsLoading);\n }, [iModelId, mappingId, setIsLoading]);\n\n return [groups, setGroups];\n};\n\nexport const Groupings = ({ mapping, goBack }: GroupsTreeProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const iModelId = useActiveIModelConnection()?.iModelId as string;\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [groupsView, setGroupsView] = useState<GroupsView>(GroupsView.GROUPS);\n const [selectedGroup, setSelectedGroup] = useState<Group | undefined>(\n undefined,\n );\n const [groups, setGroups] = useFetchGroups(\n iModelId,\n mapping.id ?? \"\",\n setIsLoading,\n );\n const hilitedElements = useRef<Map<string, string[]>>(new Map());\n const [selectedRows, setSelectedRows] = useState<Record<string, boolean>>({});\n const [isLoadingQuery, setLoadingQuery] = useState<boolean>(false);\n\n const refresh = useCallback(async () => {\n setGroupsView(GroupsView.GROUPS);\n setSelectedGroup(undefined);\n setGroups([]);\n await fetchGroups(setGroups, iModelId, mapping.id ?? \"\", setIsLoading);\n }, [iModelId, mapping.id, setGroups]);\n\n const addGroup = () => {\n // TODO Retain selection in view without emphasizes. Goal is to make it so we can distinguish\n // hilited elements from regular elements without emphasis due to it blocking selection. For now clearing\n // selection.\n clearEmphasizedElements();\n setGroupsView(GroupsView.ADD);\n };\n\n const onModify = useCallback((value) => {\n clearEmphasizedElements();\n setSelectedGroup(value.row.original);\n setGroupsView(GroupsView.MODIFYING);\n }, []);\n\n const openProperties = useCallback((value) => {\n clearEmphasizedElements();\n setSelectedGroup(value.row.original);\n setGroupsView(GroupsView.PROPERTIES);\n }, []);\n\n const groupsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"groupName\",\n Header: \"Group\",\n accessor: \"groupName\",\n Cell: (value: CellProps<Group>) => (\n <>\n {isLoadingQuery ? (\n value.row.original.groupName\n ) : (\n <div\n className='iui-anchor'\n onClick={(e) => {\n e.stopPropagation();\n openProperties(value);\n }}\n >\n {value.row.original.groupName}\n </div>\n )}\n </>\n ),\n },\n {\n id: \"description\",\n Header: \"Description\",\n accessor: \"description\",\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<Group>) => {\n return (\n <div onClick={(e) => e.stopPropagation()}>\n <DropdownMenu\n disabled={isLoadingQuery}\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => onModify(value)}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={() => openProperties(value)}\n icon={<SvgList />}\n >\n Properties\n </MenuItem>,\n <MenuItem\n key={2}\n onClick={() => {\n setSelectedGroup(value.row.original);\n setShowDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ]}\n >\n <IconButton\n disabled={isLoadingQuery}\n styleType='borderless'\n >\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n </div>\n );\n },\n },\n ],\n },\n ],\n [isLoadingQuery, onModify, openProperties],\n );\n\n // Temp\n const stringToColor = function (str: string) {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n let colour = \"#\";\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xff;\n colour += (`00${value.toString(16)}`).substr(-2);\n }\n return colour;\n };\n\n const onSelect = useCallback(\n async (selectedData: Group[] | undefined) => {\n clearEmphasizedElements();\n if (selectedData && selectedData.length > 0) {\n setLoadingQuery(true);\n let allIds: string[] = [];\n for (const row of selectedData) {\n const query = row.query ?? \"\";\n if (hilitedElements.current.has(query)) {\n const hilitedIds = hilitedElements.current.get(query) ?? [];\n visualizeElements(hilitedIds, stringToColor(row.id ?? \"\"));\n allIds = allIds.concat(hilitedIds);\n } else {\n try {\n const ids: string[] = await fetchIdsFromQuery(\n query,\n iModelConnection,\n );\n if (ids.length === 0) {\n toaster.warning(`${row.groupName}'s query is valid but produced no results.`);\n }\n const hiliteIds = await visualizeElementsById(\n ids,\n stringToColor(row.id ?? \"\"),\n iModelConnection,\n );\n hilitedElements.current.set(query, hiliteIds);\n\n allIds = allIds.concat(ids);\n } catch {\n const index = groups.findIndex((group) => group.id === row.id);\n setSelectedRows((rowIds) => {\n const selectedRowIds = { ...rowIds };\n delete selectedRowIds[index];\n return selectedRowIds;\n });\n toaster.negative(`Could not load ${row.groupName}. Query could not be resolved.`);\n\n }\n }\n }\n await zoomToElements(allIds);\n setLoadingQuery(false);\n }\n },\n [iModelConnection, groups],\n );\n\n const controlledState = useCallback(\n (state) => {\n return {\n ...state,\n selectedRowIds: { ...selectedRows },\n };\n },\n [selectedRows],\n );\n\n const propertyMenuGoBack = useCallback(async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }, [refresh]);\n\n const tableStateReducer = (\n newState: TableState,\n action: ActionType,\n _previousState: TableState,\n instance?: TableInstance,\n ): TableState => {\n switch (action.type) {\n case actions.toggleRowSelected: {\n const newSelectedRows = {\n ...selectedRows,\n };\n if (action.value) {\n newSelectedRows[action.id] = true;\n } else {\n delete newSelectedRows[action.id];\n }\n setSelectedRows(newSelectedRows);\n newState.selectedRowIds = newSelectedRows;\n break;\n }\n case actions.toggleAllRowsSelected: {\n if (!instance?.rowsById) {\n break;\n }\n const newSelectedRows = {} as Record<string, boolean>;\n if (action.value) {\n Object.keys(instance.rowsById).forEach(\n (id) => (newSelectedRows[id] = true),\n );\n }\n setSelectedRows(newSelectedRows);\n newState.selectedRowIds = newSelectedRows;\n break;\n }\n default:\n break;\n }\n return newState;\n };\n\n switch (groupsView) {\n case GroupsView.ADD:\n return (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n goBack={async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }}\n />\n );\n case GroupsView.MODIFYING:\n return selectedGroup ? (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n group={selectedGroup}\n goBack={async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }}\n />\n ) : null;\n case GroupsView.PROPERTIES:\n return selectedGroup ? (\n <PropertyMenu\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n group={selectedGroup}\n goBack={propertyMenuGoBack}\n />\n ) : null;\n default:\n return (\n <>\n <WidgetHeader\n title={mapping.mappingName ?? \"\"}\n disabled={isLoading || isLoadingQuery}\n returnFn={async () => {\n clearEmphasizedElements();\n await goBack();\n }}\n />\n <div className='groups-container'>\n <Button\n startIcon={\n isLoadingQuery ? <ProgressRadial size=\"small\" indeterminate /> : <SvgAdd />\n }\n styleType='high-visibility'\n disabled={isLoadingQuery}\n onClick={() => addGroup()}\n >\n {isLoadingQuery ? \"Loading Group(s)\" : \"Add Group\"}\n </Button>\n <Table<Group>\n data={groups}\n density='extra-condensed'\n columns={groupsColumns}\n emptyTableContent='No Groups available.'\n isSortable\n isSelectable\n onSelect={onSelect}\n isLoading={isLoading}\n isRowDisabled={() => isLoadingQuery}\n stateReducer={tableStateReducer}\n useControlledState={controlledState}\n />\n </div>\n <DeleteModal\n entityName={selectedGroup?.groupName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n await reportingClientApi.deleteGroup(\n iModelId,\n mapping.id ?? \"\",\n selectedGroup?.id ?? \"\",\n );\n }}\n refresh={refresh}\n />\n </>\n );\n }\n};\n"]}
1
+ {"version":3,"file":"Grouping.js","sourceRoot":"","sources":["../../../../src/widget/components/Grouping.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 {\n ActionType,\n CellProps,\n TableInstance,\n TableState,\n} from \"react-table\";\nimport {\n actions,\n} from \"react-table\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n ProgressRadial,\n Table,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgList,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport DeleteModal from \"./DeleteModal\";\nimport \"./Grouping.scss\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { PropertyMenu } from \"./PropertyMenu\";\nimport {\n clearEmphasizedElements,\n visualizeElements,\n visualizeElementsById,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { fetchIdsFromQuery, handleError, WidgetHeader } from \"./utils\";\nimport GroupAction from \"./GroupAction\";\nimport type { Group, Mapping } from \"@itwin/insights-client\";\nimport { ReportingClient } from \"@itwin/insights-client\";\nimport type { Api } from \"./GroupingMapping\";\nimport { ApiContext } from \"./GroupingMapping\";\n\nexport type GroupType = CreateTypeFromInterface<Group>;\n\nenum GroupsView {\n GROUPS = \"groups\",\n MODIFYING = \"modifying\",\n ADD = \"ADD\",\n PROPERTIES = \"properties\",\n}\n\ninterface GroupsTreeProps {\n mapping: Mapping;\n goBack: () => Promise<void>;\n}\n\nconst fetchGroups = async (\n setGroups: React.Dispatch<React.SetStateAction<GroupType[]>>,\n iModelId: string,\n mappingId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n apiContext: Api\n) => {\n try {\n setIsLoading(true);\n const reportingClientApi = new ReportingClient(apiContext.prefix);\n const groups = await reportingClientApi.getGroups(apiContext.accessToken, iModelId, mappingId);\n setGroups(groups);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nexport const Groupings = ({ mapping, goBack }: GroupsTreeProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const apiContext = useContext(ApiContext);\n const iModelId = useActiveIModelConnection()?.iModelId as string;\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [groupsView, setGroupsView] = useState<GroupsView>(GroupsView.GROUPS);\n const [selectedGroup, setSelectedGroup] = useState<GroupType | undefined>(\n undefined,\n );\n const hilitedElements = useRef<Map<string, string[]>>(new Map());\n const [selectedRows, setSelectedRows] = useState<Record<string, boolean>>({});\n const [isLoadingQuery, setLoadingQuery] = useState<boolean>(false);\n const [groups, setGroups] = useState<Group[]>([]);\n\n useEffect(() => {\n void fetchGroups(setGroups, iModelId, mapping.id ?? \"\", setIsLoading, apiContext);\n }, [apiContext, iModelId, mapping.id, setIsLoading]);\n\n const refresh = useCallback(async () => {\n setGroupsView(GroupsView.GROUPS);\n setSelectedGroup(undefined);\n setGroups([]);\n await fetchGroups(setGroups, iModelId, mapping.id ?? \"\", setIsLoading, apiContext);\n }, [apiContext, iModelId, mapping.id, setGroups]);\n\n const addGroup = () => {\n // TODO Retain selection in view without emphasizes. Goal is to make it so we can distinguish\n // hilited elements from regular elements without emphasis due to it blocking selection. For now clearing\n // selection.\n clearEmphasizedElements();\n setGroupsView(GroupsView.ADD);\n };\n\n const onModify = useCallback((value) => {\n clearEmphasizedElements();\n setSelectedGroup(value.row.original);\n setGroupsView(GroupsView.MODIFYING);\n }, []);\n\n const openProperties = useCallback((value) => {\n clearEmphasizedElements();\n setSelectedGroup(value.row.original);\n setGroupsView(GroupsView.PROPERTIES);\n }, []);\n\n const groupsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"groupName\",\n Header: \"Group\",\n accessor: \"groupName\",\n Cell: (value: CellProps<GroupType>) => (\n <>\n {isLoadingQuery ? (\n value.row.original.groupName\n ) : (\n <div\n className='iui-anchor'\n onClick={(e) => {\n e.stopPropagation();\n openProperties(value);\n }}\n >\n {value.row.original.groupName}\n </div>\n )}\n </>\n ),\n },\n {\n id: \"description\",\n Header: \"Description\",\n accessor: \"description\",\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<GroupType>) => {\n return (\n <div onClick={(e) => e.stopPropagation()}>\n <DropdownMenu\n disabled={isLoadingQuery}\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => onModify(value)}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={() => openProperties(value)}\n icon={<SvgList />}\n >\n Properties\n </MenuItem>,\n <MenuItem\n key={2}\n onClick={() => {\n setSelectedGroup(value.row.original);\n setShowDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ]}\n >\n <IconButton\n disabled={isLoadingQuery}\n styleType='borderless'\n >\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n </div>\n );\n },\n },\n ],\n },\n ],\n [isLoadingQuery, onModify, openProperties],\n );\n\n // Temp\n const stringToColor = function (str: string) {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n let colour = \"#\";\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xff;\n colour += (`00${value.toString(16)}`).substr(-2);\n }\n return colour;\n };\n\n const onSelect = useCallback(\n async (selectedData: GroupType[] | undefined) => {\n clearEmphasizedElements();\n if (selectedData && selectedData.length > 0) {\n setLoadingQuery(true);\n let allIds: string[] = [];\n for (const row of selectedData) {\n const query = row.query ?? \"\";\n if (hilitedElements.current.has(query)) {\n const hilitedIds = hilitedElements.current.get(query) ?? [];\n visualizeElements(hilitedIds, stringToColor(row.id ?? \"\"));\n allIds = allIds.concat(hilitedIds);\n } else {\n try {\n const ids: string[] = await fetchIdsFromQuery(\n query,\n iModelConnection,\n );\n if (ids.length === 0) {\n toaster.warning(`${row.groupName}'s query is valid but produced no results.`);\n }\n const hiliteIds = await visualizeElementsById(\n ids,\n stringToColor(row.id ?? \"\"),\n iModelConnection,\n );\n hilitedElements.current.set(query, hiliteIds);\n\n allIds = allIds.concat(ids);\n } catch {\n const index = groups.findIndex((group) => group.id === row.id);\n setSelectedRows((rowIds) => {\n const selectedRowIds = { ...rowIds };\n delete selectedRowIds[index];\n return selectedRowIds;\n });\n toaster.negative(`Could not load ${row.groupName}. Query could not be resolved.`);\n\n }\n }\n }\n await zoomToElements(allIds);\n setLoadingQuery(false);\n }\n },\n [iModelConnection, groups],\n );\n\n const controlledState = useCallback(\n (state) => {\n return {\n ...state,\n selectedRowIds: { ...selectedRows },\n };\n },\n [selectedRows],\n );\n\n const propertyMenuGoBack = useCallback(async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }, [refresh]);\n\n const tableStateReducer = (\n newState: TableState,\n action: ActionType,\n _previousState: TableState,\n instance?: TableInstance,\n ): TableState => {\n switch (action.type) {\n case actions.toggleRowSelected: {\n const newSelectedRows = {\n ...selectedRows,\n };\n if (action.value) {\n newSelectedRows[action.id] = true;\n } else {\n delete newSelectedRows[action.id];\n }\n setSelectedRows(newSelectedRows);\n newState.selectedRowIds = newSelectedRows;\n break;\n }\n case actions.toggleAllRowsSelected: {\n if (!instance?.rowsById) {\n break;\n }\n const newSelectedRows = {} as Record<string, boolean>;\n if (action.value) {\n Object.keys(instance.rowsById).forEach(\n (id) => (newSelectedRows[id] = true),\n );\n }\n setSelectedRows(newSelectedRows);\n newState.selectedRowIds = newSelectedRows;\n break;\n }\n default:\n break;\n }\n return newState;\n };\n\n switch (groupsView) {\n case GroupsView.ADD:\n return (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n goBack={async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }}\n />\n );\n case GroupsView.MODIFYING:\n return selectedGroup ? (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n group={selectedGroup}\n goBack={async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }}\n />\n ) : null;\n case GroupsView.PROPERTIES:\n return selectedGroup ? (\n <PropertyMenu\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n group={selectedGroup}\n goBack={propertyMenuGoBack}\n />\n ) : null;\n default:\n return (\n <>\n <WidgetHeader\n title={mapping.mappingName ?? \"\"}\n disabled={isLoading || isLoadingQuery}\n returnFn={async () => {\n clearEmphasizedElements();\n await goBack();\n }}\n />\n <div className='groups-container'>\n <Button\n startIcon={\n isLoadingQuery ? <ProgressRadial size=\"small\" indeterminate /> : <SvgAdd />\n }\n styleType='high-visibility'\n disabled={isLoadingQuery}\n onClick={() => addGroup()}\n >\n {isLoadingQuery ? \"Loading Group(s)\" : \"Add Group\"}\n </Button>\n <Table<GroupType>\n data={groups}\n density='extra-condensed'\n columns={groupsColumns}\n emptyTableContent='No Groups available.'\n isSortable\n isSelectable\n onSelect={onSelect}\n isLoading={isLoading}\n isRowDisabled={() => isLoadingQuery}\n stateReducer={tableStateReducer}\n useControlledState={controlledState}\n />\n </div>\n <DeleteModal\n entityName={selectedGroup?.groupName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n const reportingClientApi = new ReportingClient(apiContext.prefix);\n await reportingClientApi.deleteGroup(\n apiContext.accessToken,\n iModelId,\n mapping.id ?? \"\",\n selectedGroup?.id ?? \"\",\n );\n }}\n refresh={refresh}\n />\n </>\n );\n }\n};\n"]}
@@ -1,5 +1,15 @@
1
- /// <reference types="react" />
1
+ import React from "react";
2
2
  import "./GroupingMapping.scss";
3
- declare const GroupingMapping: () => JSX.Element;
3
+ import type { AccessToken } from "@itwin/core-bentley";
4
+ export interface Api {
5
+ accessToken: AccessToken;
6
+ prefix?: "" | "dev" | "qa";
7
+ }
8
+ export declare const ApiContext: React.Context<Api>;
9
+ interface GroupingMappingProps {
10
+ accessToken?: AccessToken;
11
+ prefix?: "" | "dev" | "qa";
12
+ }
13
+ declare const GroupingMapping: ({ accessToken, prefix }: GroupingMappingProps) => JSX.Element | null;
4
14
  export default GroupingMapping;
5
15
  //# sourceMappingURL=GroupingMapping.d.ts.map
@@ -19,16 +19,30 @@ var __importStar = (this && this.__importStar) || function (mod) {
19
19
  return result;
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.ApiContext = void 0;
22
23
  /*---------------------------------------------------------------------------------------------
23
24
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
24
25
  * See LICENSE.md in the project root for license terms and full copyright notice.
25
26
  *--------------------------------------------------------------------------------------------*/
26
- const React = __importStar(require("react"));
27
+ const react_1 = __importStar(require("react"));
27
28
  const Mapping_1 = require("./Mapping");
28
29
  require("./GroupingMapping.scss");
29
- const GroupingMapping = () => {
30
- return (React.createElement("div", { className: 'group-mapping-container' },
31
- React.createElement(Mapping_1.Mappings, null)));
30
+ const core_frontend_1 = require("@itwin/core-frontend");
31
+ exports.ApiContext = react_1.createContext({ accessToken: "" });
32
+ const GroupingMapping = ({ accessToken, prefix }) => {
33
+ const [currentAccessToken, setCurrentAccessToken] = react_1.useState("");
34
+ react_1.useEffect(() => {
35
+ // If no access token is provided, fetch it from session
36
+ const fetchAccessToken = async () => {
37
+ var _a, _b;
38
+ const token = accessToken !== null && accessToken !== void 0 ? accessToken : ((_b = await ((_a = core_frontend_1.IModelApp.authorizationClient) === null || _a === void 0 ? void 0 : _a.getAccessToken())) !== null && _b !== void 0 ? _b : "");
39
+ setCurrentAccessToken(token);
40
+ };
41
+ void fetchAccessToken();
42
+ }, [accessToken, setCurrentAccessToken]);
43
+ return (currentAccessToken ? react_1.default.createElement(exports.ApiContext.Provider, { value: { accessToken: currentAccessToken, prefix } },
44
+ react_1.default.createElement("div", { className: 'group-mapping-container' },
45
+ react_1.default.createElement(Mapping_1.Mappings, null))) : null);
32
46
  };
33
47
  exports.default = GroupingMapping;
34
48
  //# sourceMappingURL=GroupingMapping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupingMapping.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupingMapping.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,6CAA+B;AAC/B,uCAAqC;AACrC,kCAAgC;AAEhC,MAAM,eAAe,GAAG,GAAG,EAAE;IAC3B,OAAO,CACL,6BAAK,SAAS,EAAC,yBAAyB;QACtC,oBAAC,kBAAQ,OAAG,CACR,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,eAAe,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 * as React from \"react\";\nimport { Mappings } from \"./Mapping\";\nimport \"./GroupingMapping.scss\";\n\nconst GroupingMapping = () => {\n return (\n <div className='group-mapping-container'>\n <Mappings />\n </div>\n );\n};\n\nexport default GroupingMapping;\n"]}
1
+ {"version":3,"file":"GroupingMapping.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupingMapping.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,+CAAkE;AAClE,uCAAqC;AACrC,kCAAgC;AAEhC,wDAAiD;AAOpC,QAAA,UAAU,GAAG,qBAAa,CAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;AAOlE,MAAM,eAAe,GAAG,CAAC,EAAE,WAAW,EAAE,MAAM,EAAwB,EAAE,EAAE;IACxE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,gBAAQ,CAAS,EAAE,CAAC,CAAC;IAEzE,iBAAS,CAAC,GAAG,EAAE;QACb,wDAAwD;QACxD,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;;YAClC,MAAM,KAAK,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,CAAC,MAAA,MAAM,CAAA,MAAA,yBAAS,CAAC,mBAAmB,0CAAE,cAAc,EAAE,CAAA,mCAAI,EAAE,CAAC,CAAC;YAC3F,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC;QACF,KAAK,gBAAgB,EAAE,CAAC;IAC1B,CAAC,EAAE,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEzC,OAAO,CACL,kBAAkB,CAAC,CAAC,CAAC,8BAAC,kBAAU,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE;QAC1F,uCAAK,SAAS,EAAC,yBAAyB;YACtC,8BAAC,kBAAQ,OAAG,CACR,CACc,CAAC,CAAC,CAAC,IAAI,CAC9B,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,eAAe,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React, { createContext, useEffect, useState } from \"react\";\nimport { Mappings } from \"./Mapping\";\nimport \"./GroupingMapping.scss\";\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport { IModelApp } from \"@itwin/core-frontend\";\n\nexport interface Api {\n accessToken: AccessToken;\n prefix?: \"\" | \"dev\" | \"qa\";\n}\n\nexport const ApiContext = createContext<Api>({ accessToken: \"\" });\n\ninterface GroupingMappingProps {\n accessToken?: AccessToken;\n prefix?: \"\" | \"dev\" | \"qa\";\n}\n\nconst GroupingMapping = ({ accessToken, prefix }: GroupingMappingProps) => {\n const [currentAccessToken, setCurrentAccessToken] = useState<string>(\"\");\n\n useEffect(() => {\n // If no access token is provided, fetch it from session\n const fetchAccessToken = async () => {\n const token = accessToken ?? (await IModelApp.authorizationClient?.getAccessToken() ?? \"\");\n setCurrentAccessToken(token);\n };\n void fetchAccessToken();\n }, [accessToken, setCurrentAccessToken]);\n\n return (\n currentAccessToken ? <ApiContext.Provider value={{ accessToken: currentAccessToken, prefix }}>\n <div className='group-mapping-container'>\n <Mappings />\n </div>\n </ApiContext.Provider> : null\n );\n};\n\nexport default GroupingMapping;\n"]}
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
- import type { MappingReportingAPI } from "../../api/generated/api";
3
2
  import type { CreateTypeFromInterface } from "../utils";
4
3
  import "./Mapping.scss";
5
- export declare type Mapping = CreateTypeFromInterface<MappingReportingAPI>;
4
+ import type { Mapping } from "@itwin/insights-client";
5
+ export declare type MappingType = CreateTypeFromInterface<Mapping>;
6
6
  export declare const Mappings: () => JSX.Element;
7
7
  //# sourceMappingURL=Mapping.d.ts.map
@@ -34,11 +34,13 @@ const itwinui_react_1 = require("@itwin/itwinui-react");
34
34
  const react_1 = __importStar(require("react"));
35
35
  const utils_1 = require("./utils");
36
36
  require("./Mapping.scss");
37
- const reportingClient_1 = require("../../api/reportingClient");
38
37
  const DeleteModal_1 = __importDefault(require("./DeleteModal"));
39
38
  const Grouping_1 = require("./Grouping");
40
39
  const MappingAction_1 = __importDefault(require("./MappingAction"));
41
40
  const MappingImportWizardModal_1 = require("./MappingImportWizardModal");
41
+ const GroupingMapping_1 = require("./GroupingMapping");
42
+ const insights_client_1 = require("@itwin/insights-client");
43
+ const BlockingOverlay_1 = require("./BlockingOverlay");
42
44
  var MappingView;
43
45
  (function (MappingView) {
44
46
  MappingView["MAPPINGS"] = "mappings";
@@ -47,10 +49,11 @@ var MappingView;
47
49
  MappingView["MODIFYING"] = "modifying";
48
50
  MappingView["IMPORT"] = "import";
49
51
  })(MappingView || (MappingView = {}));
50
- const fetchMappings = async (setMappings, iModelId, setIsLoading) => {
52
+ const fetchMappings = async (setMappings, iModelId, setIsLoading, apiContext) => {
51
53
  try {
52
54
  setIsLoading(true);
53
- const mappings = await reportingClient_1.reportingClientApi.getMappings(iModelId);
55
+ const reportingClientApi = new insights_client_1.ReportingClient(apiContext.prefix);
56
+ const mappings = await reportingClientApi.getMappings(apiContext.accessToken, iModelId);
54
57
  setMappings(mappings);
55
58
  }
56
59
  catch (error) {
@@ -60,22 +63,31 @@ const fetchMappings = async (setMappings, iModelId, setIsLoading) => {
60
63
  setIsLoading(false);
61
64
  }
62
65
  };
63
- const useFetchMappings = (iModelId, setIsLoading) => {
64
- const [mappings, setMappings] = react_1.useState([]);
65
- react_1.useEffect(() => {
66
- void fetchMappings(setMappings, iModelId, setIsLoading);
67
- }, [iModelId, setIsLoading]);
68
- return [mappings, setMappings];
66
+ const toggleExtraction = async (apiContext, iModelId, mapping) => {
67
+ var _a;
68
+ try {
69
+ const newState = !(mapping === null || mapping === void 0 ? void 0 : mapping.extractionEnabled);
70
+ const reportingClient = new insights_client_1.ReportingClient(apiContext.prefix);
71
+ await reportingClient.updateMapping(apiContext.accessToken, iModelId, (_a = mapping === null || mapping === void 0 ? void 0 : mapping.id) !== null && _a !== void 0 ? _a : "", { extractionEnabled: newState });
72
+ }
73
+ catch (error) {
74
+ utils_1.handleError(error.status);
75
+ }
69
76
  };
70
77
  const Mappings = () => {
71
78
  var _a, _b;
79
+ const apiContext = react_1.useContext(GroupingMapping_1.ApiContext);
72
80
  const iModelId = (_a = appui_react_1.useActiveIModelConnection()) === null || _a === void 0 ? void 0 : _a.iModelId;
73
81
  const [showDeleteModal, setShowDeleteModal] = react_1.useState(false);
74
82
  const [showImportModal, setShowImportModal] = react_1.useState(false);
83
+ const [showBlockingOverlay, setShowBlockingOverlay] = react_1.useState(false);
75
84
  const [mappingView, setMappingView] = react_1.useState(MappingView.MAPPINGS);
76
85
  const [selectedMapping, setSelectedMapping] = react_1.useState(undefined);
77
86
  const [isLoading, setIsLoading] = react_1.useState(true);
78
- const [mappings, setMappings] = useFetchMappings(iModelId, setIsLoading);
87
+ const [mappings, setMappings] = react_1.useState([]);
88
+ react_1.useEffect(() => {
89
+ void fetchMappings(setMappings, iModelId, setIsLoading, apiContext);
90
+ }, [apiContext, iModelId, setIsLoading]);
79
91
  react_1.useEffect(() => {
80
92
  const removeListener = presentation_frontend_1.Presentation.selection.selectionChange.addListener(utils_1.onSelectionChanged);
81
93
  return () => {
@@ -86,8 +98,8 @@ const Mappings = () => {
86
98
  setMappingView(MappingView.MAPPINGS);
87
99
  setSelectedMapping(undefined);
88
100
  setMappings([]);
89
- await fetchMappings(setMappings, iModelId, setIsLoading);
90
- }, [iModelId, setMappings]);
101
+ await fetchMappings(setMappings, iModelId, setIsLoading, apiContext);
102
+ }, [apiContext, iModelId, setMappings]);
91
103
  const addMapping = async () => {
92
104
  setMappingView(MappingView.ADDING);
93
105
  };
@@ -119,7 +131,15 @@ const Mappings = () => {
119
131
  setSelectedMapping(value.row.original);
120
132
  setMappingView(MappingView.MODIFYING);
121
133
  }, icon: react_1.default.createElement(itwinui_icons_react_1.SvgEdit, null) }, "Modify"),
122
- react_1.default.createElement(itwinui_react_1.MenuItem, { key: 1, onClick: () => {
134
+ react_1.default.createElement(itwinui_react_1.MenuItem, { key: 1, onClick: async () => {
135
+ setSelectedMapping(value.row.original);
136
+ setShowBlockingOverlay(true);
137
+ close();
138
+ await toggleExtraction(apiContext, iModelId, value.row.original);
139
+ await refresh();
140
+ setShowBlockingOverlay(false);
141
+ }, icon: react_1.default.createElement(itwinui_icons_react_1.SvgProcess, null) }, value.row.original.extractionEnabled ? "Disable extraction" : "Enable extraction"),
142
+ react_1.default.createElement(itwinui_react_1.MenuItem, { key: 2, onClick: () => {
123
143
  setSelectedMapping(value.row.original);
124
144
  setShowDeleteModal(true);
125
145
  close();
@@ -134,7 +154,7 @@ const Mappings = () => {
134
154
  },
135
155
  ],
136
156
  },
137
- ], []);
157
+ ], [apiContext, iModelId, refresh]);
138
158
  switch (mappingView) {
139
159
  case MappingView.ADDING:
140
160
  return react_1.default.createElement(MappingAction_1.default, { iModelId: iModelId, returnFn: refresh });
@@ -144,6 +164,7 @@ const Mappings = () => {
144
164
  return (react_1.default.createElement(Grouping_1.Groupings, { mapping: selectedMapping, goBack: refresh }));
145
165
  default:
146
166
  return (react_1.default.createElement(react_1.default.Fragment, null,
167
+ react_1.default.createElement(BlockingOverlay_1.BlockingOverlay, { isVisible: showBlockingOverlay }),
147
168
  react_1.default.createElement(utils_1.WidgetHeader, { title: "Mappings" }),
148
169
  react_1.default.createElement("div", { className: "mappings-container" },
149
170
  react_1.default.createElement("div", { className: "table-toolbar" },
@@ -154,7 +175,8 @@ const Mappings = () => {
154
175
  react_1.default.createElement(itwinui_react_1.Table, { data: mappings, density: "extra-condensed", columns: mappingsColumns, emptyTableContent: "No Mappings available.", isSortable: true, isLoading: isLoading })),
155
176
  react_1.default.createElement(DeleteModal_1.default, { entityName: (_b = selectedMapping === null || selectedMapping === void 0 ? void 0 : selectedMapping.mappingName) !== null && _b !== void 0 ? _b : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
156
177
  var _a;
157
- await reportingClient_1.reportingClientApi.deleteMapping(iModelId, (_a = selectedMapping === null || selectedMapping === void 0 ? void 0 : selectedMapping.id) !== null && _a !== void 0 ? _a : "");
178
+ const reportingClientApi = new insights_client_1.ReportingClient(apiContext.prefix);
179
+ await reportingClientApi.deleteMapping(apiContext.accessToken, iModelId, (_a = selectedMapping === null || selectedMapping === void 0 ? void 0 : selectedMapping.id) !== null && _a !== void 0 ? _a : "");
158
180
  }, refresh: refresh }),
159
181
  react_1.default.createElement(MappingImportWizardModal_1.MappingImportWizardModal, { show: showImportModal, setShow: setShowImportModal, onFinish: refresh })));
160
182
  }