@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.
- package/CHANGELOG.json +47 -1
- package/CHANGELOG.md +14 -2
- package/LICENSE.md +9 -9
- package/README.md +38 -38
- package/__mocks__/fileMock.js +4 -4
- package/api/reports-config-widget-react.api.md +130 -0
- package/api/reports-config-widget-react.exports.csv +14 -0
- package/api/temp/reports-config-widget-react.api.md +130 -0
- package/coverage/clover.xml +505 -504
- package/coverage/coverage-final.json +32 -32
- package/coverage/lcov-report/index.html +24 -24
- package/coverage/lcov-report/src/ReportsConfigWidget.ts.html +15 -15
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/test/index.html +11 -11
- package/coverage/lcov-report/src/test/test-utils.tsx.html +46 -16
- package/coverage/lcov-report/src/widget/ReportsConfigUiProvider.tsx.html +22 -64
- package/coverage/lcov-report/src/widget/components/ActionPanel.tsx.html +5 -38
- package/coverage/lcov-report/src/widget/components/AddMappingsModal.tsx.html +23 -119
- package/coverage/lcov-report/src/widget/components/BulkExtractor.ts.html +117 -90
- package/coverage/lcov-report/src/widget/components/Constants.ts.html +5 -5
- package/coverage/lcov-report/src/widget/components/DeleteModal.tsx.html +13 -103
- package/coverage/lcov-report/src/widget/components/ExtractionStates/FailedExtractionState.tsx.html +6 -21
- package/coverage/lcov-report/src/widget/components/ExtractionStates/QueuedExtractionState.tsx.html +6 -21
- package/coverage/lcov-report/src/widget/components/ExtractionStates/RunningExtractionState.tsx.html +7 -22
- package/coverage/lcov-report/src/widget/components/ExtractionStates/StartingExtractionState.tsx.html +7 -28
- package/coverage/lcov-report/src/widget/components/ExtractionStates/SucceededExtractionState.tsx.html +6 -21
- package/coverage/lcov-report/src/widget/components/ExtractionStates/index.html +1 -1
- package/coverage/lcov-report/src/widget/components/ExtractionStatus.tsx.html +20 -47
- package/coverage/lcov-report/src/widget/components/ExtractionToast.tsx.html +20 -11
- package/coverage/lcov-report/src/widget/components/HorizontalTile.tsx.html +16 -79
- package/coverage/lcov-report/src/widget/components/LocalizedTablePaginator.tsx.html +15 -108
- package/coverage/lcov-report/src/widget/components/ReportAction.tsx.html +36 -75
- package/coverage/lcov-report/src/widget/components/ReportHorizontalTile.tsx.html +62 -92
- package/coverage/lcov-report/src/widget/components/ReportMappingHorizontalTile.tsx.html +104 -128
- package/coverage/lcov-report/src/widget/components/ReportMappings.tsx.html +86 -299
- package/coverage/lcov-report/src/widget/components/Reports.tsx.html +40 -202
- package/coverage/lcov-report/src/widget/components/ReportsConfigContext.tsx.html +59 -44
- package/coverage/lcov-report/src/widget/components/ReportsContainer.tsx.html +10 -49
- package/coverage/lcov-report/src/widget/components/ReportsHeader.tsx.html +8 -47
- package/coverage/lcov-report/src/widget/components/ReportsRouter.tsx.html +6 -12
- package/coverage/lcov-report/src/widget/components/SearchBar.tsx.html +13 -25
- package/coverage/lcov-report/src/widget/components/SelectIModel.tsx.html +11 -56
- package/coverage/lcov-report/src/widget/components/index.html +50 -50
- package/coverage/lcov-report/src/widget/components/utils.tsx.html +25 -169
- package/coverage/lcov-report/src/widget/context/BulkExtractorContext.tsx.html +6 -12
- package/coverage/lcov-report/src/widget/context/ReportsConfigApiContext.tsx.html +6 -12
- package/coverage/lcov-report/src/widget/context/index.html +1 -1
- package/coverage/lcov-report/src/widget/hooks/index.html +1 -1
- package/coverage/lcov-report/src/widget/hooks/useValidator.ts.html +12 -54
- package/coverage/lcov-report/src/widget/index.html +1 -1
- package/coverage/lcov.info +917 -893
- package/jest.config.js +14 -17
- package/lib/cjs/ReportsConfigWidget.d.ts +4 -0
- package/lib/cjs/ReportsConfigWidget.d.ts.map +1 -1
- package/lib/cjs/ReportsConfigWidget.js +4 -0
- package/lib/cjs/ReportsConfigWidget.js.map +1 -1
- package/lib/cjs/reports-config-widget-react.js +3 -3
- package/lib/cjs/reports-config-widget-react.js.map +1 -1
- package/lib/cjs/test/AddMappingModal.test.js +11 -10
- package/lib/cjs/test/AddMappingModal.test.js.map +1 -1
- package/lib/cjs/test/BulkExtractor.test.js +68 -43
- package/lib/cjs/test/BulkExtractor.test.js.map +1 -1
- package/lib/cjs/test/DeleteModal.test.js +3 -3
- package/lib/cjs/test/DeleteModal.test.js.map +1 -1
- package/lib/cjs/test/ReportAction.test.js +6 -4
- package/lib/cjs/test/ReportAction.test.js.map +1 -1
- package/lib/cjs/test/ReportMappingHorizontalTile.test.js +64 -25
- package/lib/cjs/test/ReportMappingHorizontalTile.test.js.map +1 -1
- package/lib/cjs/test/ReportMappings.test.js +39 -18
- package/lib/cjs/test/ReportMappings.test.js.map +1 -1
- package/lib/cjs/test/Reports.test.js +3 -3
- package/lib/cjs/test/Reports.test.js.map +1 -1
- package/lib/cjs/test/WidgetHeader.test.js +3 -3
- package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
- package/lib/cjs/test/test-utils.d.ts +8 -0
- package/lib/cjs/test/test-utils.d.ts.map +1 -1
- package/lib/cjs/test/test-utils.js +16 -4
- package/lib/cjs/test/test-utils.js.map +1 -1
- package/lib/cjs/tsconfig.tsbuildinfo +1 -1
- package/lib/cjs/widget/ReportsConfigUiProvider.d.ts +7 -0
- package/lib/cjs/widget/ReportsConfigUiProvider.d.ts.map +1 -1
- package/lib/cjs/widget/ReportsConfigUiProvider.js +8 -3
- package/lib/cjs/widget/ReportsConfigUiProvider.js.map +1 -1
- package/lib/cjs/widget/components/ActionPanel.d.ts.map +1 -1
- package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
- package/lib/cjs/widget/components/AddMappingsModal.d.ts +1 -1
- package/lib/cjs/widget/components/AddMappingsModal.d.ts.map +1 -1
- package/lib/cjs/widget/components/AddMappingsModal.js +7 -7
- package/lib/cjs/widget/components/AddMappingsModal.js.map +1 -1
- package/lib/cjs/widget/components/AddMappingsModal.scss +1 -1
- package/lib/cjs/widget/components/BulkExtractor.d.ts +7 -4
- package/lib/cjs/widget/components/BulkExtractor.d.ts.map +1 -1
- package/lib/cjs/widget/components/BulkExtractor.js +52 -35
- package/lib/cjs/widget/components/BulkExtractor.js.map +1 -1
- package/lib/cjs/widget/components/Constants.d.ts.map +1 -1
- package/lib/cjs/widget/components/Constants.js +3 -3
- package/lib/cjs/widget/components/Constants.js.map +1 -1
- package/lib/cjs/widget/components/DeleteModal.d.ts +1 -1
- package/lib/cjs/widget/components/DeleteModal.d.ts.map +1 -1
- package/lib/cjs/widget/components/DeleteModal.js +5 -5
- package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
- package/lib/cjs/widget/components/DeleteModal.scss +2 -2
- package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.d.ts.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.js +3 -3
- package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.js.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.d.ts.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.js +3 -3
- package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.js.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.d.ts.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.js +3 -3
- package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.js.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.d.ts.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.js +3 -3
- package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.js.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.d.ts.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.js +3 -3
- package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.js.map +1 -1
- package/lib/cjs/widget/components/ExtractionStatus.d.ts +1 -1
- package/lib/cjs/widget/components/ExtractionStatus.d.ts.map +1 -1
- package/lib/cjs/widget/components/ExtractionStatus.js +9 -9
- package/lib/cjs/widget/components/ExtractionStatus.js.map +1 -1
- package/lib/cjs/widget/components/ExtractionStatus.scss +1 -1
- package/lib/cjs/widget/components/ExtractionToast.d.ts.map +1 -1
- package/lib/cjs/widget/components/ExtractionToast.js +3 -3
- package/lib/cjs/widget/components/ExtractionToast.js.map +1 -1
- package/lib/cjs/widget/components/HorizontalTile.d.ts.map +1 -1
- package/lib/cjs/widget/components/HorizontalTile.js +1 -2
- package/lib/cjs/widget/components/HorizontalTile.js.map +1 -1
- package/lib/cjs/widget/components/HorizontalTile.scss +1 -4
- package/lib/cjs/widget/components/LocalizedTablePaginator.d.ts.map +1 -1
- package/lib/cjs/widget/components/LocalizedTablePaginator.js +1 -1
- package/lib/cjs/widget/components/LocalizedTablePaginator.js.map +1 -1
- package/lib/cjs/widget/components/ReportAction.d.ts +8 -0
- package/lib/cjs/widget/components/ReportAction.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportAction.js +9 -7
- package/lib/cjs/widget/components/ReportAction.js.map +1 -1
- package/lib/cjs/widget/components/ReportAction.scss +1 -1
- package/lib/cjs/widget/components/ReportHorizontalTile.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportHorizontalTile.js +4 -4
- package/lib/cjs/widget/components/ReportHorizontalTile.js.map +1 -1
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.js +46 -45
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.js.map +1 -1
- package/lib/cjs/widget/components/ReportMappings.d.ts +8 -0
- package/lib/cjs/widget/components/ReportMappings.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportMappings.js +25 -11
- package/lib/cjs/widget/components/ReportMappings.js.map +1 -1
- package/lib/cjs/widget/components/Reports.d.ts +9 -1
- package/lib/cjs/widget/components/Reports.d.ts.map +1 -1
- package/lib/cjs/widget/components/Reports.js +7 -8
- package/lib/cjs/widget/components/Reports.js.map +1 -1
- package/lib/cjs/widget/components/Reports.scss +0 -1
- package/lib/cjs/widget/components/ReportsConfigContext.d.ts +8 -0
- package/lib/cjs/widget/components/ReportsConfigContext.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportsConfigContext.js +13 -5
- package/lib/cjs/widget/components/ReportsConfigContext.js.map +1 -1
- package/lib/cjs/widget/components/ReportsContainer.d.ts +1 -1
- package/lib/cjs/widget/components/ReportsContainer.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportsContainer.js +2 -4
- package/lib/cjs/widget/components/ReportsContainer.js.map +1 -1
- package/lib/cjs/widget/components/ReportsContainer.scss +1 -1
- package/lib/cjs/widget/components/ReportsHeader.d.ts +1 -1
- package/lib/cjs/widget/components/ReportsHeader.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportsHeader.js +6 -7
- package/lib/cjs/widget/components/ReportsHeader.js.map +1 -1
- package/lib/cjs/widget/components/ReportsRouter.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportsRouter.js +3 -3
- package/lib/cjs/widget/components/ReportsRouter.js.map +1 -1
- package/lib/cjs/widget/components/SearchBar.d.ts +1 -1
- package/lib/cjs/widget/components/SearchBar.d.ts.map +1 -1
- package/lib/cjs/widget/components/SearchBar.js +4 -4
- package/lib/cjs/widget/components/SearchBar.js.map +1 -1
- package/lib/cjs/widget/components/SelectIModel.d.ts +1 -1
- package/lib/cjs/widget/components/SelectIModel.d.ts.map +1 -1
- package/lib/cjs/widget/components/SelectIModel.js +1 -1
- package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
- package/lib/cjs/widget/components/SelectIModel.scss +1 -1
- package/lib/cjs/widget/components/utils.d.ts +1 -1
- package/lib/cjs/widget/components/utils.d.ts.map +1 -1
- package/lib/cjs/widget/components/utils.js +5 -5
- package/lib/cjs/widget/components/utils.js.map +1 -1
- package/lib/cjs/widget/components/utils.scss +1 -1
- package/lib/cjs/widget/context/BulkExtractorContext.d.ts.map +1 -1
- package/lib/cjs/widget/context/BulkExtractorContext.js.map +1 -1
- package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts.map +1 -1
- package/lib/cjs/widget/context/ReportsConfigApiContext.js.map +1 -1
- package/lib/cjs/widget/hooks/useValidator.d.ts +1 -4
- package/lib/cjs/widget/hooks/useValidator.d.ts.map +1 -1
- package/lib/cjs/widget/hooks/useValidator.js +3 -3
- package/lib/cjs/widget/hooks/useValidator.js.map +1 -1
- package/lib/esm/ReportsConfigWidget.d.ts +4 -0
- package/lib/esm/ReportsConfigWidget.d.ts.map +1 -1
- package/lib/esm/ReportsConfigWidget.js +4 -0
- package/lib/esm/ReportsConfigWidget.js.map +1 -1
- package/lib/esm/reports-config-widget-react.js +3 -3
- package/lib/esm/reports-config-widget-react.js.map +1 -1
- package/lib/esm/test/AddMappingModal.test.js +12 -11
- package/lib/esm/test/AddMappingModal.test.js.map +1 -1
- package/lib/esm/test/BulkExtractor.test.js +69 -44
- package/lib/esm/test/BulkExtractor.test.js.map +1 -1
- package/lib/esm/test/DeleteModal.test.js +4 -4
- package/lib/esm/test/DeleteModal.test.js.map +1 -1
- package/lib/esm/test/ReportAction.test.js +7 -5
- package/lib/esm/test/ReportAction.test.js.map +1 -1
- package/lib/esm/test/ReportMappingHorizontalTile.test.js +65 -26
- package/lib/esm/test/ReportMappingHorizontalTile.test.js.map +1 -1
- package/lib/esm/test/ReportMappings.test.js +41 -20
- package/lib/esm/test/ReportMappings.test.js.map +1 -1
- package/lib/esm/test/Reports.test.js +4 -4
- package/lib/esm/test/Reports.test.js.map +1 -1
- package/lib/esm/test/WidgetHeader.test.js +3 -3
- package/lib/esm/test/WidgetHeader.test.js.map +1 -1
- package/lib/esm/test/test-utils.d.ts +8 -0
- package/lib/esm/test/test-utils.d.ts.map +1 -1
- package/lib/esm/test/test-utils.js +15 -3
- package/lib/esm/test/test-utils.js.map +1 -1
- package/lib/esm/tsconfig.tsbuildinfo +1 -1
- package/lib/esm/widget/ReportsConfigUiProvider.d.ts +7 -0
- package/lib/esm/widget/ReportsConfigUiProvider.d.ts.map +1 -1
- package/lib/esm/widget/ReportsConfigUiProvider.js +9 -4
- package/lib/esm/widget/ReportsConfigUiProvider.js.map +1 -1
- package/lib/esm/widget/components/ActionPanel.d.ts.map +1 -1
- package/lib/esm/widget/components/ActionPanel.js.map +1 -1
- package/lib/esm/widget/components/AddMappingsModal.d.ts +1 -1
- package/lib/esm/widget/components/AddMappingsModal.d.ts.map +1 -1
- package/lib/esm/widget/components/AddMappingsModal.js +7 -7
- package/lib/esm/widget/components/AddMappingsModal.js.map +1 -1
- package/lib/esm/widget/components/AddMappingsModal.scss +1 -1
- package/lib/esm/widget/components/BulkExtractor.d.ts +7 -4
- package/lib/esm/widget/components/BulkExtractor.d.ts.map +1 -1
- package/lib/esm/widget/components/BulkExtractor.js +53 -36
- package/lib/esm/widget/components/BulkExtractor.js.map +1 -1
- package/lib/esm/widget/components/Constants.d.ts.map +1 -1
- package/lib/esm/widget/components/Constants.js +3 -3
- package/lib/esm/widget/components/Constants.js.map +1 -1
- package/lib/esm/widget/components/DeleteModal.d.ts +1 -1
- package/lib/esm/widget/components/DeleteModal.d.ts.map +1 -1
- package/lib/esm/widget/components/DeleteModal.js +6 -6
- package/lib/esm/widget/components/DeleteModal.js.map +1 -1
- package/lib/esm/widget/components/DeleteModal.scss +2 -2
- package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.d.ts.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.js +3 -3
- package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.js.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.d.ts.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.js +3 -3
- package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.js.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.d.ts.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.js +3 -3
- package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.js.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.d.ts.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.js +3 -3
- package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.js.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.d.ts.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.js +3 -3
- package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.js.map +1 -1
- package/lib/esm/widget/components/ExtractionStatus.d.ts +1 -1
- package/lib/esm/widget/components/ExtractionStatus.d.ts.map +1 -1
- package/lib/esm/widget/components/ExtractionStatus.js +9 -9
- package/lib/esm/widget/components/ExtractionStatus.js.map +1 -1
- package/lib/esm/widget/components/ExtractionStatus.scss +1 -1
- package/lib/esm/widget/components/ExtractionToast.d.ts.map +1 -1
- package/lib/esm/widget/components/ExtractionToast.js +3 -3
- package/lib/esm/widget/components/ExtractionToast.js.map +1 -1
- package/lib/esm/widget/components/HorizontalTile.d.ts.map +1 -1
- package/lib/esm/widget/components/HorizontalTile.js +1 -2
- package/lib/esm/widget/components/HorizontalTile.js.map +1 -1
- package/lib/esm/widget/components/HorizontalTile.scss +1 -4
- package/lib/esm/widget/components/LocalizedTablePaginator.d.ts.map +1 -1
- package/lib/esm/widget/components/LocalizedTablePaginator.js +1 -1
- package/lib/esm/widget/components/LocalizedTablePaginator.js.map +1 -1
- package/lib/esm/widget/components/ReportAction.d.ts +8 -0
- package/lib/esm/widget/components/ReportAction.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportAction.js +10 -8
- package/lib/esm/widget/components/ReportAction.js.map +1 -1
- package/lib/esm/widget/components/ReportAction.scss +1 -1
- package/lib/esm/widget/components/ReportHorizontalTile.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportHorizontalTile.js +6 -6
- package/lib/esm/widget/components/ReportHorizontalTile.js.map +1 -1
- package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportMappingHorizontalTile.js +47 -46
- package/lib/esm/widget/components/ReportMappingHorizontalTile.js.map +1 -1
- package/lib/esm/widget/components/ReportMappings.d.ts +8 -0
- package/lib/esm/widget/components/ReportMappings.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportMappings.js +28 -14
- package/lib/esm/widget/components/ReportMappings.js.map +1 -1
- package/lib/esm/widget/components/Reports.d.ts +9 -1
- package/lib/esm/widget/components/Reports.d.ts.map +1 -1
- package/lib/esm/widget/components/Reports.js +8 -9
- package/lib/esm/widget/components/Reports.js.map +1 -1
- package/lib/esm/widget/components/Reports.scss +0 -1
- package/lib/esm/widget/components/ReportsConfigContext.d.ts +8 -0
- package/lib/esm/widget/components/ReportsConfigContext.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportsConfigContext.js +14 -6
- package/lib/esm/widget/components/ReportsConfigContext.js.map +1 -1
- package/lib/esm/widget/components/ReportsContainer.d.ts +1 -1
- package/lib/esm/widget/components/ReportsContainer.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportsContainer.js +2 -4
- package/lib/esm/widget/components/ReportsContainer.js.map +1 -1
- package/lib/esm/widget/components/ReportsContainer.scss +1 -1
- package/lib/esm/widget/components/ReportsHeader.d.ts +1 -1
- package/lib/esm/widget/components/ReportsHeader.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportsHeader.js +6 -7
- package/lib/esm/widget/components/ReportsHeader.js.map +1 -1
- package/lib/esm/widget/components/ReportsRouter.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportsRouter.js +3 -3
- package/lib/esm/widget/components/ReportsRouter.js.map +1 -1
- package/lib/esm/widget/components/SearchBar.d.ts +1 -1
- package/lib/esm/widget/components/SearchBar.d.ts.map +1 -1
- package/lib/esm/widget/components/SearchBar.js +4 -4
- package/lib/esm/widget/components/SearchBar.js.map +1 -1
- package/lib/esm/widget/components/SelectIModel.d.ts +1 -1
- package/lib/esm/widget/components/SelectIModel.d.ts.map +1 -1
- package/lib/esm/widget/components/SelectIModel.js +2 -2
- package/lib/esm/widget/components/SelectIModel.js.map +1 -1
- package/lib/esm/widget/components/SelectIModel.scss +1 -1
- package/lib/esm/widget/components/utils.d.ts +1 -1
- package/lib/esm/widget/components/utils.d.ts.map +1 -1
- package/lib/esm/widget/components/utils.js +6 -6
- package/lib/esm/widget/components/utils.js.map +1 -1
- package/lib/esm/widget/components/utils.scss +1 -1
- package/lib/esm/widget/context/BulkExtractorContext.d.ts.map +1 -1
- package/lib/esm/widget/context/BulkExtractorContext.js.map +1 -1
- package/lib/esm/widget/context/ReportsConfigApiContext.d.ts.map +1 -1
- package/lib/esm/widget/context/ReportsConfigApiContext.js.map +1 -1
- package/lib/esm/widget/hooks/useValidator.d.ts +1 -4
- package/lib/esm/widget/hooks/useValidator.d.ts.map +1 -1
- package/lib/esm/widget/hooks/useValidator.js +3 -3
- package/lib/esm/widget/hooks/useValidator.js.map +1 -1
- package/package.json +9 -4
- package/src/ReportsConfigWidget.ts +9 -9
- package/src/reports-config-widget-react.ts +3 -3
- package/src/test/AddMappingModal.test.tsx +45 -70
- package/src/test/BulkExtractor.test.ts +73 -118
- package/src/test/DeleteModal.test.tsx +6 -23
- package/src/test/ReportAction.test.tsx +20 -38
- package/src/test/ReportMappingHorizontalTile.test.tsx +137 -106
- package/src/test/ReportMappings.test.tsx +73 -88
- package/src/test/Reports.test.tsx +30 -64
- package/src/test/WidgetHeader.test.tsx +3 -3
- package/src/test/test-utils.tsx +18 -8
- package/src/widget/ReportsConfigUiProvider.tsx +16 -30
- package/src/widget/components/ActionPanel.tsx +3 -14
- package/src/widget/components/AddMappingsModal.scss +1 -1
- package/src/widget/components/AddMappingsModal.tsx +19 -51
- package/src/widget/components/BulkExtractor.ts +63 -54
- package/src/widget/components/Constants.ts +4 -4
- package/src/widget/components/DeleteModal.scss +2 -2
- package/src/widget/components/DeleteModal.tsx +11 -41
- package/src/widget/components/ExtractionStates/FailedExtractionState.tsx +4 -9
- package/src/widget/components/ExtractionStates/QueuedExtractionState.tsx +4 -9
- package/src/widget/components/ExtractionStates/RunningExtractionState.tsx +4 -9
- package/src/widget/components/ExtractionStates/StartingExtractionState.tsx +4 -11
- package/src/widget/components/ExtractionStates/SucceededExtractionState.tsx +4 -9
- package/src/widget/components/ExtractionStatus.scss +1 -1
- package/src/widget/components/ExtractionStatus.tsx +9 -18
- package/src/widget/components/ExtractionToast.tsx +12 -9
- package/src/widget/components/HorizontalTile.scss +1 -4
- package/src/widget/components/HorizontalTile.tsx +12 -33
- package/src/widget/components/LocalizedTablePaginator.tsx +13 -44
- package/src/widget/components/ReportAction.scss +1 -1
- package/src/widget/components/ReportAction.tsx +26 -39
- package/src/widget/components/ReportHorizontalTile.tsx +45 -55
- package/src/widget/components/ReportMappingHorizontalTile.tsx +70 -78
- package/src/widget/components/ReportMappings.tsx +59 -130
- package/src/widget/components/Reports.scss +0 -1
- package/src/widget/components/Reports.tsx +28 -82
- package/src/widget/components/ReportsConfigContext.tsx +30 -25
- package/src/widget/components/ReportsContainer.scss +1 -1
- package/src/widget/components/ReportsContainer.tsx +8 -21
- package/src/widget/components/ReportsHeader.tsx +6 -19
- package/src/widget/components/ReportsRouter.tsx +4 -6
- package/src/widget/components/SearchBar.tsx +9 -13
- package/src/widget/components/SelectIModel.scss +1 -1
- package/src/widget/components/SelectIModel.tsx +9 -24
- package/src/widget/components/utils.scss +1 -1
- package/src/widget/components/utils.tsx +21 -69
- package/src/widget/context/BulkExtractorContext.tsx +4 -6
- package/src/widget/context/ReportsConfigApiContext.tsx +4 -6
- package/src/widget/hooks/useValidator.ts +10 -24
- 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.
|
|
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":
|
|
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.
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
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:
|
|
142
|
-
const reportMappingsAndMapping =
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
|
155
|
+
mockIModelsClientOperations
|
|
156
|
+
.setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId1 })))
|
|
176
157
|
.returns(async () => mockIModelsResponse[0].iModel);
|
|
177
|
-
mockIModelsClientOperations
|
|
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:
|
|
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
|
-
/>,
|
|
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,
|
|
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,
|
|
22
|
-
const mockGetStatus = moq.Mock.ofType<(accessToken: AccessToken, jobId: string) => Promise<{ state:
|
|
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(),
|
|
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(
|
|
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(),
|
|
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(
|
|
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(),
|
|
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(
|
|
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
|
|
114
|
+
const mockExtractionRequests = [mockExtractionRequest, mockExtractionRequest1];
|
|
121
115
|
|
|
122
|
-
mockRunExtraction.setup(async (x) => x(moq.It.isAny(),
|
|
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(),
|
|
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(
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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
|
|
194
|
-
async () => (
|
|
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(),
|
|
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(),
|
|
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
|
|
226
|
-
async () => (
|
|
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(),
|
|
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(),
|
|
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
|
|
255
|
-
async () => (
|
|
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(),
|
|
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
|
});
|