@itwin/reports-config-widget-react 0.2.1 → 0.3.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 (288) hide show
  1. package/.rush/temp/operation/rebuild/all.log +9 -0
  2. package/.rush/temp/operation/rebuild/state.json +3 -0
  3. package/.rush/temp/package-deps_rebuild.json +36 -32
  4. package/.rush/temp/shrinkwrap-deps.json +88 -34
  5. package/CHANGELOG.json +18 -0
  6. package/CHANGELOG.md +10 -1
  7. package/lib/cjs/reports-config-widget-react.d.ts +5 -0
  8. package/lib/cjs/reports-config-widget-react.d.ts.map +1 -1
  9. package/lib/cjs/reports-config-widget-react.js +11 -0
  10. package/lib/cjs/reports-config-widget-react.js.map +1 -1
  11. package/lib/cjs/test/AddMappingModal.test.js +15 -28
  12. package/lib/cjs/test/AddMappingModal.test.js.map +1 -1
  13. package/lib/cjs/test/BulkExtractor.test.js +13 -19
  14. package/lib/cjs/test/BulkExtractor.test.js.map +1 -1
  15. package/lib/cjs/test/DeleteModal.test.d.ts.map +1 -1
  16. package/lib/cjs/test/DeleteModal.test.js +4 -62
  17. package/lib/cjs/test/DeleteModal.test.js.map +1 -1
  18. package/lib/cjs/test/ReportAction.test.js +13 -78
  19. package/lib/cjs/test/ReportAction.test.js.map +1 -1
  20. package/lib/cjs/test/ReportMappingHorizontalTile.test.js +2 -35
  21. package/lib/cjs/test/ReportMappingHorizontalTile.test.js.map +1 -1
  22. package/lib/cjs/test/ReportMappings.test.d.ts.map +1 -1
  23. package/lib/cjs/test/ReportMappings.test.js +38 -91
  24. package/lib/cjs/test/ReportMappings.test.js.map +1 -1
  25. package/lib/cjs/test/Reports.test.js +19 -72
  26. package/lib/cjs/test/Reports.test.js.map +1 -1
  27. package/lib/cjs/test/test-utils.d.ts +3 -8
  28. package/lib/cjs/test/test-utils.d.ts.map +1 -1
  29. package/lib/cjs/test/test-utils.js +8 -33
  30. package/lib/cjs/test/test-utils.js.map +1 -1
  31. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  32. package/lib/cjs/widget/components/ActionPanel.d.ts +1 -1
  33. package/lib/cjs/widget/components/ActionPanel.d.ts.map +1 -1
  34. package/lib/cjs/widget/components/ActionPanel.js +4 -4
  35. package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
  36. package/lib/cjs/widget/components/AddMappingsModal.d.ts +4 -4
  37. package/lib/cjs/widget/components/AddMappingsModal.d.ts.map +1 -1
  38. package/lib/cjs/widget/components/AddMappingsModal.js +23 -22
  39. package/lib/cjs/widget/components/AddMappingsModal.js.map +1 -1
  40. package/lib/cjs/widget/components/BulkExtractor.d.ts +4 -4
  41. package/lib/cjs/widget/components/BulkExtractor.d.ts.map +1 -1
  42. package/lib/cjs/widget/components/BulkExtractor.js +6 -6
  43. package/lib/cjs/widget/components/BulkExtractor.js.map +1 -1
  44. package/lib/cjs/widget/components/DeleteModal.d.ts +4 -5
  45. package/lib/cjs/widget/components/DeleteModal.d.ts.map +1 -1
  46. package/lib/cjs/widget/components/DeleteModal.js +9 -13
  47. package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
  48. package/lib/cjs/widget/components/HorizontalTile.scss +6 -3
  49. package/lib/cjs/widget/components/ReportAction.d.ts +4 -5
  50. package/lib/cjs/widget/components/ReportAction.d.ts.map +1 -1
  51. package/lib/cjs/widget/components/ReportAction.js +15 -15
  52. package/lib/cjs/widget/components/ReportAction.js.map +1 -1
  53. package/lib/cjs/widget/components/ReportHorizontalTile.d.ts +4 -4
  54. package/lib/cjs/widget/components/ReportHorizontalTile.d.ts.map +1 -1
  55. package/lib/cjs/widget/components/ReportHorizontalTile.js +27 -12
  56. package/lib/cjs/widget/components/ReportHorizontalTile.js.map +1 -1
  57. package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts +1 -1
  58. package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
  59. package/lib/cjs/widget/components/ReportMappingHorizontalTile.js +24 -9
  60. package/lib/cjs/widget/components/ReportMappingHorizontalTile.js.map +1 -1
  61. package/lib/cjs/widget/components/ReportMappings.d.ts +4 -6
  62. package/lib/cjs/widget/components/ReportMappings.d.ts.map +1 -1
  63. package/lib/cjs/widget/components/ReportMappings.js +37 -47
  64. package/lib/cjs/widget/components/ReportMappings.js.map +1 -1
  65. package/lib/cjs/widget/components/ReportMappings.scss +3 -3
  66. package/lib/cjs/widget/components/Reports.d.ts +6 -1
  67. package/lib/cjs/widget/components/Reports.d.ts.map +1 -1
  68. package/lib/cjs/widget/components/Reports.js +42 -83
  69. package/lib/cjs/widget/components/Reports.js.map +1 -1
  70. package/lib/cjs/widget/components/ReportsConfigContext.d.ts +18 -0
  71. package/lib/cjs/widget/components/ReportsConfigContext.d.ts.map +1 -0
  72. package/lib/cjs/widget/components/ReportsConfigContext.js +87 -0
  73. package/lib/cjs/widget/components/ReportsConfigContext.js.map +1 -0
  74. package/lib/cjs/widget/components/ReportsContainer.d.ts +14 -0
  75. package/lib/cjs/widget/components/ReportsContainer.d.ts.map +1 -1
  76. package/lib/cjs/widget/components/ReportsContainer.js +28 -16
  77. package/lib/cjs/widget/components/ReportsContainer.js.map +1 -1
  78. package/lib/cjs/widget/components/ReportsHeader.d.ts +7 -0
  79. package/lib/cjs/widget/components/ReportsHeader.d.ts.map +1 -0
  80. package/lib/cjs/widget/components/ReportsHeader.js +20 -0
  81. package/lib/cjs/widget/components/ReportsHeader.js.map +1 -0
  82. package/lib/cjs/widget/components/ReportsRouter.d.ts +8 -0
  83. package/lib/cjs/widget/components/ReportsRouter.d.ts.map +1 -0
  84. package/lib/cjs/widget/components/ReportsRouter.js +52 -0
  85. package/lib/cjs/widget/components/ReportsRouter.js.map +1 -0
  86. package/lib/cjs/widget/components/SearchBar.js +1 -2
  87. package/lib/cjs/widget/components/SearchBar.js.map +1 -1
  88. package/lib/cjs/widget/components/SearchBar.scss +1 -1
  89. package/lib/cjs/widget/components/SelectIModel.d.ts +3 -3
  90. package/lib/cjs/widget/components/SelectIModel.d.ts.map +1 -1
  91. package/lib/cjs/widget/components/SelectIModel.js +6 -26
  92. package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
  93. package/lib/cjs/widget/components/utils.d.ts +1 -1
  94. package/lib/cjs/widget/components/utils.d.ts.map +1 -1
  95. package/lib/cjs/widget/components/utils.js.map +1 -1
  96. package/lib/cjs/widget/context/BulkExtractorContext.d.ts +10 -0
  97. package/lib/cjs/widget/context/BulkExtractorContext.d.ts.map +1 -0
  98. package/lib/cjs/widget/context/{ReportsApiConfigContext.js → BulkExtractorContext.js} +7 -10
  99. package/lib/cjs/widget/context/BulkExtractorContext.js.map +1 -0
  100. package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts +16 -0
  101. package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts.map +1 -0
  102. package/lib/cjs/widget/context/ReportsConfigApiContext.js +43 -0
  103. package/lib/cjs/widget/context/ReportsConfigApiContext.js.map +1 -0
  104. package/lib/esm/reports-config-widget-react.d.ts +5 -0
  105. package/lib/esm/reports-config-widget-react.d.ts.map +1 -1
  106. package/lib/esm/reports-config-widget-react.js +5 -0
  107. package/lib/esm/reports-config-widget-react.js.map +1 -1
  108. package/lib/esm/test/AddMappingModal.test.js +16 -29
  109. package/lib/esm/test/AddMappingModal.test.js.map +1 -1
  110. package/lib/esm/test/BulkExtractor.test.js +14 -17
  111. package/lib/esm/test/BulkExtractor.test.js.map +1 -1
  112. package/lib/esm/test/DeleteModal.test.d.ts.map +1 -1
  113. package/lib/esm/test/DeleteModal.test.js +5 -44
  114. package/lib/esm/test/DeleteModal.test.js.map +1 -1
  115. package/lib/esm/test/ReportAction.test.js +14 -60
  116. package/lib/esm/test/ReportAction.test.js.map +1 -1
  117. package/lib/esm/test/ReportMappingHorizontalTile.test.js +3 -36
  118. package/lib/esm/test/ReportMappingHorizontalTile.test.js.map +1 -1
  119. package/lib/esm/test/ReportMappings.test.d.ts.map +1 -1
  120. package/lib/esm/test/ReportMappings.test.js +37 -90
  121. package/lib/esm/test/ReportMappings.test.js.map +1 -1
  122. package/lib/esm/test/Reports.test.js +20 -54
  123. package/lib/esm/test/Reports.test.js.map +1 -1
  124. package/lib/esm/test/test-utils.d.ts +3 -8
  125. package/lib/esm/test/test-utils.d.ts.map +1 -1
  126. package/lib/esm/test/test-utils.js +7 -31
  127. package/lib/esm/test/test-utils.js.map +1 -1
  128. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  129. package/lib/esm/widget/components/ActionPanel.d.ts +1 -1
  130. package/lib/esm/widget/components/ActionPanel.d.ts.map +1 -1
  131. package/lib/esm/widget/components/ActionPanel.js +4 -4
  132. package/lib/esm/widget/components/ActionPanel.js.map +1 -1
  133. package/lib/esm/widget/components/AddMappingsModal.d.ts +4 -4
  134. package/lib/esm/widget/components/AddMappingsModal.d.ts.map +1 -1
  135. package/lib/esm/widget/components/AddMappingsModal.js +25 -24
  136. package/lib/esm/widget/components/AddMappingsModal.js.map +1 -1
  137. package/lib/esm/widget/components/BulkExtractor.d.ts +4 -4
  138. package/lib/esm/widget/components/BulkExtractor.d.ts.map +1 -1
  139. package/lib/esm/widget/components/BulkExtractor.js +7 -8
  140. package/lib/esm/widget/components/BulkExtractor.js.map +1 -1
  141. package/lib/esm/widget/components/DeleteModal.d.ts +4 -5
  142. package/lib/esm/widget/components/DeleteModal.d.ts.map +1 -1
  143. package/lib/esm/widget/components/DeleteModal.js +9 -13
  144. package/lib/esm/widget/components/DeleteModal.js.map +1 -1
  145. package/lib/esm/widget/components/HorizontalTile.scss +6 -3
  146. package/lib/esm/widget/components/ReportAction.d.ts +4 -5
  147. package/lib/esm/widget/components/ReportAction.d.ts.map +1 -1
  148. package/lib/esm/widget/components/ReportAction.js +14 -16
  149. package/lib/esm/widget/components/ReportAction.js.map +1 -1
  150. package/lib/esm/widget/components/ReportHorizontalTile.d.ts +4 -4
  151. package/lib/esm/widget/components/ReportHorizontalTile.d.ts.map +1 -1
  152. package/lib/esm/widget/components/ReportHorizontalTile.js +4 -5
  153. package/lib/esm/widget/components/ReportHorizontalTile.js.map +1 -1
  154. package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts +1 -1
  155. package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
  156. package/lib/esm/widget/components/ReportMappingHorizontalTile.js +1 -2
  157. package/lib/esm/widget/components/ReportMappingHorizontalTile.js.map +1 -1
  158. package/lib/esm/widget/components/ReportMappings.d.ts +4 -6
  159. package/lib/esm/widget/components/ReportMappings.d.ts.map +1 -1
  160. package/lib/esm/widget/components/ReportMappings.js +39 -49
  161. package/lib/esm/widget/components/ReportMappings.js.map +1 -1
  162. package/lib/esm/widget/components/ReportMappings.scss +3 -3
  163. package/lib/esm/widget/components/Reports.d.ts +6 -1
  164. package/lib/esm/widget/components/Reports.d.ts.map +1 -1
  165. package/lib/esm/widget/components/Reports.js +45 -86
  166. package/lib/esm/widget/components/Reports.js.map +1 -1
  167. package/lib/esm/widget/components/ReportsConfigContext.d.ts +18 -0
  168. package/lib/esm/widget/components/ReportsConfigContext.d.ts.map +1 -0
  169. package/lib/esm/widget/components/ReportsConfigContext.js +64 -0
  170. package/lib/esm/widget/components/ReportsConfigContext.js.map +1 -0
  171. package/lib/esm/widget/components/ReportsContainer.d.ts +14 -0
  172. package/lib/esm/widget/components/ReportsContainer.d.ts.map +1 -1
  173. package/lib/esm/widget/components/ReportsContainer.js +28 -17
  174. package/lib/esm/widget/components/ReportsContainer.js.map +1 -1
  175. package/lib/esm/widget/components/ReportsHeader.d.ts +7 -0
  176. package/lib/esm/widget/components/ReportsHeader.d.ts.map +1 -0
  177. package/lib/esm/widget/components/ReportsHeader.js +13 -0
  178. package/lib/esm/widget/components/ReportsHeader.js.map +1 -0
  179. package/lib/esm/widget/components/ReportsRouter.d.ts +8 -0
  180. package/lib/esm/widget/components/ReportsRouter.d.ts.map +1 -0
  181. package/lib/esm/widget/components/ReportsRouter.js +45 -0
  182. package/lib/esm/widget/components/ReportsRouter.js.map +1 -0
  183. package/lib/esm/widget/components/SearchBar.js +1 -2
  184. package/lib/esm/widget/components/SearchBar.js.map +1 -1
  185. package/lib/esm/widget/components/SearchBar.scss +1 -1
  186. package/lib/esm/widget/components/SelectIModel.d.ts +3 -3
  187. package/lib/esm/widget/components/SelectIModel.d.ts.map +1 -1
  188. package/lib/esm/widget/components/SelectIModel.js +7 -27
  189. package/lib/esm/widget/components/SelectIModel.js.map +1 -1
  190. package/lib/esm/widget/components/utils.d.ts +1 -1
  191. package/lib/esm/widget/components/utils.d.ts.map +1 -1
  192. package/lib/esm/widget/components/utils.js.map +1 -1
  193. package/lib/esm/widget/context/BulkExtractorContext.d.ts +10 -0
  194. package/lib/esm/widget/context/BulkExtractorContext.d.ts.map +1 -0
  195. package/lib/esm/widget/context/BulkExtractorContext.js +11 -0
  196. package/lib/esm/widget/context/BulkExtractorContext.js.map +1 -0
  197. package/lib/esm/widget/context/ReportsConfigApiContext.d.ts +16 -0
  198. package/lib/esm/widget/context/ReportsConfigApiContext.d.ts.map +1 -0
  199. package/lib/esm/widget/context/ReportsConfigApiContext.js +20 -0
  200. package/lib/esm/widget/context/ReportsConfigApiContext.js.map +1 -0
  201. package/lib/public/locales/en/ReportsConfigWidget.json +2 -1
  202. package/package.json +2 -2
  203. package/public/locales/en/ReportsConfigWidget.json +2 -1
  204. package/reports-config-widget-react.build.error.log +1 -14
  205. package/reports-config-widget-react.build.log +2 -60
  206. package/src/reports-config-widget-react.ts +6 -0
  207. package/src/test/AddMappingModal.test.tsx +20 -37
  208. package/src/test/BulkExtractor.test.ts +15 -17
  209. package/src/test/DeleteModal.test.tsx +4 -73
  210. package/src/test/ReportAction.test.tsx +17 -90
  211. package/src/test/ReportMappingHorizontalTile.test.tsx +3 -54
  212. package/src/test/ReportMappings.test.tsx +50 -135
  213. package/src/test/Reports.test.tsx +21 -80
  214. package/src/test/test-utils.tsx +9 -49
  215. package/src/widget/components/ActionPanel.tsx +16 -14
  216. package/src/widget/components/AddMappingsModal.tsx +39 -39
  217. package/src/widget/components/BulkExtractor.ts +11 -10
  218. package/src/widget/components/DeleteModal.tsx +14 -20
  219. package/src/widget/components/HorizontalTile.scss +6 -3
  220. package/src/widget/components/ReportAction.tsx +15 -30
  221. package/src/widget/components/ReportHorizontalTile.tsx +10 -11
  222. package/src/widget/components/ReportMappingHorizontalTile.tsx +2 -3
  223. package/src/widget/components/ReportMappings.scss +3 -3
  224. package/src/widget/components/ReportMappings.tsx +66 -69
  225. package/src/widget/components/Reports.tsx +143 -187
  226. package/src/widget/components/ReportsConfigContext.tsx +95 -0
  227. package/src/widget/components/ReportsContainer.tsx +47 -21
  228. package/src/widget/components/ReportsHeader.tsx +27 -0
  229. package/src/widget/components/ReportsRouter.tsx +63 -0
  230. package/src/widget/components/SearchBar.scss +1 -1
  231. package/src/widget/components/SearchBar.tsx +2 -2
  232. package/src/widget/components/SelectIModel.tsx +11 -29
  233. package/src/widget/components/utils.tsx +1 -1
  234. package/src/widget/context/{ReportsApiConfigContext.tsx → BulkExtractorContext.tsx} +9 -10
  235. package/src/widget/context/ReportsConfigApiContext.tsx +39 -0
  236. package/coverage/clover.xml +0 -838
  237. package/coverage/coverage-final.json +0 -29
  238. package/coverage/lcov-report/base.css +0 -224
  239. package/coverage/lcov-report/block-navigation.js +0 -87
  240. package/coverage/lcov-report/favicon.png +0 -0
  241. package/coverage/lcov-report/index.html +0 -206
  242. package/coverage/lcov-report/prettify.css +0 -1
  243. package/coverage/lcov-report/prettify.js +0 -2
  244. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  245. package/coverage/lcov-report/sorter.js +0 -196
  246. package/coverage/lcov-report/src/ReportsConfigWidget.ts.html +0 -193
  247. package/coverage/lcov-report/src/index.html +0 -116
  248. package/coverage/lcov-report/src/test/index.html +0 -116
  249. package/coverage/lcov-report/src/test/test-utils.tsx.html +0 -316
  250. package/coverage/lcov-report/src/widget/ReportsConfigUiProvider.tsx.html +0 -286
  251. package/coverage/lcov-report/src/widget/components/ActionPanel.tsx.html +0 -241
  252. package/coverage/lcov-report/src/widget/components/AddMappingsModal.tsx.html +0 -604
  253. package/coverage/lcov-report/src/widget/components/BulkExtractor.ts.html +0 -661
  254. package/coverage/lcov-report/src/widget/components/Constants.ts.html +0 -106
  255. package/coverage/lcov-report/src/widget/components/DeleteModal.tsx.html +0 -385
  256. package/coverage/lcov-report/src/widget/components/ExtractionStates/FailedExtractionState.tsx.html +0 -187
  257. package/coverage/lcov-report/src/widget/components/ExtractionStates/QueuedExtractionState.tsx.html +0 -145
  258. package/coverage/lcov-report/src/widget/components/ExtractionStates/RunningExtractionState.tsx.html +0 -139
  259. package/coverage/lcov-report/src/widget/components/ExtractionStates/StartingExtractionState.tsx.html +0 -151
  260. package/coverage/lcov-report/src/widget/components/ExtractionStates/SucceededExtractionState.tsx.html +0 -190
  261. package/coverage/lcov-report/src/widget/components/ExtractionStates/index.html +0 -176
  262. package/coverage/lcov-report/src/widget/components/ExtractionStatus.tsx.html +0 -295
  263. package/coverage/lcov-report/src/widget/components/ExtractionToast.tsx.html +0 -208
  264. package/coverage/lcov-report/src/widget/components/HorizontalTile.tsx.html +0 -289
  265. package/coverage/lcov-report/src/widget/components/LocalizedTablePaginator.tsx.html +0 -262
  266. package/coverage/lcov-report/src/widget/components/ReportAction.tsx.html +0 -517
  267. package/coverage/lcov-report/src/widget/components/ReportHorizontalTile.tsx.html +0 -475
  268. package/coverage/lcov-report/src/widget/components/ReportMappingHorizontalTile.tsx.html +0 -469
  269. package/coverage/lcov-report/src/widget/components/ReportMappings.tsx.html +0 -1078
  270. package/coverage/lcov-report/src/widget/components/Reports.tsx.html +0 -877
  271. package/coverage/lcov-report/src/widget/components/ReportsContainer.tsx.html +0 -223
  272. package/coverage/lcov-report/src/widget/components/SearchBar.tsx.html +0 -271
  273. package/coverage/lcov-report/src/widget/components/SelectIModel.tsx.html +0 -391
  274. package/coverage/lcov-report/src/widget/components/index.html +0 -371
  275. package/coverage/lcov-report/src/widget/components/utils.tsx.html +0 -562
  276. package/coverage/lcov-report/src/widget/context/ReportsApiConfigContext.tsx.html +0 -166
  277. package/coverage/lcov-report/src/widget/context/index.html +0 -116
  278. package/coverage/lcov-report/src/widget/hooks/index.html +0 -116
  279. package/coverage/lcov-report/src/widget/hooks/useValidator.ts.html +0 -295
  280. package/coverage/lcov-report/src/widget/index.html +0 -116
  281. package/coverage/lcov.info +0 -1594
  282. package/lib/cjs/widget/context/ReportsApiConfigContext.d.ts +0 -9
  283. package/lib/cjs/widget/context/ReportsApiConfigContext.d.ts.map +0 -1
  284. package/lib/cjs/widget/context/ReportsApiConfigContext.js.map +0 -1
  285. package/lib/esm/widget/context/ReportsApiConfigContext.d.ts +0 -9
  286. package/lib/esm/widget/context/ReportsApiConfigContext.d.ts.map +0 -1
  287. package/lib/esm/widget/context/ReportsApiConfigContext.js +0 -14
  288. package/lib/esm/widget/context/ReportsApiConfigContext.js.map +0 -1
@@ -1,39 +1,26 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- import { SvgAdd, SvgPlay, } from "@itwin/itwinui-icons-react";
6
- import { Button, IconButton, Surface, toaster, } from "@itwin/itwinui-react";
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { SvgAdd, SvgPlay, SvgRefresh } from "@itwin/itwinui-icons-react";
6
+ import { Button, IconButton, Surface } from "@itwin/itwinui-react";
7
7
  import React, { useCallback, useEffect, useMemo, useState } from "react";
8
- import { EmptyMessage, generateUrl, handleError, LoadingOverlay, WidgetHeader, } from "./utils";
8
+ import { EmptyMessage, handleError, LoadingOverlay, } from "./utils";
9
9
  import "./Reports.scss";
10
10
  import DeleteModal from "./DeleteModal";
11
- import { REPORTING_BASE_PATH, ReportsClient } from "@itwin/insights-client";
12
- import ReportAction from "./ReportAction";
13
- import { ReportMappings } from "./ReportMappings";
14
11
  import { ReportHorizontalTile } from "./ReportHorizontalTile";
15
12
  import { SearchBar } from "./SearchBar";
16
- import { useReportsApiConfig } from "../context/ReportsApiConfigContext";
13
+ import { useReportsConfigApi } from "../context/ReportsConfigApiContext";
17
14
  import { ReportsConfigWidget } from "../../ReportsConfigWidget";
18
- import { useActiveIModelConnection } from "@itwin/appui-react";
19
- import BulkExtractor from "./BulkExtractor";
20
15
  import { BeEvent } from "@itwin/core-bentley";
21
- import { FailedExtractionToast, SuccessfulExtractionToast } from "./ExtractionToast";
22
- var ReportsView;
23
- (function (ReportsView) {
24
- ReportsView["REPORTS"] = "reports";
25
- ReportsView["REPORTSMAPPING"] = "reportsmapping";
26
- ReportsView["ADDING"] = "adding";
27
- ReportsView["MODIFYING"] = "modifying";
28
- })(ReportsView || (ReportsView = {}));
29
- const fetchReports = async (setReports, iTwinId, setIsLoading, apiContext) => {
16
+ import { useBulkExtractor } from "../context/BulkExtractorContext";
17
+ const fetchReports = async (setReports, iTwinId, setIsLoading, reportsClient, getAccessToken) => {
30
18
  try {
31
19
  if (!iTwinId)
32
20
  return;
33
21
  setIsLoading(true);
34
- const reportsClientApi = new ReportsClient(generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl));
35
- const accessToken = await apiContext.getAccessToken();
36
- const reports = await reportsClientApi.getReports(accessToken, iTwinId);
22
+ const accessToken = await getAccessToken();
23
+ const reports = await reportsClient.getReports(accessToken, iTwinId);
37
24
  setReports(reports !== null && reports !== void 0 ? reports : []);
38
25
  }
39
26
  catch (error) {
@@ -43,36 +30,21 @@ const fetchReports = async (setReports, iTwinId, setIsLoading, apiContext) => {
43
30
  setIsLoading(false);
44
31
  }
45
32
  };
46
- export const Reports = () => {
47
- var _a, _b, _c;
48
- const successfulExtractionToast = (iModelName, odataFeedUrl) => {
49
- toaster.positive(React.createElement(SuccessfulExtractionToast, { iModelName: iModelName, odataFeedUrl: odataFeedUrl }));
50
- };
51
- const failedExtractionToast = (iModelName) => {
52
- toaster.negative(React.createElement(FailedExtractionToast, { iModelName: iModelName }));
53
- };
54
- const iTwinId = (_b = (_a = useActiveIModelConnection()) === null || _a === void 0 ? void 0 : _a.iTwinId) !== null && _b !== void 0 ? _b : "";
55
- const apiConfig = useReportsApiConfig();
33
+ export const Reports = ({ onClickAddReport, onClickReportModify, onClickReportTitle, }) => {
34
+ const { iTwinId, getAccessToken, reportsClient } = useReportsConfigApi();
35
+ const { bulkExtractor } = useBulkExtractor();
36
+ const [showDeleteModal, setShowDeleteModal] = useState(undefined);
56
37
  const [selectedReportIds, setSelectedReportIds] = useState([]);
57
- const [showDeleteModal, setShowDeleteModal] = useState(false);
58
- const [reportsView, setReportsView] = useState(ReportsView.REPORTS);
59
- const [selectedReport, setSelectedReport] = useState(undefined);
60
38
  const [isLoading, setIsLoading] = useState(true);
61
39
  const [searchValue, setSearchValue] = useState("");
62
40
  const [reports, setReports] = useState([]);
63
- const bulkExtractor = useMemo(() => new BulkExtractor(apiConfig, successfulExtractionToast, failedExtractionToast), [apiConfig]);
64
41
  const jobStartEvent = useMemo(() => new BeEvent(), []);
65
42
  useEffect(() => {
66
- void fetchReports(setReports, iTwinId, setIsLoading, apiConfig);
67
- }, [apiConfig, iTwinId, setIsLoading]);
43
+ void fetchReports(setReports, iTwinId, setIsLoading, reportsClient, getAccessToken);
44
+ }, [getAccessToken, iTwinId, reportsClient, setIsLoading]);
68
45
  const refresh = useCallback(async () => {
69
- setReportsView(ReportsView.REPORTS);
70
- setSelectedReport(undefined);
71
- await fetchReports(setReports, iTwinId, setIsLoading, apiConfig);
72
- }, [apiConfig, iTwinId, setReports]);
73
- const addReport = () => {
74
- setReportsView(ReportsView.ADDING);
75
- };
46
+ await fetchReports(setReports, iTwinId, setIsLoading, reportsClient, getAccessToken);
47
+ }, [getAccessToken, iTwinId, reportsClient]);
76
48
  const filteredReports = useMemo(() => reports.filter((x) => [x.displayName, x.description]
77
49
  .join(" ")
78
50
  .toLowerCase()
@@ -85,48 +57,35 @@ export const Reports = () => {
85
57
  : [...sr, reportId]);
86
58
  };
87
59
  const updateDatasets = useCallback(async () => {
60
+ if (!bulkExtractor)
61
+ return;
88
62
  await bulkExtractor.runReportExtractions(selectedReportIds);
89
63
  selectedReportIds.map((reportId) => jobStartEvent.raiseEvent(reportId));
90
64
  setSelectedReportIds([]);
91
65
  }, [selectedReportIds, jobStartEvent, bulkExtractor]);
92
- switch (reportsView) {
93
- case ReportsView.ADDING:
94
- return iTwinId ? (React.createElement(ReportAction, { iTwinId: iTwinId !== null && iTwinId !== void 0 ? iTwinId : "", returnFn: refresh })) : null;
95
- case ReportsView.MODIFYING:
96
- return iTwinId ? (React.createElement(ReportAction, { iTwinId: iTwinId, report: selectedReport, returnFn: refresh })) : null;
97
- case ReportsView.REPORTSMAPPING:
98
- return selectedReport ? (React.createElement(ReportMappings, { report: selectedReport, bulkExtractor: bulkExtractor, goBack: refresh })) : null;
99
- default:
100
- return (React.createElement(React.Fragment, null,
101
- React.createElement(WidgetHeader, { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:ITwinReports") }),
102
- React.createElement(Surface, { className: "rcw-reports-list-container" },
103
- React.createElement("div", { className: "rcw-toolbar" },
104
- React.createElement(Button, { startIcon: React.createElement(SvgAdd, null), onClick: () => addReport(), styleType: "high-visibility" }, ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:New")),
105
- React.createElement(IconButton, { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:UpdateDatasets"), onClick: updateDatasets, disabled: selectedReportIds.length === 0 },
106
- React.createElement(SvgPlay, null)),
107
- React.createElement("div", { className: "rcw-search-bar-container", "data-testid": "rcw-search-bar" },
108
- React.createElement("div", { className: "rcw-search-button" },
109
- React.createElement(SearchBar, { searchValue: searchValue, setSearchValue: setSearchValue, disabled: isLoading })))),
110
- isLoading ? (React.createElement(LoadingOverlay, null)) : reports.length === 0 ? (React.createElement(EmptyMessage, null,
111
- React.createElement(React.Fragment, null,
112
- ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:NoReports"),
113
- React.createElement("div", null,
114
- React.createElement(Button, { onClick: addReport, styleType: "cta" }, ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:CreateOneReportCTA")))))) : (React.createElement("div", { className: "rcw-reports-list" }, filteredReports.map((report) => (React.createElement(ReportHorizontalTile, { key: report.id, report: report, onClickTitle: () => {
115
- setSelectedReport(report);
116
- setReportsView(ReportsView.REPORTSMAPPING);
117
- }, jobStartEvent: jobStartEvent, bulkExtractor: bulkExtractor, onClickDelete: () => {
118
- setSelectedReport(report);
119
- setShowDeleteModal(true);
120
- }, onClickModify: () => {
121
- setSelectedReport(report);
122
- setReportsView(ReportsView.MODIFYING);
123
- }, onSelectionChange: onSelectionChange, selected: selectedReportIds.some((reportId) => report.id === reportId) })))))),
124
- React.createElement(DeleteModal, { entityName: (_c = selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.displayName) !== null && _c !== void 0 ? _c : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
125
- var _a;
126
- const reportsClientApi = new ReportsClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
127
- const accessToken = await apiConfig.getAccessToken();
128
- await reportsClientApi.deleteReport(accessToken, (_a = selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.id) !== null && _a !== void 0 ? _a : "");
129
- }, refresh: refresh })));
130
- }
66
+ if (!bulkExtractor)
67
+ return null;
68
+ return (React.createElement(React.Fragment, null,
69
+ React.createElement(Surface, { className: "rcw-reports-list-container" },
70
+ React.createElement("div", { className: "rcw-toolbar" },
71
+ onClickAddReport && (React.createElement(Button, { startIcon: React.createElement(SvgAdd, null), onClick: onClickAddReport, styleType: "high-visibility" }, ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:New"))),
72
+ React.createElement(IconButton, { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:UpdateDatasets"), onClick: updateDatasets, disabled: selectedReportIds.length === 0 },
73
+ React.createElement(SvgPlay, null)),
74
+ React.createElement("div", { className: "rcw-search-bar-container", "data-testid": "rcw-search-bar" },
75
+ React.createElement(IconButton, { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Refresh"), onClick: refresh, disabled: isLoading, styleType: "borderless" },
76
+ React.createElement(SvgRefresh, null)),
77
+ React.createElement(SearchBar, { searchValue: searchValue, setSearchValue: setSearchValue, disabled: isLoading }))),
78
+ isLoading ? (React.createElement(LoadingOverlay, null)) : reports.length === 0 && onClickAddReport ? (React.createElement(EmptyMessage, null,
79
+ React.createElement(React.Fragment, null,
80
+ ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:NoReports"),
81
+ React.createElement("div", null,
82
+ React.createElement(Button, { onClick: onClickAddReport, styleType: "cta" }, ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:CreateOneReportCTA")))))) : (React.createElement("div", { className: "rcw-reports-list" }, filteredReports.map((report) => (React.createElement(ReportHorizontalTile, { key: report.id, report: report, onClickTitle: onClickReportTitle, jobStartEvent: jobStartEvent, bulkExtractor: bulkExtractor, onClickDelete: () => {
83
+ setShowDeleteModal(report);
84
+ }, onClickModify: onClickReportModify, onSelectionChange: onSelectionChange, selected: selectedReportIds.some((reportId) => report.id === reportId) })))))),
85
+ React.createElement(DeleteModal, { entityName: showDeleteModal === null || showDeleteModal === void 0 ? void 0 : showDeleteModal.displayName, onClose: () => setShowDeleteModal(undefined), onDelete: async () => {
86
+ var _a;
87
+ const accessToken = await getAccessToken();
88
+ await reportsClient.deleteReport(accessToken, (_a = showDeleteModal === null || showDeleteModal === void 0 ? void 0 : showDeleteModal.id) !== null && _a !== void 0 ? _a : "");
89
+ }, refresh: refresh })));
131
90
  };
132
91
  //# sourceMappingURL=Reports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Reports.js","sourceRoot":"","sources":["../../../../src/widget/components/Reports.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 SvgPlay,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n IconButton,\n Surface,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"./utils\";\nimport {\n EmptyMessage,\n generateUrl,\n handleError,\n LoadingOverlay,\n WidgetHeader,\n} from \"./utils\";\nimport \"./Reports.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { REPORTING_BASE_PATH, ReportsClient } from \"@itwin/insights-client\";\nimport ReportAction from \"./ReportAction\";\nimport { ReportMappings } from \"./ReportMappings\";\nimport { ReportHorizontalTile } from \"./ReportHorizontalTile\";\nimport { SearchBar } from \"./SearchBar\";\nimport type { ReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport BulkExtractor from \"./BulkExtractor\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { FailedExtractionToast, SuccessfulExtractionToast } from \"./ExtractionToast\";\n\nexport type ReportType = CreateTypeFromInterface<Report>;\n\nenum ReportsView {\n REPORTS = \"reports\",\n REPORTSMAPPING = \"reportsmapping\",\n ADDING = \"adding\",\n MODIFYING = \"modifying\",\n}\n\nconst fetchReports = async (\n setReports: React.Dispatch<React.SetStateAction<Report[]>>,\n iTwinId: string | undefined,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n apiContext: ReportsApiConfig\n) => {\n try {\n if (!iTwinId) return;\n setIsLoading(true);\n const reportsClientApi = new ReportsClient(\n generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl)\n );\n const accessToken = await apiContext.getAccessToken();\n const reports = await reportsClientApi.getReports(accessToken, iTwinId);\n setReports(reports ?? []);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nexport const Reports = () => {\n const successfulExtractionToast = (iModelName: string, odataFeedUrl: string) => {\n toaster.positive(<SuccessfulExtractionToast iModelName={iModelName} odataFeedUrl={odataFeedUrl} />);\n };\n\n const failedExtractionToast = (iModelName: string) => {\n toaster.negative(<FailedExtractionToast iModelName={iModelName} />);\n };\n\n const iTwinId = useActiveIModelConnection()?.iTwinId ?? \"\";\n const apiConfig = useReportsApiConfig();\n const [selectedReportIds, setSelectedReportIds] = useState<string[]>([]);\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [reportsView, setReportsView] = useState<ReportsView>(\n ReportsView.REPORTS\n );\n const [selectedReport, setSelectedReport] = useState<Report | undefined>(\n undefined\n );\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [searchValue, setSearchValue] = useState<string>(\"\");\n const [reports, setReports] = useState<Report[]>([]);\n const bulkExtractor = useMemo(\n () => new BulkExtractor(apiConfig, successfulExtractionToast, failedExtractionToast),\n [apiConfig]\n );\n const jobStartEvent = useMemo(\n () => new BeEvent<(reportId: string) => void>(),\n []\n );\n\n useEffect(() => {\n void fetchReports(setReports, iTwinId, setIsLoading, apiConfig);\n }, [apiConfig, iTwinId, setIsLoading]);\n\n const refresh = useCallback(async () => {\n setReportsView(ReportsView.REPORTS);\n setSelectedReport(undefined);\n await fetchReports(setReports, iTwinId, setIsLoading, apiConfig);\n }, [apiConfig, iTwinId, setReports]);\n\n const addReport = () => {\n setReportsView(ReportsView.ADDING);\n };\n\n const filteredReports = useMemo(\n () =>\n reports.filter((x) =>\n [x.displayName, x.description]\n .join(\" \")\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ),\n [reports, searchValue]\n );\n\n const onSelectionChange = (reportId: string, control: boolean) => {\n if (!control)\n setSelectedReportIds([]);\n\n setSelectedReportIds((sr) =>\n sr.some((r) => reportId === r)\n ? sr.filter(\n (r) => reportId !== r\n )\n : [...sr, reportId]\n );\n };\n\n const updateDatasets = useCallback(async () => {\n await bulkExtractor.runReportExtractions(selectedReportIds);\n selectedReportIds.map((reportId) => jobStartEvent.raiseEvent(reportId));\n setSelectedReportIds([]);\n }, [selectedReportIds, jobStartEvent, bulkExtractor]);\n\n switch (reportsView) {\n case ReportsView.ADDING:\n return iTwinId ? (\n <ReportAction iTwinId={iTwinId ?? \"\"} returnFn={refresh} />\n ) : null;\n case ReportsView.MODIFYING:\n return iTwinId ? (\n <ReportAction\n iTwinId={iTwinId}\n report={selectedReport}\n returnFn={refresh}\n />\n ) : null;\n case ReportsView.REPORTSMAPPING:\n return selectedReport ? (\n <ReportMappings report={selectedReport} bulkExtractor={bulkExtractor} goBack={refresh} />\n ) : null;\n default:\n return (\n <>\n <WidgetHeader\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:ITwinReports\"\n )}\n />\n <Surface className=\"rcw-reports-list-container\">\n <div className=\"rcw-toolbar\">\n <Button\n startIcon={<SvgAdd />}\n onClick={() => addReport()}\n styleType=\"high-visibility\"\n >\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:New\"\n )}\n </Button>\n <IconButton\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateDatasets\"\n )}\n onClick={updateDatasets}\n disabled={selectedReportIds.length === 0}\n >\n <SvgPlay />\n </IconButton>\n <div className=\"rcw-search-bar-container\" data-testid=\"rcw-search-bar\">\n <div className=\"rcw-search-button\">\n <SearchBar\n searchValue={searchValue}\n setSearchValue={setSearchValue}\n disabled={isLoading}\n />\n </div>\n </div>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : reports.length === 0 ? (\n <EmptyMessage>\n <>\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:NoReports\"\n )}\n <div>\n <Button onClick={addReport} styleType=\"cta\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:CreateOneReportCTA\"\n )}\n </Button>\n </div>\n </>\n </EmptyMessage>\n ) : (\n <div className=\"rcw-reports-list\">\n {filteredReports.map((report) => (\n <ReportHorizontalTile\n key={report.id}\n report={report}\n onClickTitle={() => {\n setSelectedReport(report);\n setReportsView(ReportsView.REPORTSMAPPING);\n }}\n jobStartEvent={jobStartEvent}\n bulkExtractor={bulkExtractor}\n onClickDelete={() => {\n setSelectedReport(report);\n setShowDeleteModal(true);\n }}\n onClickModify={() => {\n setSelectedReport(report);\n setReportsView(ReportsView.MODIFYING);\n }}\n onSelectionChange={onSelectionChange}\n selected={selectedReportIds.some((reportId) => report.id === reportId)}\n />\n ))}\n </div>\n )}\n </Surface>\n <DeleteModal\n entityName={selectedReport?.displayName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n const reportsClientApi = new ReportsClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n await reportsClientApi.deleteReport(\n accessToken,\n selectedReport?.id ?? \"\"\n );\n }}\n refresh={refresh}\n />\n </>\n );\n }\n};\n"]}
1
+ {"version":3,"file":"Reports.js","sourceRoot":"","sources":["../../../../src/widget/components/Reports.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 { SvgAdd, SvgPlay, SvgRefresh } from \"@itwin/itwinui-icons-react\";\nimport { Button, IconButton, Surface } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"./utils\";\nimport {\n EmptyMessage,\n handleError,\n LoadingOverlay,\n} from \"./utils\";\nimport \"./Reports.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport type { Report, ReportsClient } from \"@itwin/insights-client\";\nimport { ReportHorizontalTile } from \"./ReportHorizontalTile\";\nimport { SearchBar } from \"./SearchBar\";\nimport { useReportsConfigApi } from \"../context/ReportsConfigApiContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { useBulkExtractor } from \"../context/BulkExtractorContext\";\n\nexport type ReportType = CreateTypeFromInterface<Report>;\n\nconst fetchReports = async (\n setReports: (reports: Report[]) => void,\n iTwinId: string | undefined,\n setIsLoading: (isLoading: boolean) => void,\n reportsClient: ReportsClient,\n getAccessToken: () => Promise<AccessToken>\n) => {\n try {\n if (!iTwinId) return;\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const reports = await reportsClient.getReports(accessToken, iTwinId);\n setReports(reports ?? []);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nexport interface ReportsProps {\n onClickAddReport?: () => void;\n onClickReportTitle?: (report: Report) => void;\n onClickReportModify?: (report: Report) => void;\n}\n\nexport const Reports = ({\n onClickAddReport,\n onClickReportModify,\n onClickReportTitle,\n}: ReportsProps) => {\n const { iTwinId, getAccessToken, reportsClient } = useReportsConfigApi();\n const { bulkExtractor } = useBulkExtractor();\n const [showDeleteModal, setShowDeleteModal] = useState<Report | undefined>(\n undefined\n );\n const [selectedReportIds, setSelectedReportIds] = useState<string[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [searchValue, setSearchValue] = useState<string>(\"\");\n const [reports, setReports] = useState<Report[]>([]);\n const jobStartEvent = useMemo(\n () => new BeEvent<(reportId: string) => void>(),\n []\n );\n\n useEffect(() => {\n void fetchReports(\n setReports,\n iTwinId,\n setIsLoading,\n reportsClient,\n getAccessToken\n );\n }, [getAccessToken, iTwinId, reportsClient, setIsLoading]);\n\n const refresh = useCallback(async () => {\n await fetchReports(\n setReports,\n iTwinId,\n setIsLoading,\n reportsClient,\n getAccessToken\n );\n }, [getAccessToken, iTwinId, reportsClient]);\n\n const filteredReports = useMemo(\n () =>\n reports.filter((x) =>\n [x.displayName, x.description]\n .join(\" \")\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ),\n [reports, searchValue]\n );\n\n const onSelectionChange = (reportId: string, control: boolean) => {\n if (!control) setSelectedReportIds([]);\n\n setSelectedReportIds((sr) =>\n sr.some((r) => reportId === r)\n ? sr.filter((r) => reportId !== r)\n : [...sr, reportId]\n );\n };\n\n const updateDatasets = useCallback(async () => {\n if (!bulkExtractor) return;\n await bulkExtractor.runReportExtractions(selectedReportIds);\n selectedReportIds.map((reportId) => jobStartEvent.raiseEvent(reportId));\n setSelectedReportIds([]);\n }, [selectedReportIds, jobStartEvent, bulkExtractor]);\n\n if (!bulkExtractor) return null;\n\n return (\n <>\n <Surface className=\"rcw-reports-list-container\">\n <div className=\"rcw-toolbar\">\n {onClickAddReport && (\n <Button\n startIcon={<SvgAdd />}\n onClick={onClickAddReport}\n styleType=\"high-visibility\"\n >\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:New\"\n )}\n </Button>\n )}\n <IconButton\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateDatasets\"\n )}\n onClick={updateDatasets}\n disabled={selectedReportIds.length === 0}\n >\n <SvgPlay />\n </IconButton>\n <div\n className=\"rcw-search-bar-container\"\n data-testid=\"rcw-search-bar\"\n >\n <IconButton\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Refresh\"\n )}\n onClick={refresh}\n disabled={isLoading}\n styleType=\"borderless\"\n >\n <SvgRefresh />\n </IconButton>\n <SearchBar\n searchValue={searchValue}\n setSearchValue={setSearchValue}\n disabled={isLoading}\n />\n </div>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : reports.length === 0 && onClickAddReport ? (\n <EmptyMessage>\n <>\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:NoReports\"\n )}\n <div>\n <Button onClick={onClickAddReport} styleType=\"cta\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:CreateOneReportCTA\"\n )}\n </Button>\n </div>\n </>\n </EmptyMessage>\n ) : (\n <div className=\"rcw-reports-list\">\n {filteredReports.map((report) => (\n <ReportHorizontalTile\n key={report.id}\n report={report}\n onClickTitle={onClickReportTitle}\n jobStartEvent={jobStartEvent}\n bulkExtractor={bulkExtractor}\n onClickDelete={() => {\n setShowDeleteModal(report);\n }}\n onClickModify={onClickReportModify}\n onSelectionChange={onSelectionChange}\n selected={selectedReportIds.some(\n (reportId) => report.id === reportId\n )}\n />\n ))}\n </div>\n )}\n </Surface>\n <DeleteModal\n entityName={showDeleteModal?.displayName}\n onClose={() => setShowDeleteModal(undefined)}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await reportsClient.deleteReport(\n accessToken,\n showDeleteModal?.id ?? \"\"\n );\n }}\n refresh={refresh}\n />\n </>\n );\n};\n"]}
@@ -0,0 +1,18 @@
1
+ import { IModelsClient } from "@itwin/imodels-client-management";
2
+ import { ExtractionClient, MappingsClient, ReportsClient } from "@itwin/insights-client";
3
+ import React from "react";
4
+ import type { GetAccessTokenFn } from "../context/ReportsConfigApiContext";
5
+ import { BulkExtractor } from "./BulkExtractor";
6
+ export interface ReportsConfigContextProps {
7
+ getAccessToken?: GetAccessTokenFn;
8
+ baseUrl?: string;
9
+ iTwinId: string;
10
+ bulkExtractor?: BulkExtractor;
11
+ reportsClient?: ReportsClient;
12
+ mappingsClient?: MappingsClient;
13
+ extractionClient?: ExtractionClient;
14
+ iModelsClient?: IModelsClient;
15
+ children?: React.ReactNode;
16
+ }
17
+ export declare const ReportsConfigContext: (props: ReportsConfigContextProps) => JSX.Element;
18
+ //# sourceMappingURL=ReportsConfigContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportsConfigContext.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsConfigContext.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAa,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAuB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE9G,OAAO,KAAoD,MAAM,OAAO,CAAC;AAEzE,OAAO,KAAK,EACV,gBAAgB,EAEjB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,MAAM,WAAW,yBAAyB;IACxC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAKD,eAAO,MAAM,oBAAoB,UAAW,yBAAyB,gBA0DpE,CAAC"}
@@ -0,0 +1,64 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { IModelApp } from "@itwin/core-frontend";
6
+ import { Constants, IModelsClient } from "@itwin/imodels-client-management";
7
+ import { ExtractionClient, MappingsClient, REPORTING_BASE_PATH, ReportsClient } from "@itwin/insights-client";
8
+ import { toaster } from "@itwin/itwinui-react";
9
+ import React, { useCallback, useEffect, useMemo, useState } from "react";
10
+ import { BulkExtractorContext } from "../context/BulkExtractorContext";
11
+ import { ReportsConfigApiContext } from "../context/ReportsConfigApiContext";
12
+ import { REPORTS_CONFIG_BASE_URL } from "../ReportsConfigUiProvider";
13
+ import { BulkExtractor } from "./BulkExtractor";
14
+ import { FailedExtractionToast, SuccessfulExtractionToast } from "./ExtractionToast";
15
+ import { generateUrl } from "./utils";
16
+ const authorizationClientGetAccessToken = async () => { var _a, _b; return (_b = (await ((_a = IModelApp.authorizationClient) === null || _a === void 0 ? void 0 : _a.getAccessToken()))) !== null && _b !== void 0 ? _b : ""; };
17
+ export const ReportsConfigContext = (props) => {
18
+ var _a, _b, _c, _d, _e;
19
+ const reportsBaseUrl = useCallback(() => generateUrl(REPORTING_BASE_PATH, props.baseUrl || REPORTS_CONFIG_BASE_URL), [props.baseUrl]);
20
+ const iModelClientOptions = useMemo(() => {
21
+ var _a;
22
+ return ({
23
+ api: { baseUrl: generateUrl(Constants.api.baseUrl, (_a = props.baseUrl) !== null && _a !== void 0 ? _a : REPORTS_CONFIG_BASE_URL) },
24
+ });
25
+ }, [props.baseUrl]);
26
+ const [extractionClient, setExtractionClient] = useState((_a = props.extractionClient) !== null && _a !== void 0 ? _a : new ExtractionClient(reportsBaseUrl()));
27
+ const [apiConfig, setApiConfig] = useState({
28
+ getAccessToken: (_b = props.getAccessToken) !== null && _b !== void 0 ? _b : authorizationClientGetAccessToken,
29
+ baseUrl: reportsBaseUrl(),
30
+ iTwinId: props.iTwinId,
31
+ reportsClient: (_c = props.reportsClient) !== null && _c !== void 0 ? _c : new ReportsClient(reportsBaseUrl()),
32
+ mappingsClient: (_d = props.mappingsClient) !== null && _d !== void 0 ? _d : new MappingsClient(reportsBaseUrl()),
33
+ iModelsClient: (_e = props.iModelsClient) !== null && _e !== void 0 ? _e : new IModelsClient(iModelClientOptions),
34
+ });
35
+ useEffect(() => {
36
+ var _a;
37
+ if (!props.extractionClient) {
38
+ setExtractionClient((_a = props.extractionClient) !== null && _a !== void 0 ? _a : new ExtractionClient(reportsBaseUrl()));
39
+ }
40
+ }, [props.extractionClient, reportsBaseUrl]);
41
+ const successfulExtractionToast = (iModelName, odataFeedUrl) => {
42
+ toaster.positive(React.createElement(SuccessfulExtractionToast, { iModelName: iModelName, odataFeedUrl: odataFeedUrl }));
43
+ };
44
+ const failedExtractionToast = (iModelName) => {
45
+ toaster.negative(React.createElement(FailedExtractionToast, { iModelName: iModelName }));
46
+ };
47
+ const bulkExtractor = useMemo(() => { var _a; return ({ bulkExtractor: (_a = props.bulkExtractor) !== null && _a !== void 0 ? _a : new BulkExtractor(apiConfig.reportsClient, extractionClient, apiConfig.getAccessToken, successfulExtractionToast, failedExtractionToast) }); }, [apiConfig.getAccessToken, apiConfig.reportsClient, extractionClient, props.bulkExtractor]);
48
+ useEffect(() => {
49
+ setApiConfig(() => {
50
+ var _a, _b, _c, _d;
51
+ return ({
52
+ getAccessToken: (_a = props.getAccessToken) !== null && _a !== void 0 ? _a : authorizationClientGetAccessToken,
53
+ baseUrl: props.baseUrl || REPORTS_CONFIG_BASE_URL,
54
+ iTwinId: props.iTwinId,
55
+ reportsClient: (_b = props.reportsClient) !== null && _b !== void 0 ? _b : new ReportsClient(reportsBaseUrl()),
56
+ mappingsClient: (_c = props.mappingsClient) !== null && _c !== void 0 ? _c : new MappingsClient(reportsBaseUrl()),
57
+ iModelsClient: (_d = props.iModelsClient) !== null && _d !== void 0 ? _d : new IModelsClient(iModelClientOptions),
58
+ });
59
+ });
60
+ }, [props.getAccessToken, props.baseUrl, props.iTwinId, props.reportsClient, props.mappingsClient, props.iModelsClient, reportsBaseUrl, iModelClientOptions]);
61
+ return (React.createElement(ReportsConfigApiContext.Provider, { value: apiConfig },
62
+ React.createElement(BulkExtractorContext.Provider, { value: bulkExtractor }, props.children)));
63
+ };
64
+ //# sourceMappingURL=ReportsConfigContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportsConfigContext.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportsConfigContext.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport type { IModelsClientOptions } from \"@itwin/imodels-client-management\";\nimport { Constants, IModelsClient } from \"@itwin/imodels-client-management\";\nimport { ExtractionClient, MappingsClient, REPORTING_BASE_PATH, ReportsClient } from \"@itwin/insights-client\";\nimport { toaster } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { BulkExtractorContext } from \"../context/BulkExtractorContext\";\nimport type {\n GetAccessTokenFn,\n ReportsConfigApiProps,\n} from \"../context/ReportsConfigApiContext\";\nimport { ReportsConfigApiContext } from \"../context/ReportsConfigApiContext\";\nimport { REPORTS_CONFIG_BASE_URL } from \"../ReportsConfigUiProvider\";\nimport { BulkExtractor } from \"./BulkExtractor\";\nimport { FailedExtractionToast, SuccessfulExtractionToast } from \"./ExtractionToast\";\nimport { generateUrl } from \"./utils\";\n\nexport interface ReportsConfigContextProps {\n getAccessToken?: GetAccessTokenFn;\n baseUrl?: string;\n iTwinId: string;\n bulkExtractor?: BulkExtractor;\n reportsClient?: ReportsClient;\n mappingsClient?: MappingsClient;\n extractionClient?: ExtractionClient;\n iModelsClient?: IModelsClient;\n children?: React.ReactNode;\n}\n\nconst authorizationClientGetAccessToken = async () =>\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n\nexport const ReportsConfigContext = (props: ReportsConfigContextProps) => {\n const reportsBaseUrl = useCallback(() => generateUrl(\n REPORTING_BASE_PATH,\n props.baseUrl || REPORTS_CONFIG_BASE_URL\n ), [props.baseUrl]);\n const iModelClientOptions: IModelsClientOptions = useMemo(() => ({\n api: { baseUrl: generateUrl(Constants.api.baseUrl, props.baseUrl ?? REPORTS_CONFIG_BASE_URL) },\n }), [props.baseUrl]);\n const [extractionClient, setExtractionClient] = useState<ExtractionClient>(\n props.extractionClient ?? new ExtractionClient(reportsBaseUrl())\n );\n\n const [apiConfig, setApiConfig] = useState<ReportsConfigApiProps>({\n getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,\n baseUrl: reportsBaseUrl(),\n iTwinId: props.iTwinId,\n reportsClient: props.reportsClient ?? new ReportsClient(reportsBaseUrl()),\n mappingsClient: props.mappingsClient ?? new MappingsClient(reportsBaseUrl()),\n iModelsClient: props.iModelsClient ?? new IModelsClient(iModelClientOptions),\n });\n\n useEffect(() => {\n if (!props.extractionClient) {\n setExtractionClient(props.extractionClient ?? new ExtractionClient(reportsBaseUrl()));\n }\n }, [props.extractionClient, reportsBaseUrl]);\n\n const successfulExtractionToast = (iModelName: string, odataFeedUrl: string) => {\n toaster.positive(<SuccessfulExtractionToast iModelName={iModelName} odataFeedUrl={odataFeedUrl} />);\n };\n\n const failedExtractionToast = (iModelName: string) => {\n toaster.negative(<FailedExtractionToast iModelName={iModelName} />);\n };\n\n const bulkExtractor = useMemo(\n () => ({ bulkExtractor: props.bulkExtractor ?? new BulkExtractor(apiConfig.reportsClient, extractionClient, apiConfig.getAccessToken, successfulExtractionToast, failedExtractionToast) }),\n [apiConfig.getAccessToken, apiConfig.reportsClient, extractionClient, props.bulkExtractor]\n );\n\n useEffect(() => {\n setApiConfig(() => ({\n getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,\n baseUrl: props.baseUrl || REPORTS_CONFIG_BASE_URL,\n iTwinId: props.iTwinId,\n reportsClient: props.reportsClient ?? new ReportsClient(reportsBaseUrl()),\n mappingsClient: props.mappingsClient ?? new MappingsClient(reportsBaseUrl()),\n iModelsClient: props.iModelsClient ?? new IModelsClient(iModelClientOptions),\n }));\n }, [props.getAccessToken, props.baseUrl, props.iTwinId, props.reportsClient, props.mappingsClient, props.iModelsClient, reportsBaseUrl, iModelClientOptions]);\n\n return (\n <ReportsConfigApiContext.Provider value={apiConfig}>\n <BulkExtractorContext.Provider value={bulkExtractor}>\n {props.children}\n </BulkExtractorContext.Provider>\n </ReportsConfigApiContext.Provider>\n );\n};\n"]}
@@ -1,10 +1,24 @@
1
1
  /// <reference types="react" />
2
2
  import type { AccessToken } from "@itwin/core-bentley";
3
3
  import "./ReportsContainer.scss";
4
+ import type { Report } from "@itwin/insights-client";
4
5
  interface ReportsContainerProps {
5
6
  getAccessToken?: () => Promise<AccessToken>;
6
7
  baseUrl: string;
7
8
  }
9
+ export declare enum RouteStep {
10
+ ReportsList = 0,
11
+ ReportAction = 1,
12
+ ReportMappings = 2
13
+ }
14
+ export interface ReportsRouteFields {
15
+ report?: Report;
16
+ }
17
+ export interface Route {
18
+ step: RouteStep;
19
+ title: string;
20
+ reportsRoutingFields: ReportsRouteFields;
21
+ }
8
22
  declare const ReportsContainer: ({ getAccessToken, baseUrl, }: ReportsContainerProps) => JSX.Element;
9
23
  export default ReportsContainer;
10
24
  //# sourceMappingURL=ReportsContainer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsContainer.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvD,OAAO,yBAAyB,CAAC;AAEjC,UAAU,qBAAqB;IAC7B,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,QAAA,MAAM,gBAAgB,iCAGnB,qBAAqB,gBAoBvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"ReportsContainer.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMrD,UAAU,qBAAqB;IAC7B,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,SAAS;IACnB,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,cAAc,IAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,kBAAkB,CAAC;CAC1C;AAED,QAAA,MAAM,gBAAgB,iCAGnB,qBAAqB,gBAgCvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1,23 +1,34 @@
1
- import { IModelApp } from "@itwin/core-frontend";
2
- import React, { useEffect, useState } from "react";
3
- import { Reports } from "../components/Reports";
4
- import { ReportsApiConfigContext } from "../context/ReportsApiConfigContext";
1
+ import React, { useCallback, useState } from "react";
5
2
  import "./ReportsContainer.scss";
6
- const authorizationClientGetAccessToken = async () => { var _a, _b; return (_b = (await ((_a = IModelApp.authorizationClient) === null || _a === void 0 ? void 0 : _a.getAccessToken()))) !== null && _b !== void 0 ? _b : ""; };
3
+ import { useActiveIModelConnection } from "@itwin/appui-react";
4
+ import { ReportsHeader } from "./ReportsHeader";
5
+ import { ReportsRouter } from "./ReportsRouter";
6
+ import { ReportsConfigContext } from "./ReportsConfigContext";
7
+ export var RouteStep;
8
+ (function (RouteStep) {
9
+ RouteStep[RouteStep["ReportsList"] = 0] = "ReportsList";
10
+ RouteStep[RouteStep["ReportAction"] = 1] = "ReportAction";
11
+ RouteStep[RouteStep["ReportMappings"] = 2] = "ReportMappings";
12
+ })(RouteStep || (RouteStep = {}));
7
13
  const ReportsContainer = ({ getAccessToken, baseUrl, }) => {
8
- const [apiConfig, setApiConfig] = useState({
9
- getAccessToken: getAccessToken !== null && getAccessToken !== void 0 ? getAccessToken : authorizationClientGetAccessToken,
10
- baseUrl,
11
- });
12
- useEffect(() => {
13
- setApiConfig(() => ({
14
- baseUrl,
15
- getAccessToken: getAccessToken !== null && getAccessToken !== void 0 ? getAccessToken : authorizationClientGetAccessToken,
16
- }));
17
- }, [getAccessToken, baseUrl]);
18
- return (React.createElement(ReportsApiConfigContext.Provider, { value: apiConfig },
14
+ var _a, _b;
15
+ const [routingHistory, setRoutingHistory] = useState([
16
+ { step: RouteStep.ReportsList, title: "iTwin Reports", reportsRoutingFields: {} },
17
+ ]);
18
+ const currentRoute = routingHistory[routingHistory.length - 1];
19
+ const iTwinId = (_b = (_a = useActiveIModelConnection()) === null || _a === void 0 ? void 0 : _a.iTwinId) !== null && _b !== void 0 ? _b : "";
20
+ const navigateTo = useCallback((toRoute) => {
21
+ setRoutingHistory((r) => [...r, toRoute(r[r.length - 1])]);
22
+ }, []);
23
+ const goBack = useCallback(() => {
24
+ const updatedRouting = [...routingHistory];
25
+ updatedRouting.pop();
26
+ setRoutingHistory(updatedRouting);
27
+ }, [routingHistory]);
28
+ return (React.createElement(ReportsConfigContext, { getAccessToken: getAccessToken, baseUrl: baseUrl, iTwinId: iTwinId },
19
29
  React.createElement("div", { className: "rcw-reports-container" },
20
- React.createElement(Reports, null))));
30
+ React.createElement(ReportsHeader, { goBack: goBack, currentRoute: currentRoute }),
31
+ React.createElement(ReportsRouter, { currentRoute: currentRoute, navigateTo: navigateTo, goBack: goBack }))));
21
32
  };
22
33
  export default ReportsContainer;
23
34
  //# sourceMappingURL=ReportsContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsContainer.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,yBAAyB,CAAC;AAOjC,MAAM,iCAAiC,GAAG,KAAK,IAAI,EAAE,eACnD,OAAA,MAAA,CAAC,MAAM,CAAA,MAAA,SAAS,CAAC,mBAAmB,0CAAE,cAAc,EAAE,CAAA,CAAC,mCAAI,EAAE,CAAA,EAAA,CAAC;AAEhE,MAAM,gBAAgB,GAAG,CAAC,EACxB,cAAc,EACd,OAAO,GACe,EAAE,EAAE;IAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAmB;QAC3D,cAAc,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,iCAAiC;QACnE,OAAO;KACR,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,OAAO;YACP,cAAc,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,iCAAiC;SACpE,CAAC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAE9B,OAAO,CACL,oBAAC,uBAAuB,CAAC,QAAQ,IAAC,KAAK,EAAE,SAAS;QAChD,6BAAK,SAAS,EAAC,uBAAuB;YACpC,oBAAC,OAAO,OAAG,CACP,CAC2B,CACpC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport React, { useEffect, useState } from \"react\";\nimport { Reports } from \"../components/Reports\";\nimport type { ReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsApiConfigContext } from \"../context/ReportsApiConfigContext\";\nimport \"./ReportsContainer.scss\";\n\ninterface ReportsContainerProps {\n getAccessToken?: () => Promise<AccessToken>;\n baseUrl: string;\n}\n\nconst authorizationClientGetAccessToken = async () =>\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n\nconst ReportsContainer = ({\n getAccessToken,\n baseUrl,\n}: ReportsContainerProps) => {\n const [apiConfig, setApiConfig] = useState<ReportsApiConfig>({\n getAccessToken: getAccessToken ?? authorizationClientGetAccessToken,\n baseUrl,\n });\n\n useEffect(() => {\n setApiConfig(() => ({\n baseUrl,\n getAccessToken: getAccessToken ?? authorizationClientGetAccessToken,\n }));\n }, [getAccessToken, baseUrl]);\n\n return (\n <ReportsApiConfigContext.Provider value={apiConfig}>\n <div className=\"rcw-reports-container\">\n <Reports />\n </div>\n </ReportsApiConfigContext.Provider>\n );\n};\n\nexport default ReportsContainer;\n"]}
1
+ {"version":3,"file":"ReportsContainer.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,yBAAyB,CAAC;AAEjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO9D,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,uDAAW,CAAA;IACX,yDAAY,CAAA;IACZ,6DAAc,CAAA;AAChB,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAYD,MAAM,gBAAgB,GAAG,CAAC,EACxB,cAAc,EACd,OAAO,GACe,EAAE,EAAE;;IAE1B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAU;QAC5D,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,EAAE,EAAE;KAClF,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAA,MAAA,yBAAyB,EAAE,0CAAE,OAAO,mCAAI,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,OAA2C,EAAE,EAAE;QAC7E,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,MAAM,cAAc,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;QAC3C,cAAc,CAAC,GAAG,EAAE,CAAC;QACrB,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO,CACL,oBAAC,oBAAoB,IAAC,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;QACtF,6BAAK,SAAS,EAAC,uBAAuB;YACpC,oBAAC,aAAa,IACZ,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,GAC1B;YACF,oBAAC,aAAa,IACZ,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,GACd,CACE,CACe,CACxB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport React, { useCallback, useState } from \"react\";\nimport \"./ReportsContainer.scss\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { ReportsHeader } from \"./ReportsHeader\";\nimport { ReportsRouter } from \"./ReportsRouter\";\nimport { ReportsConfigContext } from \"./ReportsConfigContext\";\n\ninterface ReportsContainerProps {\n getAccessToken?: () => Promise<AccessToken>;\n baseUrl: string;\n}\n\nexport enum RouteStep {\n ReportsList,\n ReportAction,\n ReportMappings\n}\n\nexport interface ReportsRouteFields {\n report?: Report;\n}\n\nexport interface Route {\n step: RouteStep;\n title: string;\n reportsRoutingFields: ReportsRouteFields;\n}\n\nconst ReportsContainer = ({\n getAccessToken,\n baseUrl,\n}: ReportsContainerProps) => {\n\n const [routingHistory, setRoutingHistory] = useState<Route[]>([\n { step: RouteStep.ReportsList, title: \"iTwin Reports\", reportsRoutingFields: {} },\n ]);\n const currentRoute = routingHistory[routingHistory.length - 1];\n const iTwinId = useActiveIModelConnection()?.iTwinId ?? \"\";\n const navigateTo = useCallback((toRoute: (prev: Route | undefined) => Route) => {\n setRoutingHistory((r) => [...r, toRoute(r[r.length - 1])]);\n }, []);\n\n const goBack = useCallback(() => {\n const updatedRouting = [...routingHistory];\n updatedRouting.pop();\n setRoutingHistory(updatedRouting);\n }, [routingHistory]);\n\n return (\n <ReportsConfigContext getAccessToken={getAccessToken} baseUrl={baseUrl} iTwinId={iTwinId}>\n <div className=\"rcw-reports-container\">\n <ReportsHeader\n goBack={goBack}\n currentRoute={currentRoute}\n />\n <ReportsRouter\n currentRoute={currentRoute}\n navigateTo={navigateTo}\n goBack={goBack}\n />\n </div>\n </ReportsConfigContext>\n );\n};\n\nexport default ReportsContainer;\n"]}
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import type { Route } from "./ReportsContainer";
3
+ export declare const ReportsHeader: ({ goBack, currentRoute, }: {
4
+ goBack: () => void;
5
+ currentRoute: Route;
6
+ }) => JSX.Element;
7
+ //# sourceMappingURL=ReportsHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportsHeader.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsHeader.tsx"],"names":[],"mappings":";AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,eAAO,MAAM,aAAa;YAIhB,MAAM,IAAI;kBACJ,KAAK;iBAYpB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import React from "react";
6
+ import { RouteStep } from "./ReportsContainer";
7
+ import { WidgetHeader } from "./utils";
8
+ export const ReportsHeader = ({ goBack, currentRoute, }) => {
9
+ const shouldDisableReturnFn = currentRoute.step === RouteStep.ReportsList ||
10
+ currentRoute.step === RouteStep.ReportAction;
11
+ return (React.createElement(WidgetHeader, { returnFn: shouldDisableReturnFn ? undefined : goBack, title: currentRoute.title }));
12
+ };
13
+ //# sourceMappingURL=ReportsHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportsHeader.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportsHeader.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,MAAM,EACN,YAAY,GAIb,EAAE,EAAE;IACH,MAAM,qBAAqB,GACzB,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,WAAW;QAC3C,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,YAAY,CAAC;IAE/C,OAAO,CACL,oBAAC,YAAY,IACX,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EACpD,KAAK,EAAE,YAAY,CAAC,KAAK,GACzB,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport type { Route } from \"./ReportsContainer\";\nimport { RouteStep } from \"./ReportsContainer\";\nimport { WidgetHeader } from \"./utils\";\n\nexport const ReportsHeader = ({\n goBack,\n currentRoute,\n}: {\n goBack: () => void;\n currentRoute: Route;\n}) => {\n const shouldDisableReturnFn =\n currentRoute.step === RouteStep.ReportsList ||\n currentRoute.step === RouteStep.ReportAction;\n\n return (\n <WidgetHeader\n returnFn={shouldDisableReturnFn ? undefined : goBack}\n title={currentRoute.title}\n />\n );\n};\n"]}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import type { Route } from "./ReportsContainer";
3
+ export declare const ReportsRouter: ({ currentRoute, navigateTo, goBack, }: {
4
+ currentRoute: Route;
5
+ navigateTo: (toRoute: (prev: Route | undefined) => Route) => void;
6
+ goBack: () => void;
7
+ }) => JSX.Element | null;
8
+ //# sourceMappingURL=ReportsRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportsRouter.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsRouter.tsx"],"names":[],"mappings":";AAUA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,eAAO,MAAM,aAAa;kBAKV,KAAK;iCACU,KAAK,GAAG,SAAS,KAAK,KAAK,KAAK,IAAI;YACzD,MAAM,IAAI;wBA0CnB,CAAC"}
@@ -0,0 +1,45 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { useActiveIModelConnection } from "@itwin/appui-react";
6
+ import React from "react";
7
+ import { ReportsConfigWidget } from "../../ReportsConfigWidget";
8
+ import { ReportAction } from "./ReportAction";
9
+ import { ReportMappings } from "./ReportMappings";
10
+ import { Reports } from "./Reports";
11
+ import { RouteStep } from "./ReportsContainer";
12
+ export const ReportsRouter = ({ currentRoute, navigateTo, goBack, }) => {
13
+ var _a, _b;
14
+ const { report } = currentRoute.reportsRoutingFields;
15
+ const iModelId = (_b = (_a = useActiveIModelConnection()) === null || _a === void 0 ? void 0 : _a.iModelId) !== null && _b !== void 0 ? _b : "";
16
+ switch (currentRoute.step) {
17
+ case RouteStep.ReportsList:
18
+ return (React.createElement(Reports, { onClickAddReport: () => navigateTo(() => ({
19
+ step: RouteStep.ReportAction,
20
+ title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:ITwinReports"),
21
+ reportsRoutingFields: {},
22
+ })), onClickReportTitle: (r) => {
23
+ navigateTo(() => ({
24
+ step: RouteStep.ReportMappings,
25
+ reportsRoutingFields: { report: r },
26
+ title: r.displayName,
27
+ }));
28
+ }, onClickReportModify: (r) => {
29
+ navigateTo(() => ({
30
+ step: RouteStep.ReportAction,
31
+ reportsRoutingFields: { report: r },
32
+ title: r.displayName,
33
+ }));
34
+ } }));
35
+ case RouteStep.ReportAction:
36
+ return React.createElement(ReportAction, { report: report, onClickCancel: goBack, onSaveSuccess: goBack });
37
+ case RouteStep.ReportMappings:
38
+ if (!report)
39
+ return null;
40
+ return React.createElement(ReportMappings, { report: report, onClickClose: goBack, defaultIModelId: iModelId });
41
+ default:
42
+ return null;
43
+ }
44
+ };
45
+ //# sourceMappingURL=ReportsRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportsRouter.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportsRouter.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,YAAY,EACZ,UAAU,EACV,MAAM,GAKP,EAAE,EAAE;;IACH,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,oBAAoB,CAAC;IACrD,MAAM,QAAQ,GAAG,MAAA,MAAA,yBAAyB,EAAE,0CAAE,QAAQ,mCAAI,EAAE,CAAC;IAC7D,QAAQ,YAAY,CAAC,IAAI,EAAE;QACzB,KAAK,SAAS,CAAC,WAAW;YACxB,OAAO,CACL,oBAAC,OAAO,IACN,gBAAgB,EAAE,GAAG,EAAE,CACrB,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;oBAChB,IAAI,EAAE,SAAS,CAAC,YAAY;oBAC5B,KAAK,EAAE,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CACxD,kCAAkC,CACnC;oBACD,oBAAoB,EAAE,EAAE;iBACzB,CAAC,CAAC,EAEL,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE;oBACxB,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,IAAI,EAAE,SAAS,CAAC,cAAc;wBAC9B,oBAAoB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;wBACnC,KAAK,EAAE,CAAC,CAAC,WAAW;qBACrB,CAAC,CAAC,CAAC;gBACN,CAAC,EACD,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE;oBACzB,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,IAAI,EAAE,SAAS,CAAC,YAAY;wBAC5B,oBAAoB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;wBACnC,KAAK,EAAE,CAAC,CAAC,WAAW;qBACrB,CAAC,CAAC,CAAC;gBACN,CAAC,GACD,CACH,CAAC;QAEJ,KAAK,SAAS,CAAC,YAAY;YACzB,OAAO,oBAAC,YAAY,IAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAI,CAAC;QACxF,KAAK,SAAS,CAAC,cAAc;YAC3B,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzB,OAAO,oBAAC,cAAc,IAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,GAAI,CAAC;QAC7F;YACE,OAAO,IAAI,CAAC;KACf;AACH,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport React from \"react\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\nimport { ReportAction } from \"./ReportAction\";\nimport { ReportMappings } from \"./ReportMappings\";\nimport { Reports } from \"./Reports\";\nimport type { Route } from \"./ReportsContainer\";\nimport { RouteStep } from \"./ReportsContainer\";\n\nexport const ReportsRouter = ({\n currentRoute,\n navigateTo,\n goBack,\n}: {\n currentRoute: Route;\n navigateTo: (toRoute: (prev: Route | undefined) => Route) => void;\n goBack: () => void;\n}) => {\n const { report } = currentRoute.reportsRoutingFields;\n const iModelId = useActiveIModelConnection()?.iModelId ?? \"\";\n switch (currentRoute.step) {\n case RouteStep.ReportsList:\n return (\n <Reports\n onClickAddReport={() =>\n navigateTo(() => ({\n step: RouteStep.ReportAction,\n title: ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:ITwinReports\"\n ),\n reportsRoutingFields: {},\n }))\n }\n onClickReportTitle={(r) => {\n navigateTo(() => ({\n step: RouteStep.ReportMappings,\n reportsRoutingFields: { report: r },\n title: r.displayName,\n }));\n }}\n onClickReportModify={(r) => {\n navigateTo(() => ({\n step: RouteStep.ReportAction,\n reportsRoutingFields: { report: r },\n title: r.displayName,\n }));\n }}\n />\n );\n\n case RouteStep.ReportAction:\n return <ReportAction report={report} onClickCancel={goBack} onSaveSuccess={goBack} />;\n case RouteStep.ReportMappings:\n if (!report) return null;\n return <ReportMappings report={report} onClickClose={goBack} defaultIModelId={iModelId} />;\n default:\n return null;\n }\n};\n"]}
@@ -20,8 +20,7 @@ export const SearchBar = ({ searchValue, setSearchValue, disabled, }) => {
20
20
  }
21
21
  } },
22
22
  React.createElement(LabeledInput, { "aria-label": "search-textbox", placeholder: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Search"), svgIcon: React.createElement(IconButton, { onClick: () => setSearchBarClosing(true), styleType: "borderless" },
23
- React.createElement(SvgCloseSmall, null)), iconDisplayStyle: "inline", value: searchValue, onChange: (e) => setSearchValue(e.target.value), disabled: disabled }),
24
- " ")) : (React.createElement(IconButton, { styleType: "borderless", onClick: () => setSearchBarOpened(true) },
23
+ React.createElement(SvgCloseSmall, null)), iconDisplayStyle: "inline", value: searchValue, onChange: (e) => setSearchValue(e.target.value), disabled: disabled }))) : (React.createElement(IconButton, { styleType: "borderless", "data-testid": "rcw-search-button", onClick: () => setSearchBarOpened(true) },
25
24
  React.createElement(SvgSearch, null)));
26
25
  };
27
26
  //# sourceMappingURL=SearchBar.js.map