@itwin/reports-config-widget-react 0.5.0 → 0.6.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 (380) hide show
  1. package/CHANGELOG.json +47 -1
  2. package/CHANGELOG.md +14 -2
  3. package/LICENSE.md +9 -9
  4. package/README.md +38 -38
  5. package/__mocks__/fileMock.js +4 -4
  6. package/api/reports-config-widget-react.api.md +130 -0
  7. package/api/reports-config-widget-react.exports.csv +14 -0
  8. package/api/temp/reports-config-widget-react.api.md +130 -0
  9. package/coverage/clover.xml +505 -504
  10. package/coverage/coverage-final.json +32 -32
  11. package/coverage/lcov-report/index.html +24 -24
  12. package/coverage/lcov-report/src/ReportsConfigWidget.ts.html +15 -15
  13. package/coverage/lcov-report/src/index.html +1 -1
  14. package/coverage/lcov-report/src/test/index.html +11 -11
  15. package/coverage/lcov-report/src/test/test-utils.tsx.html +46 -16
  16. package/coverage/lcov-report/src/widget/ReportsConfigUiProvider.tsx.html +22 -64
  17. package/coverage/lcov-report/src/widget/components/ActionPanel.tsx.html +5 -38
  18. package/coverage/lcov-report/src/widget/components/AddMappingsModal.tsx.html +23 -119
  19. package/coverage/lcov-report/src/widget/components/BulkExtractor.ts.html +117 -90
  20. package/coverage/lcov-report/src/widget/components/Constants.ts.html +5 -5
  21. package/coverage/lcov-report/src/widget/components/DeleteModal.tsx.html +13 -103
  22. package/coverage/lcov-report/src/widget/components/ExtractionStates/FailedExtractionState.tsx.html +6 -21
  23. package/coverage/lcov-report/src/widget/components/ExtractionStates/QueuedExtractionState.tsx.html +6 -21
  24. package/coverage/lcov-report/src/widget/components/ExtractionStates/RunningExtractionState.tsx.html +7 -22
  25. package/coverage/lcov-report/src/widget/components/ExtractionStates/StartingExtractionState.tsx.html +7 -28
  26. package/coverage/lcov-report/src/widget/components/ExtractionStates/SucceededExtractionState.tsx.html +6 -21
  27. package/coverage/lcov-report/src/widget/components/ExtractionStates/index.html +1 -1
  28. package/coverage/lcov-report/src/widget/components/ExtractionStatus.tsx.html +20 -47
  29. package/coverage/lcov-report/src/widget/components/ExtractionToast.tsx.html +20 -11
  30. package/coverage/lcov-report/src/widget/components/HorizontalTile.tsx.html +16 -79
  31. package/coverage/lcov-report/src/widget/components/LocalizedTablePaginator.tsx.html +15 -108
  32. package/coverage/lcov-report/src/widget/components/ReportAction.tsx.html +36 -75
  33. package/coverage/lcov-report/src/widget/components/ReportHorizontalTile.tsx.html +62 -92
  34. package/coverage/lcov-report/src/widget/components/ReportMappingHorizontalTile.tsx.html +104 -128
  35. package/coverage/lcov-report/src/widget/components/ReportMappings.tsx.html +86 -299
  36. package/coverage/lcov-report/src/widget/components/Reports.tsx.html +40 -202
  37. package/coverage/lcov-report/src/widget/components/ReportsConfigContext.tsx.html +59 -44
  38. package/coverage/lcov-report/src/widget/components/ReportsContainer.tsx.html +10 -49
  39. package/coverage/lcov-report/src/widget/components/ReportsHeader.tsx.html +8 -47
  40. package/coverage/lcov-report/src/widget/components/ReportsRouter.tsx.html +6 -12
  41. package/coverage/lcov-report/src/widget/components/SearchBar.tsx.html +13 -25
  42. package/coverage/lcov-report/src/widget/components/SelectIModel.tsx.html +11 -56
  43. package/coverage/lcov-report/src/widget/components/index.html +50 -50
  44. package/coverage/lcov-report/src/widget/components/utils.tsx.html +25 -169
  45. package/coverage/lcov-report/src/widget/context/BulkExtractorContext.tsx.html +6 -12
  46. package/coverage/lcov-report/src/widget/context/ReportsConfigApiContext.tsx.html +6 -12
  47. package/coverage/lcov-report/src/widget/context/index.html +1 -1
  48. package/coverage/lcov-report/src/widget/hooks/index.html +1 -1
  49. package/coverage/lcov-report/src/widget/hooks/useValidator.ts.html +12 -54
  50. package/coverage/lcov-report/src/widget/index.html +1 -1
  51. package/coverage/lcov.info +917 -893
  52. package/jest.config.js +14 -17
  53. package/lib/cjs/ReportsConfigWidget.d.ts +4 -0
  54. package/lib/cjs/ReportsConfigWidget.d.ts.map +1 -1
  55. package/lib/cjs/ReportsConfigWidget.js +4 -0
  56. package/lib/cjs/ReportsConfigWidget.js.map +1 -1
  57. package/lib/cjs/reports-config-widget-react.js +3 -3
  58. package/lib/cjs/reports-config-widget-react.js.map +1 -1
  59. package/lib/cjs/test/AddMappingModal.test.js +11 -10
  60. package/lib/cjs/test/AddMappingModal.test.js.map +1 -1
  61. package/lib/cjs/test/BulkExtractor.test.js +68 -43
  62. package/lib/cjs/test/BulkExtractor.test.js.map +1 -1
  63. package/lib/cjs/test/DeleteModal.test.js +3 -3
  64. package/lib/cjs/test/DeleteModal.test.js.map +1 -1
  65. package/lib/cjs/test/ReportAction.test.js +6 -4
  66. package/lib/cjs/test/ReportAction.test.js.map +1 -1
  67. package/lib/cjs/test/ReportMappingHorizontalTile.test.js +64 -25
  68. package/lib/cjs/test/ReportMappingHorizontalTile.test.js.map +1 -1
  69. package/lib/cjs/test/ReportMappings.test.js +39 -18
  70. package/lib/cjs/test/ReportMappings.test.js.map +1 -1
  71. package/lib/cjs/test/Reports.test.js +3 -3
  72. package/lib/cjs/test/Reports.test.js.map +1 -1
  73. package/lib/cjs/test/WidgetHeader.test.js +3 -3
  74. package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
  75. package/lib/cjs/test/test-utils.d.ts +8 -0
  76. package/lib/cjs/test/test-utils.d.ts.map +1 -1
  77. package/lib/cjs/test/test-utils.js +16 -4
  78. package/lib/cjs/test/test-utils.js.map +1 -1
  79. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  80. package/lib/cjs/widget/ReportsConfigUiProvider.d.ts +7 -0
  81. package/lib/cjs/widget/ReportsConfigUiProvider.d.ts.map +1 -1
  82. package/lib/cjs/widget/ReportsConfigUiProvider.js +8 -3
  83. package/lib/cjs/widget/ReportsConfigUiProvider.js.map +1 -1
  84. package/lib/cjs/widget/components/ActionPanel.d.ts.map +1 -1
  85. package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
  86. package/lib/cjs/widget/components/AddMappingsModal.d.ts +1 -1
  87. package/lib/cjs/widget/components/AddMappingsModal.d.ts.map +1 -1
  88. package/lib/cjs/widget/components/AddMappingsModal.js +7 -7
  89. package/lib/cjs/widget/components/AddMappingsModal.js.map +1 -1
  90. package/lib/cjs/widget/components/AddMappingsModal.scss +1 -1
  91. package/lib/cjs/widget/components/BulkExtractor.d.ts +7 -4
  92. package/lib/cjs/widget/components/BulkExtractor.d.ts.map +1 -1
  93. package/lib/cjs/widget/components/BulkExtractor.js +52 -35
  94. package/lib/cjs/widget/components/BulkExtractor.js.map +1 -1
  95. package/lib/cjs/widget/components/Constants.d.ts.map +1 -1
  96. package/lib/cjs/widget/components/Constants.js +3 -3
  97. package/lib/cjs/widget/components/Constants.js.map +1 -1
  98. package/lib/cjs/widget/components/DeleteModal.d.ts +1 -1
  99. package/lib/cjs/widget/components/DeleteModal.d.ts.map +1 -1
  100. package/lib/cjs/widget/components/DeleteModal.js +5 -5
  101. package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
  102. package/lib/cjs/widget/components/DeleteModal.scss +2 -2
  103. package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.d.ts.map +1 -1
  104. package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.js +3 -3
  105. package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.js.map +1 -1
  106. package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.d.ts.map +1 -1
  107. package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.js +3 -3
  108. package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.js.map +1 -1
  109. package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.d.ts.map +1 -1
  110. package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.js +3 -3
  111. package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.js.map +1 -1
  112. package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.d.ts.map +1 -1
  113. package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.js +3 -3
  114. package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.js.map +1 -1
  115. package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.d.ts.map +1 -1
  116. package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.js +3 -3
  117. package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.js.map +1 -1
  118. package/lib/cjs/widget/components/ExtractionStatus.d.ts +1 -1
  119. package/lib/cjs/widget/components/ExtractionStatus.d.ts.map +1 -1
  120. package/lib/cjs/widget/components/ExtractionStatus.js +9 -9
  121. package/lib/cjs/widget/components/ExtractionStatus.js.map +1 -1
  122. package/lib/cjs/widget/components/ExtractionStatus.scss +1 -1
  123. package/lib/cjs/widget/components/ExtractionToast.d.ts.map +1 -1
  124. package/lib/cjs/widget/components/ExtractionToast.js +3 -3
  125. package/lib/cjs/widget/components/ExtractionToast.js.map +1 -1
  126. package/lib/cjs/widget/components/HorizontalTile.d.ts.map +1 -1
  127. package/lib/cjs/widget/components/HorizontalTile.js +1 -2
  128. package/lib/cjs/widget/components/HorizontalTile.js.map +1 -1
  129. package/lib/cjs/widget/components/HorizontalTile.scss +1 -4
  130. package/lib/cjs/widget/components/LocalizedTablePaginator.d.ts.map +1 -1
  131. package/lib/cjs/widget/components/LocalizedTablePaginator.js +1 -1
  132. package/lib/cjs/widget/components/LocalizedTablePaginator.js.map +1 -1
  133. package/lib/cjs/widget/components/ReportAction.d.ts +8 -0
  134. package/lib/cjs/widget/components/ReportAction.d.ts.map +1 -1
  135. package/lib/cjs/widget/components/ReportAction.js +9 -7
  136. package/lib/cjs/widget/components/ReportAction.js.map +1 -1
  137. package/lib/cjs/widget/components/ReportAction.scss +1 -1
  138. package/lib/cjs/widget/components/ReportHorizontalTile.d.ts.map +1 -1
  139. package/lib/cjs/widget/components/ReportHorizontalTile.js +4 -4
  140. package/lib/cjs/widget/components/ReportHorizontalTile.js.map +1 -1
  141. package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
  142. package/lib/cjs/widget/components/ReportMappingHorizontalTile.js +46 -45
  143. package/lib/cjs/widget/components/ReportMappingHorizontalTile.js.map +1 -1
  144. package/lib/cjs/widget/components/ReportMappings.d.ts +8 -0
  145. package/lib/cjs/widget/components/ReportMappings.d.ts.map +1 -1
  146. package/lib/cjs/widget/components/ReportMappings.js +25 -11
  147. package/lib/cjs/widget/components/ReportMappings.js.map +1 -1
  148. package/lib/cjs/widget/components/Reports.d.ts +9 -1
  149. package/lib/cjs/widget/components/Reports.d.ts.map +1 -1
  150. package/lib/cjs/widget/components/Reports.js +7 -8
  151. package/lib/cjs/widget/components/Reports.js.map +1 -1
  152. package/lib/cjs/widget/components/Reports.scss +0 -1
  153. package/lib/cjs/widget/components/ReportsConfigContext.d.ts +8 -0
  154. package/lib/cjs/widget/components/ReportsConfigContext.d.ts.map +1 -1
  155. package/lib/cjs/widget/components/ReportsConfigContext.js +13 -5
  156. package/lib/cjs/widget/components/ReportsConfigContext.js.map +1 -1
  157. package/lib/cjs/widget/components/ReportsContainer.d.ts +1 -1
  158. package/lib/cjs/widget/components/ReportsContainer.d.ts.map +1 -1
  159. package/lib/cjs/widget/components/ReportsContainer.js +2 -4
  160. package/lib/cjs/widget/components/ReportsContainer.js.map +1 -1
  161. package/lib/cjs/widget/components/ReportsContainer.scss +1 -1
  162. package/lib/cjs/widget/components/ReportsHeader.d.ts +1 -1
  163. package/lib/cjs/widget/components/ReportsHeader.d.ts.map +1 -1
  164. package/lib/cjs/widget/components/ReportsHeader.js +6 -7
  165. package/lib/cjs/widget/components/ReportsHeader.js.map +1 -1
  166. package/lib/cjs/widget/components/ReportsRouter.d.ts.map +1 -1
  167. package/lib/cjs/widget/components/ReportsRouter.js +3 -3
  168. package/lib/cjs/widget/components/ReportsRouter.js.map +1 -1
  169. package/lib/cjs/widget/components/SearchBar.d.ts +1 -1
  170. package/lib/cjs/widget/components/SearchBar.d.ts.map +1 -1
  171. package/lib/cjs/widget/components/SearchBar.js +4 -4
  172. package/lib/cjs/widget/components/SearchBar.js.map +1 -1
  173. package/lib/cjs/widget/components/SelectIModel.d.ts +1 -1
  174. package/lib/cjs/widget/components/SelectIModel.d.ts.map +1 -1
  175. package/lib/cjs/widget/components/SelectIModel.js +1 -1
  176. package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
  177. package/lib/cjs/widget/components/SelectIModel.scss +1 -1
  178. package/lib/cjs/widget/components/utils.d.ts +1 -1
  179. package/lib/cjs/widget/components/utils.d.ts.map +1 -1
  180. package/lib/cjs/widget/components/utils.js +5 -5
  181. package/lib/cjs/widget/components/utils.js.map +1 -1
  182. package/lib/cjs/widget/components/utils.scss +1 -1
  183. package/lib/cjs/widget/context/BulkExtractorContext.d.ts.map +1 -1
  184. package/lib/cjs/widget/context/BulkExtractorContext.js.map +1 -1
  185. package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts.map +1 -1
  186. package/lib/cjs/widget/context/ReportsConfigApiContext.js.map +1 -1
  187. package/lib/cjs/widget/hooks/useValidator.d.ts +1 -4
  188. package/lib/cjs/widget/hooks/useValidator.d.ts.map +1 -1
  189. package/lib/cjs/widget/hooks/useValidator.js +3 -3
  190. package/lib/cjs/widget/hooks/useValidator.js.map +1 -1
  191. package/lib/esm/ReportsConfigWidget.d.ts +4 -0
  192. package/lib/esm/ReportsConfigWidget.d.ts.map +1 -1
  193. package/lib/esm/ReportsConfigWidget.js +4 -0
  194. package/lib/esm/ReportsConfigWidget.js.map +1 -1
  195. package/lib/esm/reports-config-widget-react.js +3 -3
  196. package/lib/esm/reports-config-widget-react.js.map +1 -1
  197. package/lib/esm/test/AddMappingModal.test.js +12 -11
  198. package/lib/esm/test/AddMappingModal.test.js.map +1 -1
  199. package/lib/esm/test/BulkExtractor.test.js +69 -44
  200. package/lib/esm/test/BulkExtractor.test.js.map +1 -1
  201. package/lib/esm/test/DeleteModal.test.js +4 -4
  202. package/lib/esm/test/DeleteModal.test.js.map +1 -1
  203. package/lib/esm/test/ReportAction.test.js +7 -5
  204. package/lib/esm/test/ReportAction.test.js.map +1 -1
  205. package/lib/esm/test/ReportMappingHorizontalTile.test.js +65 -26
  206. package/lib/esm/test/ReportMappingHorizontalTile.test.js.map +1 -1
  207. package/lib/esm/test/ReportMappings.test.js +41 -20
  208. package/lib/esm/test/ReportMappings.test.js.map +1 -1
  209. package/lib/esm/test/Reports.test.js +4 -4
  210. package/lib/esm/test/Reports.test.js.map +1 -1
  211. package/lib/esm/test/WidgetHeader.test.js +3 -3
  212. package/lib/esm/test/WidgetHeader.test.js.map +1 -1
  213. package/lib/esm/test/test-utils.d.ts +8 -0
  214. package/lib/esm/test/test-utils.d.ts.map +1 -1
  215. package/lib/esm/test/test-utils.js +15 -3
  216. package/lib/esm/test/test-utils.js.map +1 -1
  217. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  218. package/lib/esm/widget/ReportsConfigUiProvider.d.ts +7 -0
  219. package/lib/esm/widget/ReportsConfigUiProvider.d.ts.map +1 -1
  220. package/lib/esm/widget/ReportsConfigUiProvider.js +9 -4
  221. package/lib/esm/widget/ReportsConfigUiProvider.js.map +1 -1
  222. package/lib/esm/widget/components/ActionPanel.d.ts.map +1 -1
  223. package/lib/esm/widget/components/ActionPanel.js.map +1 -1
  224. package/lib/esm/widget/components/AddMappingsModal.d.ts +1 -1
  225. package/lib/esm/widget/components/AddMappingsModal.d.ts.map +1 -1
  226. package/lib/esm/widget/components/AddMappingsModal.js +7 -7
  227. package/lib/esm/widget/components/AddMappingsModal.js.map +1 -1
  228. package/lib/esm/widget/components/AddMappingsModal.scss +1 -1
  229. package/lib/esm/widget/components/BulkExtractor.d.ts +7 -4
  230. package/lib/esm/widget/components/BulkExtractor.d.ts.map +1 -1
  231. package/lib/esm/widget/components/BulkExtractor.js +53 -36
  232. package/lib/esm/widget/components/BulkExtractor.js.map +1 -1
  233. package/lib/esm/widget/components/Constants.d.ts.map +1 -1
  234. package/lib/esm/widget/components/Constants.js +3 -3
  235. package/lib/esm/widget/components/Constants.js.map +1 -1
  236. package/lib/esm/widget/components/DeleteModal.d.ts +1 -1
  237. package/lib/esm/widget/components/DeleteModal.d.ts.map +1 -1
  238. package/lib/esm/widget/components/DeleteModal.js +6 -6
  239. package/lib/esm/widget/components/DeleteModal.js.map +1 -1
  240. package/lib/esm/widget/components/DeleteModal.scss +2 -2
  241. package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.d.ts.map +1 -1
  242. package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.js +3 -3
  243. package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.js.map +1 -1
  244. package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.d.ts.map +1 -1
  245. package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.js +3 -3
  246. package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.js.map +1 -1
  247. package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.d.ts.map +1 -1
  248. package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.js +3 -3
  249. package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.js.map +1 -1
  250. package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.d.ts.map +1 -1
  251. package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.js +3 -3
  252. package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.js.map +1 -1
  253. package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.d.ts.map +1 -1
  254. package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.js +3 -3
  255. package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.js.map +1 -1
  256. package/lib/esm/widget/components/ExtractionStatus.d.ts +1 -1
  257. package/lib/esm/widget/components/ExtractionStatus.d.ts.map +1 -1
  258. package/lib/esm/widget/components/ExtractionStatus.js +9 -9
  259. package/lib/esm/widget/components/ExtractionStatus.js.map +1 -1
  260. package/lib/esm/widget/components/ExtractionStatus.scss +1 -1
  261. package/lib/esm/widget/components/ExtractionToast.d.ts.map +1 -1
  262. package/lib/esm/widget/components/ExtractionToast.js +3 -3
  263. package/lib/esm/widget/components/ExtractionToast.js.map +1 -1
  264. package/lib/esm/widget/components/HorizontalTile.d.ts.map +1 -1
  265. package/lib/esm/widget/components/HorizontalTile.js +1 -2
  266. package/lib/esm/widget/components/HorizontalTile.js.map +1 -1
  267. package/lib/esm/widget/components/HorizontalTile.scss +1 -4
  268. package/lib/esm/widget/components/LocalizedTablePaginator.d.ts.map +1 -1
  269. package/lib/esm/widget/components/LocalizedTablePaginator.js +1 -1
  270. package/lib/esm/widget/components/LocalizedTablePaginator.js.map +1 -1
  271. package/lib/esm/widget/components/ReportAction.d.ts +8 -0
  272. package/lib/esm/widget/components/ReportAction.d.ts.map +1 -1
  273. package/lib/esm/widget/components/ReportAction.js +10 -8
  274. package/lib/esm/widget/components/ReportAction.js.map +1 -1
  275. package/lib/esm/widget/components/ReportAction.scss +1 -1
  276. package/lib/esm/widget/components/ReportHorizontalTile.d.ts.map +1 -1
  277. package/lib/esm/widget/components/ReportHorizontalTile.js +6 -6
  278. package/lib/esm/widget/components/ReportHorizontalTile.js.map +1 -1
  279. package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
  280. package/lib/esm/widget/components/ReportMappingHorizontalTile.js +47 -46
  281. package/lib/esm/widget/components/ReportMappingHorizontalTile.js.map +1 -1
  282. package/lib/esm/widget/components/ReportMappings.d.ts +8 -0
  283. package/lib/esm/widget/components/ReportMappings.d.ts.map +1 -1
  284. package/lib/esm/widget/components/ReportMappings.js +28 -14
  285. package/lib/esm/widget/components/ReportMappings.js.map +1 -1
  286. package/lib/esm/widget/components/Reports.d.ts +9 -1
  287. package/lib/esm/widget/components/Reports.d.ts.map +1 -1
  288. package/lib/esm/widget/components/Reports.js +8 -9
  289. package/lib/esm/widget/components/Reports.js.map +1 -1
  290. package/lib/esm/widget/components/Reports.scss +0 -1
  291. package/lib/esm/widget/components/ReportsConfigContext.d.ts +8 -0
  292. package/lib/esm/widget/components/ReportsConfigContext.d.ts.map +1 -1
  293. package/lib/esm/widget/components/ReportsConfigContext.js +14 -6
  294. package/lib/esm/widget/components/ReportsConfigContext.js.map +1 -1
  295. package/lib/esm/widget/components/ReportsContainer.d.ts +1 -1
  296. package/lib/esm/widget/components/ReportsContainer.d.ts.map +1 -1
  297. package/lib/esm/widget/components/ReportsContainer.js +2 -4
  298. package/lib/esm/widget/components/ReportsContainer.js.map +1 -1
  299. package/lib/esm/widget/components/ReportsContainer.scss +1 -1
  300. package/lib/esm/widget/components/ReportsHeader.d.ts +1 -1
  301. package/lib/esm/widget/components/ReportsHeader.d.ts.map +1 -1
  302. package/lib/esm/widget/components/ReportsHeader.js +6 -7
  303. package/lib/esm/widget/components/ReportsHeader.js.map +1 -1
  304. package/lib/esm/widget/components/ReportsRouter.d.ts.map +1 -1
  305. package/lib/esm/widget/components/ReportsRouter.js +3 -3
  306. package/lib/esm/widget/components/ReportsRouter.js.map +1 -1
  307. package/lib/esm/widget/components/SearchBar.d.ts +1 -1
  308. package/lib/esm/widget/components/SearchBar.d.ts.map +1 -1
  309. package/lib/esm/widget/components/SearchBar.js +4 -4
  310. package/lib/esm/widget/components/SearchBar.js.map +1 -1
  311. package/lib/esm/widget/components/SelectIModel.d.ts +1 -1
  312. package/lib/esm/widget/components/SelectIModel.d.ts.map +1 -1
  313. package/lib/esm/widget/components/SelectIModel.js +2 -2
  314. package/lib/esm/widget/components/SelectIModel.js.map +1 -1
  315. package/lib/esm/widget/components/SelectIModel.scss +1 -1
  316. package/lib/esm/widget/components/utils.d.ts +1 -1
  317. package/lib/esm/widget/components/utils.d.ts.map +1 -1
  318. package/lib/esm/widget/components/utils.js +6 -6
  319. package/lib/esm/widget/components/utils.js.map +1 -1
  320. package/lib/esm/widget/components/utils.scss +1 -1
  321. package/lib/esm/widget/context/BulkExtractorContext.d.ts.map +1 -1
  322. package/lib/esm/widget/context/BulkExtractorContext.js.map +1 -1
  323. package/lib/esm/widget/context/ReportsConfigApiContext.d.ts.map +1 -1
  324. package/lib/esm/widget/context/ReportsConfigApiContext.js.map +1 -1
  325. package/lib/esm/widget/hooks/useValidator.d.ts +1 -4
  326. package/lib/esm/widget/hooks/useValidator.d.ts.map +1 -1
  327. package/lib/esm/widget/hooks/useValidator.js +3 -3
  328. package/lib/esm/widget/hooks/useValidator.js.map +1 -1
  329. package/package.json +9 -4
  330. package/src/ReportsConfigWidget.ts +9 -9
  331. package/src/reports-config-widget-react.ts +3 -3
  332. package/src/test/AddMappingModal.test.tsx +45 -70
  333. package/src/test/BulkExtractor.test.ts +73 -118
  334. package/src/test/DeleteModal.test.tsx +6 -23
  335. package/src/test/ReportAction.test.tsx +20 -38
  336. package/src/test/ReportMappingHorizontalTile.test.tsx +137 -106
  337. package/src/test/ReportMappings.test.tsx +73 -88
  338. package/src/test/Reports.test.tsx +30 -64
  339. package/src/test/WidgetHeader.test.tsx +3 -3
  340. package/src/test/test-utils.tsx +18 -8
  341. package/src/widget/ReportsConfigUiProvider.tsx +16 -30
  342. package/src/widget/components/ActionPanel.tsx +3 -14
  343. package/src/widget/components/AddMappingsModal.scss +1 -1
  344. package/src/widget/components/AddMappingsModal.tsx +19 -51
  345. package/src/widget/components/BulkExtractor.ts +63 -54
  346. package/src/widget/components/Constants.ts +4 -4
  347. package/src/widget/components/DeleteModal.scss +2 -2
  348. package/src/widget/components/DeleteModal.tsx +11 -41
  349. package/src/widget/components/ExtractionStates/FailedExtractionState.tsx +4 -9
  350. package/src/widget/components/ExtractionStates/QueuedExtractionState.tsx +4 -9
  351. package/src/widget/components/ExtractionStates/RunningExtractionState.tsx +4 -9
  352. package/src/widget/components/ExtractionStates/StartingExtractionState.tsx +4 -11
  353. package/src/widget/components/ExtractionStates/SucceededExtractionState.tsx +4 -9
  354. package/src/widget/components/ExtractionStatus.scss +1 -1
  355. package/src/widget/components/ExtractionStatus.tsx +9 -18
  356. package/src/widget/components/ExtractionToast.tsx +12 -9
  357. package/src/widget/components/HorizontalTile.scss +1 -4
  358. package/src/widget/components/HorizontalTile.tsx +12 -33
  359. package/src/widget/components/LocalizedTablePaginator.tsx +13 -44
  360. package/src/widget/components/ReportAction.scss +1 -1
  361. package/src/widget/components/ReportAction.tsx +26 -39
  362. package/src/widget/components/ReportHorizontalTile.tsx +45 -55
  363. package/src/widget/components/ReportMappingHorizontalTile.tsx +70 -78
  364. package/src/widget/components/ReportMappings.tsx +59 -130
  365. package/src/widget/components/Reports.scss +0 -1
  366. package/src/widget/components/Reports.tsx +28 -82
  367. package/src/widget/components/ReportsConfigContext.tsx +30 -25
  368. package/src/widget/components/ReportsContainer.scss +1 -1
  369. package/src/widget/components/ReportsContainer.tsx +8 -21
  370. package/src/widget/components/ReportsHeader.tsx +6 -19
  371. package/src/widget/components/ReportsRouter.tsx +4 -6
  372. package/src/widget/components/SearchBar.tsx +9 -13
  373. package/src/widget/components/SelectIModel.scss +1 -1
  374. package/src/widget/components/SelectIModel.tsx +9 -24
  375. package/src/widget/components/utils.scss +1 -1
  376. package/src/widget/components/utils.tsx +21 -69
  377. package/src/widget/context/BulkExtractorContext.tsx +4 -6
  378. package/src/widget/context/ReportsConfigApiContext.tsx +4 -6
  379. package/src/widget/hooks/useValidator.ts +10 -24
  380. package/tsconfig.json +11 -11
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/reports-config-widget-react",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "An iTwin.js 3D Viewer Widget that interfaces with the iTwin Reporting Platform.",
5
5
  "keywords": [
6
6
  "Bentley",
@@ -33,6 +33,7 @@
33
33
  "copy:public": "cpx \"./public/**/*\" ./lib/public",
34
34
  "cover": "npm test -- --coverage",
35
35
  "dual-build": "npm run -s build:cjs && npm run -s build:esm",
36
+ "extract-api": "betools extract-api --entry=reports-config-widget-react --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api",
36
37
  "lint": "eslint -f visualstudio \"./src/**/*.{ts,tsx}\" 1>&2",
37
38
  "lint:fix": "npm run lint -- --fix",
38
39
  "pseudolocalize": "betools pseudolocalize --englishDir ./public/locales/en --out ./public/locales/en-PSEUDO",
@@ -44,7 +45,10 @@
44
45
  "plugins": [
45
46
  "@itwin"
46
47
  ],
47
- "extends": "plugin:@itwin/ui",
48
+ "extends": [
49
+ "plugin:@itwin/ui",
50
+ "prettier"
51
+ ],
48
52
  "rules": {
49
53
  "no-duplicate-imports": "off",
50
54
  "@typescript-eslint/consistent-type-imports": "error",
@@ -58,7 +62,7 @@
58
62
  "@itwin/imodels-access-common": "^4.1.4",
59
63
  "@itwin/imodels-access-frontend": "^4.1.4",
60
64
  "@itwin/imodels-client-management": "^4.2.3",
61
- "@itwin/insights-client": "^0.4.0",
65
+ "@itwin/insights-client": "^0.10.1",
62
66
  "@itwin/itwinui-icons-color-react": "^2.1.0",
63
67
  "@itwin/itwinui-icons-react": "^2.4.0",
64
68
  "@itwin/itwinui-react": "^2.11.0",
@@ -81,8 +85,8 @@
81
85
  "@itwin/core-quantity": "^4.0.0",
82
86
  "@itwin/core-react": "^4.0.0",
83
87
  "@itwin/core-telemetry": "^4.0.0",
84
- "@itwin/eslint-plugin": "^3.7.8",
85
88
  "@itwin/ecschema-metadata": "^4.0.0",
89
+ "@itwin/eslint-plugin": "^3.7.8",
86
90
  "@itwin/imodel-components-react": "^4.0.0",
87
91
  "@itwin/presentation-common": "^4.0.0",
88
92
  "@itwin/presentation-frontend": "^4.0.0",
@@ -104,6 +108,7 @@
104
108
  "chai": "^4.2.0",
105
109
  "cpx2": "^3.0.0",
106
110
  "eslint": "^7.32.0",
111
+ "eslint-config-prettier": "^9.1.0",
107
112
  "eslint-plugin-node": "^11.1.0",
108
113
  "eslint-plugin-react": "^7.33.2",
109
114
  "eslint-plugin-react-hooks": "^4.2.0",
@@ -1,10 +1,14 @@
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
- *--------------------------------------------------------------------------------------------*/
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
5
  import type { Localization } from "@itwin/core-common";
6
6
  import { IModelApp } from "@itwin/core-frontend";
7
7
 
8
+ /**
9
+ * ReportsConfigWidget localization
10
+ * @public
11
+ */
8
12
  export class ReportsConfigWidget {
9
13
  private static _localizationNamespace: string;
10
14
  private static _localization: Localization;
@@ -21,16 +25,12 @@ export class ReportsConfigWidget {
21
25
  ReportsConfigWidget._localization = localization ?? IModelApp.localization;
22
26
  // Setup localization
23
27
  const ReportsConfigWidgetNamespace = "ReportsConfigWidget";
24
- await ReportsConfigWidget._localization.registerNamespace(
25
- ReportsConfigWidgetNamespace
26
- );
28
+ await ReportsConfigWidget._localization.registerNamespace(ReportsConfigWidgetNamespace);
27
29
 
28
30
  ReportsConfigWidget._localizationNamespace = ReportsConfigWidgetNamespace;
29
31
  }
30
32
 
31
33
  public static terminate() {
32
- ReportsConfigWidget._localization.unregisterNamespace(
33
- ReportsConfigWidget.localizationNamespace
34
- );
34
+ ReportsConfigWidget._localization.unregisterNamespace(ReportsConfigWidget.localizationNamespace);
35
35
  }
36
36
  }
@@ -1,7 +1,7 @@
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
- *--------------------------------------------------------------------------------------------*/
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
5
  /** UI Provider for iTwin Viewer Applications */
6
6
  export * from "./widget/ReportsConfigUiProvider";
7
7
  export * from "./ReportsConfigWidget";
@@ -1,29 +1,14 @@
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
- *--------------------------------------------------------------------------------------------*/
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
5
  import React from "react";
6
6
  import faker from "@faker-js/faker";
7
7
  import "@testing-library/jest-dom";
8
8
  import { ReportsConfigWidget } from "../ReportsConfigWidget";
9
- import {
10
- mockIModelId1,
11
- mockIModelId2,
12
- mockIModelsResponse,
13
- mockITwinId,
14
- mockReportId,
15
- render,
16
- screen,
17
- waitFor,
18
- within,
19
- } from "./test-utils";
9
+ import { mockIModelId1, mockIModelId2, mockIModelsResponse, mockITwinId, mockReportId, render, screen, waitFor, within } from "./test-utils";
20
10
  import * as moq from "typemoq";
21
- import type {
22
- MappingsClient,
23
- MappingSingle,
24
- ReportMappingCollection,
25
- ReportsClient,
26
- } from "@itwin/insights-client";
11
+ import type { MappingContainer, MappingsClient, ReportMappingCollection, ReportsClient } from "@itwin/insights-client";
27
12
  import type { ReportMappingAndMapping } from "../widget/components/ReportMappings";
28
13
  import type { GetSingleIModelParams, IModelsClient } from "@itwin/imodels-client-management";
29
14
  import { AddMappingsModal } from "../widget/components/AddMappingsModal";
@@ -89,29 +74,25 @@ const mockReportMappingsFactory = (): ReportMappingCollection => {
89
74
  };
90
75
  };
91
76
 
92
- const mockMappingsFactory = (
93
- mockReportMappings: ReportMappingCollection
94
- ): MappingSingle[] => {
95
- const mockMappings: MappingSingle[] = mockReportMappings.mappings.map(
96
- (mapping, index) => ({
97
- mapping: {
98
- id: mapping.mappingId,
99
- mappingName: `mOcKMaPpIngNaMe${index}`,
100
- description: `mOcKmApPInGDeScRiPtIoN${index}`,
101
- extractionEnabled: false,
102
- createdOn: "",
103
- createdBy: "",
104
- modifiedOn: "",
105
- modifiedBy: "",
106
- _links: {
107
- imodel: {
108
- // Tie the mapping to to the iModel Id
109
- href: mapping.imodelId,
110
- },
77
+ const mockMappingsFactory = (mockReportMappings: ReportMappingCollection): MappingContainer[] => {
78
+ const mockMappings: MappingContainer[] = mockReportMappings.mappings.map((mapping, index) => ({
79
+ mapping: {
80
+ id: mapping.mappingId,
81
+ mappingName: `mOcKMaPpIngNaMe${index}`,
82
+ description: `mOcKmApPInGDeScRiPtIoN${index}`,
83
+ extractionEnabled: false,
84
+ createdOn: "",
85
+ createdBy: "",
86
+ modifiedOn: "",
87
+ modifiedBy: "",
88
+ _links: {
89
+ iModel: {
90
+ // Tie the mapping to to the iModel Id
91
+ href: mapping.imodelId,
111
92
  },
112
93
  },
113
- })
114
- );
94
+ },
95
+ }));
115
96
 
116
97
  const extraMappingId = faker.datatype.uuid();
117
98
  const extraMappingName = "mOcKNaMeExTrA";
@@ -128,7 +109,7 @@ const mockMappingsFactory = (
128
109
  modifiedOn: "",
129
110
  modifiedBy: "",
130
111
  _links: {
131
- imodel: {
112
+ iModel: {
132
113
  href: "",
133
114
  },
134
115
  },
@@ -138,19 +119,18 @@ const mockMappingsFactory = (
138
119
  return mockMappings;
139
120
  };
140
121
 
141
- const mockReportMappingsAndMappingsFactory = (mockMappings: MappingSingle[], reportMappings: ReportMappingCollection): ReportMappingAndMapping[] => {
142
- const reportMappingsAndMapping =
143
- reportMappings.mappings.map((reportMapping) => {
144
- const mapping = mockMappings.find((x) => x.mapping.id === reportMapping.mappingId)!.mapping;
145
- const iModelName = mockProjectIModels.iModels.find((x) => x.id === reportMapping.imodelId)!.displayName;
146
- const reportMappingAndMapping: ReportMappingAndMapping = {
147
- ...reportMapping,
148
- iModelName,
149
- mappingName: mapping.mappingName,
150
- mappingDescription: mapping.description ?? "",
151
- };
152
- return reportMappingAndMapping;
153
- });
122
+ const mockReportMappingsAndMappingsFactory = (mockMappings: MappingContainer[], reportMappings: ReportMappingCollection): ReportMappingAndMapping[] => {
123
+ const reportMappingsAndMapping = reportMappings.mappings.map((reportMapping) => {
124
+ const mapping = mockMappings.find((x) => x.mapping.id === reportMapping.mappingId)!.mapping;
125
+ const iModelName = mockProjectIModels.iModels.find((x) => x.id === reportMapping.imodelId)!.displayName;
126
+ const reportMappingAndMapping: ReportMappingAndMapping = {
127
+ ...reportMapping,
128
+ iModelName,
129
+ mappingName: mapping.mappingName,
130
+ mappingDescription: mapping.description ?? "",
131
+ };
132
+ return reportMappingAndMapping;
133
+ });
154
134
  return reportMappingsAndMapping;
155
135
  };
156
136
 
@@ -172,12 +152,13 @@ const mockMappingsClient = moq.Mock.ofType<MappingsClient>();
172
152
  beforeAll(async () => {
173
153
  const localization = new EmptyLocalization();
174
154
  await ReportsConfigWidget.initialize(localization);
175
- mockIModelsClientOperations.setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId1 })))
155
+ mockIModelsClientOperations
156
+ .setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId1 })))
176
157
  .returns(async () => mockIModelsResponse[0].iModel);
177
- mockIModelsClientOperations.setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId2 })))
158
+ mockIModelsClientOperations
159
+ .setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId2 })))
178
160
  .returns(async () => mockIModelsResponse[1].iModel);
179
- mockIModelsClient.setup((x) => x.iModels)
180
- .returns(() => mockIModelsClientOperations.object);
161
+ mockIModelsClient.setup((x) => x.iModels).returns(() => mockIModelsClientOperations.object);
181
162
  mockReportsClient.setup(async (x) => x.createReportMapping(moq.It.isAny(), moq.It.isAny(), moq.It.isAny())).returns(mockCreateReportMapping);
182
163
  mockMappingsClient.setup(async (x) => x.getMappings(moq.It.isAny(), moq.It.isAny())).returns(mockGetMappings);
183
164
  });
@@ -193,7 +174,7 @@ describe("Add Mapping Modal", () => {
193
174
  const mockMappings = mockMappingsFactory(mockReportMappings);
194
175
  const mockReportMappingsAndMappings = mockReportMappingsAndMappingsFactory(mockMappings, mockReportMappings);
195
176
 
196
- mockGetMappings.mockReturnValueOnce(mockMappings.map((m: MappingSingle) => m.mapping));
177
+ mockGetMappings.mockReturnValueOnce({ mappings: mockMappings.map((m: MappingContainer) => m.mapping) });
197
178
 
198
179
  const { user } = render(
199
180
  <AddMappingsModal
@@ -202,7 +183,8 @@ describe("Add Mapping Modal", () => {
202
183
  existingMappings={mockReportMappingsAndMappings}
203
184
  onClose={jest.fn()}
204
185
  defaultIModelId={mockIModelId1}
205
- />, { iTwinId: mockITwinId, reportsClient: mockReportsClient.object, mappingsClient: mockMappingsClient.object, iModelsClient: mockIModelsClient.object }
186
+ />,
187
+ { iTwinId: mockITwinId, reportsClient: mockReportsClient.object, mappingsClient: mockMappingsClient.object, iModelsClient: mockIModelsClient.object },
206
188
  );
207
189
 
208
190
  expect(screen.getByRole("dialog")).toBeInTheDocument();
@@ -219,10 +201,7 @@ describe("Add Mapping Modal", () => {
219
201
  // Already mapped mappings are disabled
220
202
  for (let i = 0; i < mockMappings.length - 1; i++) {
221
203
  const row = screen.getByRole("row", {
222
- name: new RegExp(
223
- `${mockMappings[i].mapping.mappingName} ${mockMappings[i].mapping.description}`,
224
- "i"
225
- ),
204
+ name: new RegExp(`${mockMappings[i].mapping.mappingName} ${mockMappings[i].mapping.description}`, "i"),
226
205
  });
227
206
 
228
207
  const checkbox = within(row).getByRole("checkbox");
@@ -231,11 +210,7 @@ describe("Add Mapping Modal", () => {
231
210
 
232
211
  // Click on checkbox on new mapping
233
212
  const unmappedRow = screen.getByRole("row", {
234
- name: new RegExp(
235
- `${mockMappings[mockMappings.length - 1].mapping.mappingName
236
- } ${mockMappings[mockMappings.length - 1].mapping.description}`,
237
- "i"
238
- ),
213
+ name: new RegExp(`${mockMappings[mockMappings.length - 1].mapping.mappingName} ${mockMappings[mockMappings.length - 1].mapping.description}`, "i"),
239
214
  });
240
215
 
241
216
  const enabledCheckbox = within(unmappedRow).getByRole("checkbox");
@@ -1,13 +1,14 @@
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
- *--------------------------------------------------------------------------------------------*/
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
5
  import { BulkExtractor } from "../widget/components/BulkExtractor";
6
6
  import { ExtractionStates } from "../widget/components/ExtractionStatus";
7
7
  import { assert } from "chai";
8
8
  import * as moq from "typemoq";
9
- import { ExtractionClient, ExtractorState, ReportsClient } from "@itwin/insights-client";
9
+ import { ExtractionClient, ExtractionState, ReportsClient } from "@itwin/insights-client";
10
10
  import type { AccessToken } from "@itwin/core-bentley";
11
+ import type { ExtractionRequestDetails } from "@itwin/insights-client";
11
12
 
12
13
  jest.mock("../widget/components/Constants.ts", () => ({
13
14
  STATUS_CHECK_INTERVAL: -1,
@@ -18,9 +19,9 @@ jest.mock("../widget/components/ExtractionToast.tsx", () => ({
18
19
  SuccessfulExtractionToast: jest.fn(),
19
20
  }));
20
21
 
21
- const mockRunExtraction = moq.Mock.ofType<(accessToken: AccessToken, iModelId: string) => Promise<{ id: string }>>();
22
- const mockGetStatus = moq.Mock.ofType<(accessToken: AccessToken, jobId: string) => Promise<{ state: ExtractorState }>>();
23
- const mockGetReportMappings = moq.Mock.ofType<(accessToken: AccessToken, reportId: string) => Promise<{ imodelId: string }[]>>();
22
+ const mockRunExtraction = moq.Mock.ofType<(accessToken: AccessToken, extractionRequest: ExtractionRequestDetails) => Promise<{ id: string }>>();
23
+ const mockGetStatus = moq.Mock.ofType<(accessToken: AccessToken, jobId: string) => Promise<{ state: ExtractionState }>>();
24
+ const mockGetReportMappings = moq.Mock.ofType<(accessToken: AccessToken, reportId: string) => Promise<{ imodelId: string; mappingId: string }[]>>();
24
25
 
25
26
  jest.mock("@itwin/insights-client", () => ({
26
27
  ...jest.requireActual("@itwin/insights-client"),
@@ -47,9 +48,18 @@ const mockIModelId1 = "mockIModelId1";
47
48
  const mockReportId = "mockReportId";
48
49
  const mockRunId = "mockRunId";
49
50
  const mockRunId1 = "mockRunId1";
51
+ const mockMappingId = "mockMappingId";
52
+ const mockMappingId1 = "mockMappingId1";
53
+ const mockExtractionRequest = {
54
+ mappings: [{ id: mockMappingId }],
55
+ iModelId: mockIModelId,
56
+ };
57
+ const mockExtractionRequest1 = {
58
+ mappings: [{ id: mockMappingId1 }],
59
+ iModelId: mockIModelId1,
60
+ };
50
61
 
51
62
  describe("BulkExtractor", () => {
52
-
53
63
  it("should return status none for unknown iModel", async () => {
54
64
  const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
55
65
  const result = await sut.getIModelState(mockIModelId, "", "");
@@ -57,54 +67,38 @@ describe("BulkExtractor", () => {
57
67
  });
58
68
 
59
69
  it("should return running status for started extraction", async () => {
60
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(
61
- async () => ({ id: mockRunId })
62
- );
70
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest)).returns(async () => ({ id: mockRunId }));
63
71
 
64
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
65
- async () => ({ state: ExtractorState.Running })
66
- );
72
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Running }));
67
73
 
68
74
  const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
69
- await sut.runIModelExtraction(mockIModelId);
75
+ await sut.runIModelExtraction(mockExtractionRequest);
70
76
  const result = await sut.getIModelState(mockIModelId, "", "");
71
77
  assert.strictEqual(result, ExtractionStates.Running);
72
78
  });
73
79
 
74
80
  it("should return failed status for failed extraction", async () => {
75
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(
76
- async () => ({ id: mockRunId })
77
- );
81
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest)).returns(async () => ({ id: mockRunId }));
78
82
 
79
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
80
- async () => ({ state: ExtractorState.Failed })
81
- );
83
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Failed }));
82
84
 
83
85
  const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
84
- await sut.runIModelExtraction(mockIModelId);
86
+ await sut.runIModelExtraction(mockExtractionRequest);
85
87
  const result = await sut.getIModelState(mockIModelId, "", "");
86
88
  assert.strictEqual(result, ExtractionStates.Failed);
87
89
  });
88
90
 
89
91
  it("full status check cycle", async () => {
90
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(
91
- async () => ({ id: mockRunId })
92
- );
92
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest)).returns(async () => ({ id: mockRunId }));
93
93
 
94
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
95
- async () => ({ state: ExtractorState.Queued })
96
- );
94
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Queued }));
97
95
 
98
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
99
- async () => ({ state: ExtractorState.Running })
100
- );
96
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Running }));
101
97
 
102
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
103
- async () => ({ state: ExtractorState.Succeeded })
104
- );
98
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Succeeded }));
105
99
 
106
100
  const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
107
- await sut.runIModelExtraction(mockIModelId);
101
+ await sut.runIModelExtraction(mockExtractionRequest);
108
102
 
109
103
  let result = await sut.getIModelState(mockIModelId, "", "");
110
104
  assert.strictEqual(result, ExtractionStates.Queued);
@@ -117,27 +111,19 @@ describe("BulkExtractor", () => {
117
111
  });
118
112
 
119
113
  it("two started jobs should return status", async () => {
120
- const mockIModelIds = [mockIModelId, mockIModelId1];
114
+ const mockExtractionRequests = [mockExtractionRequest, mockExtractionRequest1];
121
115
 
122
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(
123
- async () => ({ id: mockRunId })
124
- );
116
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest)).returns(async () => ({ id: mockRunId }));
125
117
 
126
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(
127
- async () => ({ id: mockRunId1 })
128
- );
118
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest1)).returns(async () => ({ id: mockRunId1 }));
129
119
 
130
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
131
- async () => ({ state: ExtractorState.Queued })
132
- );
120
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Queued }));
133
121
 
134
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(
135
- async () => ({ state: ExtractorState.Queued })
136
- );
122
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(async () => ({ state: ExtractionState.Queued }));
137
123
 
138
124
  const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
139
125
 
140
- await sut.runIModelExtractions(mockIModelIds);
126
+ await sut.runIModelExtractions(mockExtractionRequests);
141
127
 
142
128
  const result1 = await sut.getIModelState(mockIModelId, "", "");
143
129
  const result2 = await sut.getIModelState(mockIModelId1, "", "");
@@ -153,17 +139,11 @@ describe("BulkExtractor", () => {
153
139
  });
154
140
 
155
141
  it("should return status running for running report", async () => {
156
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(
157
- async () => ({ id: mockRunId })
158
- );
142
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest)).returns(async () => ({ id: mockRunId }));
159
143
 
160
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
161
- async () => ({ state: ExtractorState.Running })
162
- );
144
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Running }));
163
145
 
164
- mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(
165
- async () => ([{ imodelId: mockIModelId }])
166
- );
146
+ mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(async () => [{ imodelId: mockIModelId, mappingId: mockMappingId }]);
167
147
 
168
148
  const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
169
149
 
@@ -174,25 +154,20 @@ describe("BulkExtractor", () => {
174
154
  });
175
155
 
176
156
  it("should return status running for both iModels in report", async () => {
177
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(
178
- async () => ({ id: mockRunId })
179
- );
157
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest)).returns(async () => ({ id: mockRunId }));
180
158
 
181
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(
182
- async () => ({ id: mockRunId1 })
183
- );
159
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest1)).returns(async () => ({ id: mockRunId1 }));
184
160
 
185
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
186
- async () => ({ state: ExtractorState.Running })
187
- );
161
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Running }));
188
162
 
189
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(
190
- async () => ({ state: ExtractorState.Running })
191
- );
163
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(async () => ({ state: ExtractionState.Running }));
192
164
 
193
- mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(
194
- async () => ([{ imodelId: mockIModelId }, { imodelId: mockIModelId1 }])
195
- );
165
+ mockGetReportMappings
166
+ .setup(async (x) => x(moq.It.isAny(), mockReportId))
167
+ .returns(async () => [
168
+ { imodelId: mockIModelId, mappingId: mockMappingId },
169
+ { imodelId: mockIModelId1, mappingId: mockMappingId1 },
170
+ ]);
196
171
 
197
172
  const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
198
173
 
@@ -206,25 +181,20 @@ describe("BulkExtractor", () => {
206
181
  });
207
182
 
208
183
  it("should return lowest progress status for extractions in report", async () => {
209
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(
210
- async () => ({ id: mockRunId })
211
- );
184
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest)).returns(async () => ({ id: mockRunId }));
212
185
 
213
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(
214
- async () => ({ id: mockRunId1 })
215
- );
186
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest1)).returns(async () => ({ id: mockRunId1 }));
216
187
 
217
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
218
- async () => ({ state: ExtractorState.Running })
219
- );
188
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Running }));
220
189
 
221
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(
222
- async () => ({ state: ExtractorState.Queued })
223
- );
190
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(async () => ({ state: ExtractionState.Queued }));
224
191
 
225
- mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(
226
- async () => ([{ imodelId: mockIModelId }, { imodelId: mockIModelId1 }])
227
- );
192
+ mockGetReportMappings
193
+ .setup(async (x) => x(moq.It.isAny(), mockReportId))
194
+ .returns(async () => [
195
+ { imodelId: mockIModelId, mappingId: mockMappingId },
196
+ { imodelId: mockIModelId1, mappingId: mockMappingId1 },
197
+ ]);
228
198
 
229
199
  const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
230
200
 
@@ -235,25 +205,20 @@ describe("BulkExtractor", () => {
235
205
  });
236
206
 
237
207
  it("should return status failed if one of the extractions in report failed", async () => {
238
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(
239
- async () => ({ id: mockRunId })
240
- );
208
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest)).returns(async () => ({ id: mockRunId }));
241
209
 
242
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(
243
- async () => ({ id: mockRunId1 })
244
- );
210
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest1)).returns(async () => ({ id: mockRunId1 }));
245
211
 
246
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
247
- async () => ({ state: ExtractorState.Succeeded })
248
- );
212
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Succeeded }));
249
213
 
250
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(
251
- async () => ({ state: ExtractorState.Failed })
252
- );
214
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(async () => ({ state: ExtractionState.Failed }));
253
215
 
254
- mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(
255
- async () => ([{ imodelId: mockIModelId1 }, { imodelId: mockIModelId1 }])
256
- );
216
+ mockGetReportMappings
217
+ .setup(async (x) => x(moq.It.isAny(), mockReportId))
218
+ .returns(async () => [
219
+ { imodelId: mockIModelId, mappingId: mockMappingId },
220
+ { imodelId: mockIModelId1, mappingId: mockMappingId1 },
221
+ ]);
257
222
 
258
223
  const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
259
224
 
@@ -264,25 +229,15 @@ describe("BulkExtractor", () => {
264
229
  });
265
230
 
266
231
  it("full report extraction status check cycle", async () => {
267
- mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(
268
- async () => ({ id: mockRunId })
269
- );
232
+ mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockExtractionRequest)).returns(async () => ({ id: mockRunId }));
270
233
 
271
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
272
- async () => ({ state: ExtractorState.Queued })
273
- );
234
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Queued }));
274
235
 
275
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
276
- async () => ({ state: ExtractorState.Running })
277
- );
236
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Running }));
278
237
 
279
- mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(
280
- async () => ({ state: ExtractorState.Succeeded })
281
- );
238
+ mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractionState.Succeeded }));
282
239
 
283
- mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(
284
- async () => ([{ imodelId: mockIModelId }])
285
- );
240
+ mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(async () => [{ imodelId: mockIModelId, mappingId: mockMappingId }]);
286
241
 
287
242
  const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
288
243
  await sut.runReportExtractions([mockReportId]);
@@ -1,13 +1,10 @@
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
- *--------------------------------------------------------------------------------------------*/
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
5
  import React from "react";
6
6
  import "@testing-library/jest-dom";
7
- import {
8
- render,
9
- screen,
10
- } from "./test-utils";
7
+ import { render, screen } from "./test-utils";
11
8
  import DeleteModal from "../widget/components/DeleteModal";
12
9
  import { ReportsConfigWidget } from "../ReportsConfigWidget";
13
10
  import { EmptyLocalization } from "@itwin/core-common";
@@ -19,27 +16,13 @@ beforeAll(async () => {
19
16
 
20
17
  describe("Delete modal", () => {
21
18
  it("should render", () => {
22
- const { container } = render(
23
- <DeleteModal
24
- entityName="test"
25
- onDelete={jest.fn()}
26
- refresh={jest.fn()}
27
- onClose={jest.fn()}
28
- />
29
- );
19
+ const { container } = render(<DeleteModal entityName="test" onDelete={jest.fn()} refresh={jest.fn()} onClose={jest.fn()} />);
30
20
  expect(container).toBeTruthy();
31
21
  });
32
22
 
33
23
  it("should call onDelete when delete button is clicked", async () => {
34
24
  const onDelete = jest.fn();
35
- const { user } = render(
36
- <DeleteModal
37
- entityName="test"
38
- onDelete={onDelete}
39
- refresh={jest.fn()}
40
- onClose={jest.fn()}
41
- />
42
- );
25
+ const { user } = render(<DeleteModal entityName="test" onDelete={onDelete} refresh={jest.fn()} onClose={jest.fn()} />);
43
26
  const deleteButton = screen.getByRole("button", {
44
27
  name: /delete/i,
45
28
  });