@itwin/reports-config-widget-react 0.2.1 → 0.4.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/.rush/temp/operation/rebuild/all.log +9 -0
- package/.rush/temp/operation/rebuild/state.json +3 -0
- package/.rush/temp/package-deps_rebuild.json +48 -44
- package/.rush/temp/shrinkwrap-deps.json +228 -207
- package/CHANGELOG.json +44 -0
- package/CHANGELOG.md +24 -1
- package/coverage/clover.xml +562 -542
- package/coverage/coverage-final.json +24 -20
- package/coverage/lcov-report/index.html +51 -51
- package/coverage/lcov-report/src/ReportsConfigWidget.ts.html +22 -22
- package/coverage/lcov-report/src/index.html +21 -21
- package/coverage/lcov-report/src/test/index.html +11 -11
- package/coverage/lcov-report/src/test/test-utils.tsx.html +20 -140
- package/coverage/lcov-report/src/widget/ReportsConfigUiProvider.tsx.html +14 -35
- package/coverage/lcov-report/src/widget/components/ActionPanel.tsx.html +26 -20
- package/coverage/lcov-report/src/widget/components/AddMappingsModal.tsx.html +94 -109
- package/coverage/lcov-report/src/widget/components/BulkExtractor.ts.html +55 -52
- package/coverage/lcov-report/src/widget/components/Constants.ts.html +1 -1
- package/coverage/lcov-report/src/widget/components/DeleteModal.tsx.html +28 -46
- package/coverage/lcov-report/src/widget/components/ExtractionStates/FailedExtractionState.tsx.html +1 -1
- package/coverage/lcov-report/src/widget/components/ExtractionStates/QueuedExtractionState.tsx.html +1 -1
- package/coverage/lcov-report/src/widget/components/ExtractionStates/RunningExtractionState.tsx.html +1 -1
- package/coverage/lcov-report/src/widget/components/ExtractionStates/StartingExtractionState.tsx.html +1 -1
- package/coverage/lcov-report/src/widget/components/ExtractionStates/SucceededExtractionState.tsx.html +1 -1
- package/coverage/lcov-report/src/widget/components/ExtractionStates/index.html +1 -1
- package/coverage/lcov-report/src/widget/components/ExtractionStatus.tsx.html +1 -1
- package/coverage/lcov-report/src/widget/components/ExtractionToast.tsx.html +1 -1
- package/coverage/lcov-report/src/widget/components/HorizontalTile.tsx.html +3 -3
- package/coverage/lcov-report/src/widget/components/LocalizedTablePaginator.tsx.html +8 -8
- package/coverage/lcov-report/src/widget/components/ReportAction.tsx.html +36 -81
- package/coverage/lcov-report/src/widget/components/ReportHorizontalTile.tsx.html +38 -41
- package/coverage/lcov-report/src/widget/components/ReportMappingHorizontalTile.tsx.html +46 -46
- package/coverage/lcov-report/src/widget/components/ReportMappings.tsx.html +127 -142
- package/coverage/lcov-report/src/widget/components/Reports.tsx.html +189 -312
- package/coverage/lcov-report/src/widget/components/ReportsConfigContext.tsx.html +370 -0
- package/coverage/lcov-report/src/widget/components/ReportsContainer.tsx.html +111 -33
- package/coverage/lcov-report/src/widget/components/ReportsHeader.tsx.html +166 -0
- package/coverage/lcov-report/src/widget/components/ReportsRouter.tsx.html +274 -0
- package/coverage/lcov-report/src/widget/components/SearchBar.tsx.html +22 -7
- package/coverage/lcov-report/src/widget/components/SelectIModel.tsx.html +40 -94
- package/coverage/lcov-report/src/widget/components/index.html +142 -97
- package/coverage/lcov-report/src/widget/components/utils.tsx.html +22 -19
- package/coverage/lcov-report/src/widget/context/{ReportsApiConfigContext.tsx.html → BulkExtractorContext.tsx.html} +23 -26
- package/coverage/lcov-report/src/widget/context/ReportsConfigApiContext.tsx.html +202 -0
- package/coverage/lcov-report/src/widget/context/index.html +30 -15
- package/coverage/lcov-report/src/widget/hooks/index.html +1 -1
- package/coverage/lcov-report/src/widget/hooks/useValidator.ts.html +11 -11
- package/coverage/lcov-report/src/widget/index.html +13 -13
- package/coverage/lcov.info +1036 -1034
- package/jest.config.js +1 -0
- package/lib/cjs/ReportsConfigWidget.js +1 -1
- package/lib/cjs/ReportsConfigWidget.js.map +1 -1
- package/lib/cjs/reports-config-widget-react.d.ts +5 -0
- package/lib/cjs/reports-config-widget-react.d.ts.map +1 -1
- package/lib/cjs/reports-config-widget-react.js +11 -0
- package/lib/cjs/reports-config-widget-react.js.map +1 -1
- package/lib/cjs/test/AddMappingModal.test.js +20 -34
- package/lib/cjs/test/AddMappingModal.test.js.map +1 -1
- package/lib/cjs/test/BulkExtractor.test.js +13 -19
- package/lib/cjs/test/BulkExtractor.test.js.map +1 -1
- package/lib/cjs/test/DeleteModal.test.d.ts.map +1 -1
- package/lib/cjs/test/DeleteModal.test.js +4 -62
- package/lib/cjs/test/DeleteModal.test.js.map +1 -1
- package/lib/cjs/test/ReportAction.test.js +14 -79
- package/lib/cjs/test/ReportAction.test.js.map +1 -1
- package/lib/cjs/test/ReportMappingHorizontalTile.test.js +20 -54
- package/lib/cjs/test/ReportMappingHorizontalTile.test.js.map +1 -1
- package/lib/cjs/test/ReportMappings.test.d.ts.map +1 -1
- package/lib/cjs/test/ReportMappings.test.js +51 -106
- package/lib/cjs/test/ReportMappings.test.js.map +1 -1
- package/lib/cjs/test/Reports.test.js +41 -96
- package/lib/cjs/test/Reports.test.js.map +1 -1
- package/lib/cjs/test/WidgetHeader.test.js +9 -3
- package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
- package/lib/cjs/test/test-utils.d.ts +3 -8
- package/lib/cjs/test/test-utils.d.ts.map +1 -1
- package/lib/cjs/test/test-utils.js +6 -34
- package/lib/cjs/test/test-utils.js.map +1 -1
- package/lib/cjs/tsconfig.tsbuildinfo +1 -1
- package/lib/cjs/widget/ReportsConfigUiProvider.d.ts +3 -3
- package/lib/cjs/widget/ReportsConfigUiProvider.d.ts.map +1 -1
- package/lib/cjs/widget/ReportsConfigUiProvider.js +5 -7
- package/lib/cjs/widget/ReportsConfigUiProvider.js.map +1 -1
- package/lib/cjs/widget/components/ActionPanel.d.ts +3 -3
- package/lib/cjs/widget/components/ActionPanel.d.ts.map +1 -1
- package/lib/cjs/widget/components/ActionPanel.js +4 -4
- package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
- package/lib/cjs/widget/components/ActionPanel.scss +2 -3
- package/lib/cjs/widget/components/AddMappingsModal.d.ts +4 -4
- package/lib/cjs/widget/components/AddMappingsModal.d.ts.map +1 -1
- package/lib/cjs/widget/components/AddMappingsModal.js +39 -43
- package/lib/cjs/widget/components/AddMappingsModal.js.map +1 -1
- package/lib/cjs/widget/components/AddMappingsModal.scss +1 -2
- package/lib/cjs/widget/components/BulkExtractor.d.ts +4 -4
- package/lib/cjs/widget/components/BulkExtractor.d.ts.map +1 -1
- package/lib/cjs/widget/components/BulkExtractor.js +8 -8
- package/lib/cjs/widget/components/BulkExtractor.js.map +1 -1
- package/lib/cjs/widget/components/DeleteModal.d.ts +4 -5
- package/lib/cjs/widget/components/DeleteModal.d.ts.map +1 -1
- package/lib/cjs/widget/components/DeleteModal.js +11 -15
- package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
- package/lib/cjs/widget/components/DeleteModal.scss +2 -3
- package/lib/cjs/widget/components/ExtractionStatus.js +2 -2
- package/lib/cjs/widget/components/ExtractionStatus.js.map +1 -1
- package/lib/cjs/widget/components/ExtractionStatus.scss +6 -7
- package/lib/cjs/widget/components/HorizontalTile.js +2 -2
- package/lib/cjs/widget/components/HorizontalTile.js.map +1 -1
- package/lib/cjs/widget/components/HorizontalTile.scss +11 -14
- package/lib/cjs/widget/components/LocalizedTablePaginator.js +2 -2
- package/lib/cjs/widget/components/LocalizedTablePaginator.js.map +1 -1
- package/lib/cjs/widget/components/ReportAction.d.ts +4 -5
- package/lib/cjs/widget/components/ReportAction.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportAction.js +24 -26
- package/lib/cjs/widget/components/ReportAction.js.map +1 -1
- package/lib/cjs/widget/components/ReportAction.scss +1 -2
- package/lib/cjs/widget/components/ReportHorizontalTile.d.ts +4 -4
- package/lib/cjs/widget/components/ReportHorizontalTile.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportHorizontalTile.js +33 -20
- package/lib/cjs/widget/components/ReportHorizontalTile.js.map +1 -1
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts +1 -1
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.js +36 -21
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.js.map +1 -1
- package/lib/cjs/widget/components/ReportMappings.d.ts +4 -6
- package/lib/cjs/widget/components/ReportMappings.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportMappings.js +50 -63
- package/lib/cjs/widget/components/ReportMappings.js.map +1 -1
- package/lib/cjs/widget/components/ReportMappings.scss +10 -11
- package/lib/cjs/widget/components/Reports.d.ts +6 -1
- package/lib/cjs/widget/components/Reports.d.ts.map +1 -1
- package/lib/cjs/widget/components/Reports.js +53 -94
- package/lib/cjs/widget/components/Reports.js.map +1 -1
- package/lib/cjs/widget/components/Reports.scss +15 -15
- package/lib/cjs/widget/components/ReportsConfigContext.d.ts +18 -0
- package/lib/cjs/widget/components/ReportsConfigContext.d.ts.map +1 -0
- package/lib/cjs/widget/components/ReportsConfigContext.js +79 -0
- package/lib/cjs/widget/components/ReportsConfigContext.js.map +1 -0
- package/lib/cjs/widget/components/ReportsContainer.d.ts +14 -0
- package/lib/cjs/widget/components/ReportsContainer.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportsContainer.js +27 -16
- package/lib/cjs/widget/components/ReportsContainer.js.map +1 -1
- package/lib/cjs/widget/components/ReportsContainer.scss +1 -3
- package/lib/cjs/widget/components/ReportsHeader.d.ts +7 -0
- package/lib/cjs/widget/components/ReportsHeader.d.ts.map +1 -0
- package/lib/cjs/widget/components/ReportsHeader.js +20 -0
- package/lib/cjs/widget/components/ReportsHeader.js.map +1 -0
- package/lib/cjs/widget/components/ReportsRouter.d.ts +8 -0
- package/lib/cjs/widget/components/ReportsRouter.d.ts.map +1 -0
- package/lib/cjs/widget/components/ReportsRouter.js +51 -0
- package/lib/cjs/widget/components/ReportsRouter.js.map +1 -0
- package/lib/cjs/widget/components/SearchBar.d.ts.map +1 -1
- package/lib/cjs/widget/components/SearchBar.js +4 -5
- package/lib/cjs/widget/components/SearchBar.js.map +1 -1
- package/lib/cjs/widget/components/SearchBar.scss +1 -2
- package/lib/cjs/widget/components/SelectIModel.d.ts +3 -3
- package/lib/cjs/widget/components/SelectIModel.d.ts.map +1 -1
- package/lib/cjs/widget/components/SelectIModel.js +10 -30
- package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
- package/lib/cjs/widget/components/SelectIModel.scss +2 -3
- 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 +1 -1
- package/lib/cjs/widget/components/utils.js.map +1 -1
- package/lib/cjs/widget/components/utils.scss +16 -8
- package/lib/cjs/widget/context/BulkExtractorContext.d.ts +10 -0
- package/lib/cjs/widget/context/BulkExtractorContext.d.ts.map +1 -0
- package/lib/cjs/widget/context/{ReportsApiConfigContext.js → BulkExtractorContext.js} +7 -10
- package/lib/cjs/widget/context/BulkExtractorContext.js.map +1 -0
- package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts +16 -0
- package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts.map +1 -0
- package/lib/cjs/widget/context/ReportsConfigApiContext.js +43 -0
- package/lib/cjs/widget/context/ReportsConfigApiContext.js.map +1 -0
- package/lib/cjs/widget/hooks/useValidator.js +1 -1
- package/lib/cjs/widget/hooks/useValidator.js.map +1 -1
- package/lib/esm/ReportsConfigWidget.js +1 -1
- package/lib/esm/ReportsConfigWidget.js.map +1 -1
- package/lib/esm/reports-config-widget-react.d.ts +5 -0
- package/lib/esm/reports-config-widget-react.d.ts.map +1 -1
- package/lib/esm/reports-config-widget-react.js +5 -0
- package/lib/esm/reports-config-widget-react.js.map +1 -1
- package/lib/esm/test/AddMappingModal.test.js +17 -31
- package/lib/esm/test/AddMappingModal.test.js.map +1 -1
- package/lib/esm/test/BulkExtractor.test.js +14 -17
- package/lib/esm/test/BulkExtractor.test.js.map +1 -1
- package/lib/esm/test/DeleteModal.test.d.ts.map +1 -1
- package/lib/esm/test/DeleteModal.test.js +5 -44
- package/lib/esm/test/DeleteModal.test.js.map +1 -1
- package/lib/esm/test/ReportAction.test.js +14 -60
- package/lib/esm/test/ReportAction.test.js.map +1 -1
- package/lib/esm/test/ReportMappingHorizontalTile.test.js +4 -38
- package/lib/esm/test/ReportMappingHorizontalTile.test.js.map +1 -1
- package/lib/esm/test/ReportMappings.test.d.ts.map +1 -1
- package/lib/esm/test/ReportMappings.test.js +43 -98
- package/lib/esm/test/ReportMappings.test.js.map +1 -1
- package/lib/esm/test/Reports.test.js +24 -60
- package/lib/esm/test/Reports.test.js.map +1 -1
- package/lib/esm/test/WidgetHeader.test.js +8 -2
- package/lib/esm/test/WidgetHeader.test.js.map +1 -1
- package/lib/esm/test/test-utils.d.ts +3 -8
- package/lib/esm/test/test-utils.d.ts.map +1 -1
- package/lib/esm/test/test-utils.js +4 -31
- package/lib/esm/test/test-utils.js.map +1 -1
- package/lib/esm/tsconfig.tsbuildinfo +1 -1
- package/lib/esm/widget/ReportsConfigUiProvider.d.ts +3 -3
- package/lib/esm/widget/ReportsConfigUiProvider.d.ts.map +1 -1
- package/lib/esm/widget/ReportsConfigUiProvider.js +2 -4
- package/lib/esm/widget/ReportsConfigUiProvider.js.map +1 -1
- package/lib/esm/widget/components/ActionPanel.d.ts +3 -3
- package/lib/esm/widget/components/ActionPanel.d.ts.map +1 -1
- package/lib/esm/widget/components/ActionPanel.js +4 -4
- package/lib/esm/widget/components/ActionPanel.js.map +1 -1
- package/lib/esm/widget/components/ActionPanel.scss +2 -3
- package/lib/esm/widget/components/AddMappingsModal.d.ts +4 -4
- package/lib/esm/widget/components/AddMappingsModal.d.ts.map +1 -1
- package/lib/esm/widget/components/AddMappingsModal.js +35 -39
- package/lib/esm/widget/components/AddMappingsModal.js.map +1 -1
- package/lib/esm/widget/components/AddMappingsModal.scss +1 -2
- package/lib/esm/widget/components/BulkExtractor.d.ts +4 -4
- package/lib/esm/widget/components/BulkExtractor.d.ts.map +1 -1
- package/lib/esm/widget/components/BulkExtractor.js +7 -8
- package/lib/esm/widget/components/BulkExtractor.js.map +1 -1
- package/lib/esm/widget/components/DeleteModal.d.ts +4 -5
- package/lib/esm/widget/components/DeleteModal.d.ts.map +1 -1
- package/lib/esm/widget/components/DeleteModal.js +11 -15
- package/lib/esm/widget/components/DeleteModal.js.map +1 -1
- package/lib/esm/widget/components/DeleteModal.scss +2 -3
- package/lib/esm/widget/components/ExtractionStatus.scss +6 -7
- package/lib/esm/widget/components/HorizontalTile.scss +11 -14
- package/lib/esm/widget/components/ReportAction.d.ts +4 -5
- package/lib/esm/widget/components/ReportAction.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportAction.js +17 -21
- package/lib/esm/widget/components/ReportAction.js.map +1 -1
- package/lib/esm/widget/components/ReportAction.scss +1 -2
- package/lib/esm/widget/components/ReportHorizontalTile.d.ts +4 -4
- package/lib/esm/widget/components/ReportHorizontalTile.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportHorizontalTile.js +6 -9
- package/lib/esm/widget/components/ReportHorizontalTile.js.map +1 -1
- package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts +1 -1
- package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportMappingHorizontalTile.js +12 -13
- package/lib/esm/widget/components/ReportMappingHorizontalTile.js.map +1 -1
- package/lib/esm/widget/components/ReportMappings.d.ts +4 -6
- package/lib/esm/widget/components/ReportMappings.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportMappings.js +43 -56
- package/lib/esm/widget/components/ReportMappings.js.map +1 -1
- package/lib/esm/widget/components/ReportMappings.scss +10 -11
- package/lib/esm/widget/components/Reports.d.ts +6 -1
- package/lib/esm/widget/components/Reports.d.ts.map +1 -1
- package/lib/esm/widget/components/Reports.js +46 -87
- package/lib/esm/widget/components/Reports.js.map +1 -1
- package/lib/esm/widget/components/Reports.scss +15 -15
- package/lib/esm/widget/components/ReportsConfigContext.d.ts +18 -0
- package/lib/esm/widget/components/ReportsConfigContext.d.ts.map +1 -0
- package/lib/esm/widget/components/ReportsConfigContext.js +56 -0
- package/lib/esm/widget/components/ReportsConfigContext.js.map +1 -0
- package/lib/esm/widget/components/ReportsContainer.d.ts +14 -0
- package/lib/esm/widget/components/ReportsContainer.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportsContainer.js +27 -17
- package/lib/esm/widget/components/ReportsContainer.js.map +1 -1
- package/lib/esm/widget/components/ReportsContainer.scss +1 -3
- package/lib/esm/widget/components/ReportsHeader.d.ts +7 -0
- package/lib/esm/widget/components/ReportsHeader.d.ts.map +1 -0
- package/lib/esm/widget/components/ReportsHeader.js +13 -0
- package/lib/esm/widget/components/ReportsHeader.js.map +1 -0
- package/lib/esm/widget/components/ReportsRouter.d.ts +8 -0
- package/lib/esm/widget/components/ReportsRouter.d.ts.map +1 -0
- package/lib/esm/widget/components/ReportsRouter.js +44 -0
- package/lib/esm/widget/components/ReportsRouter.js.map +1 -0
- package/lib/esm/widget/components/SearchBar.d.ts.map +1 -1
- package/lib/esm/widget/components/SearchBar.js +2 -3
- package/lib/esm/widget/components/SearchBar.js.map +1 -1
- package/lib/esm/widget/components/SearchBar.scss +1 -2
- package/lib/esm/widget/components/SelectIModel.d.ts +3 -3
- package/lib/esm/widget/components/SelectIModel.d.ts.map +1 -1
- package/lib/esm/widget/components/SelectIModel.js +7 -27
- package/lib/esm/widget/components/SelectIModel.js.map +1 -1
- package/lib/esm/widget/components/SelectIModel.scss +2 -3
- 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 +2 -2
- package/lib/esm/widget/components/utils.js.map +1 -1
- package/lib/esm/widget/components/utils.scss +16 -8
- package/lib/esm/widget/context/BulkExtractorContext.d.ts +10 -0
- package/lib/esm/widget/context/BulkExtractorContext.d.ts.map +1 -0
- package/lib/esm/widget/context/BulkExtractorContext.js +11 -0
- package/lib/esm/widget/context/BulkExtractorContext.js.map +1 -0
- package/lib/esm/widget/context/ReportsConfigApiContext.d.ts +16 -0
- package/lib/esm/widget/context/ReportsConfigApiContext.d.ts.map +1 -0
- package/lib/esm/widget/context/ReportsConfigApiContext.js +20 -0
- package/lib/esm/widget/context/ReportsConfigApiContext.js.map +1 -0
- package/lib/public/locales/en/ReportsConfigWidget.json +6 -1
- package/package.json +29 -29
- package/public/locales/en/ReportsConfigWidget.json +6 -1
- package/reports-config-widget-react.build.error.log +6 -6
- package/reports-config-widget-react.build.log +52 -49
- package/src/reports-config-widget-react.ts +6 -0
- package/src/test/AddMappingModal.test.tsx +20 -37
- package/src/test/BulkExtractor.test.ts +15 -17
- package/src/test/DeleteModal.test.tsx +4 -73
- package/src/test/ReportAction.test.tsx +17 -90
- package/src/test/ReportMappingHorizontalTile.test.tsx +3 -54
- package/src/test/ReportMappings.test.tsx +50 -135
- package/src/test/Reports.test.tsx +21 -80
- package/src/test/WidgetHeader.test.tsx +9 -2
- package/src/test/test-utils.tsx +9 -49
- package/src/widget/ReportsConfigUiProvider.tsx +7 -14
- package/src/widget/components/ActionPanel.scss +2 -3
- package/src/widget/components/ActionPanel.tsx +17 -15
- package/src/widget/components/AddMappingsModal.scss +1 -2
- package/src/widget/components/AddMappingsModal.tsx +55 -60
- package/src/widget/components/BulkExtractor.ts +11 -10
- package/src/widget/components/DeleteModal.scss +2 -3
- package/src/widget/components/DeleteModal.tsx +17 -23
- package/src/widget/components/ExtractionStatus.scss +6 -7
- package/src/widget/components/HorizontalTile.scss +11 -14
- package/src/widget/components/ReportAction.scss +1 -2
- package/src/widget/components/ReportAction.tsx +18 -33
- package/src/widget/components/ReportHorizontalTile.tsx +11 -12
- package/src/widget/components/ReportMappingHorizontalTile.tsx +30 -30
- package/src/widget/components/ReportMappings.scss +10 -11
- package/src/widget/components/ReportMappings.tsx +67 -72
- package/src/widget/components/Reports.scss +15 -15
- package/src/widget/components/Reports.tsx +140 -181
- package/src/widget/components/ReportsConfigContext.tsx +95 -0
- package/src/widget/components/ReportsContainer.scss +1 -3
- package/src/widget/components/ReportsContainer.tsx +47 -21
- package/src/widget/components/ReportsHeader.tsx +27 -0
- package/src/widget/components/ReportsRouter.tsx +63 -0
- package/src/widget/components/SearchBar.scss +1 -2
- package/src/widget/components/SearchBar.tsx +7 -2
- package/src/widget/components/SelectIModel.scss +2 -3
- package/src/widget/components/SelectIModel.tsx +11 -29
- package/src/widget/components/utils.scss +16 -8
- package/src/widget/components/utils.tsx +8 -7
- package/src/widget/context/{ReportsApiConfigContext.tsx → BulkExtractorContext.tsx} +9 -10
- package/src/widget/context/ReportsConfigApiContext.tsx +39 -0
- package/lib/cjs/widget/context/ReportsApiConfigContext.d.ts +0 -9
- package/lib/cjs/widget/context/ReportsApiConfigContext.d.ts.map +0 -1
- package/lib/cjs/widget/context/ReportsApiConfigContext.js.map +0 -1
- package/lib/esm/widget/context/ReportsApiConfigContext.d.ts +0 -9
- package/lib/esm/widget/context/ReportsApiConfigContext.d.ts.map +0 -1
- package/lib/esm/widget/context/ReportsApiConfigContext.js +0 -14
- package/lib/esm/widget/context/ReportsApiConfigContext.js.map +0 -1
|
@@ -24,81 +24,53 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
exports.Reports = void 0;
|
|
26
26
|
/*---------------------------------------------------------------------------------------------
|
|
27
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
28
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
29
|
-
*--------------------------------------------------------------------------------------------*/
|
|
27
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
28
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
29
|
+
*--------------------------------------------------------------------------------------------*/
|
|
30
30
|
const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
|
|
31
31
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
32
32
|
const react_1 = __importStar(require("react"));
|
|
33
33
|
const utils_1 = require("./utils");
|
|
34
34
|
require("./Reports.scss");
|
|
35
35
|
const DeleteModal_1 = __importDefault(require("./DeleteModal"));
|
|
36
|
-
const insights_client_1 = require("@itwin/insights-client");
|
|
37
|
-
const ReportAction_1 = __importDefault(require("./ReportAction"));
|
|
38
|
-
const ReportMappings_1 = require("./ReportMappings");
|
|
39
36
|
const ReportHorizontalTile_1 = require("./ReportHorizontalTile");
|
|
40
37
|
const SearchBar_1 = require("./SearchBar");
|
|
41
|
-
const
|
|
38
|
+
const ReportsConfigApiContext_1 = require("../context/ReportsConfigApiContext");
|
|
42
39
|
const ReportsConfigWidget_1 = require("../../ReportsConfigWidget");
|
|
43
|
-
const appui_react_1 = require("@itwin/appui-react");
|
|
44
|
-
const BulkExtractor_1 = __importDefault(require("./BulkExtractor"));
|
|
45
40
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
(function (ReportsView) {
|
|
49
|
-
ReportsView["REPORTS"] = "reports";
|
|
50
|
-
ReportsView["REPORTSMAPPING"] = "reportsmapping";
|
|
51
|
-
ReportsView["ADDING"] = "adding";
|
|
52
|
-
ReportsView["MODIFYING"] = "modifying";
|
|
53
|
-
})(ReportsView || (ReportsView = {}));
|
|
54
|
-
const fetchReports = async (setReports, iTwinId, setIsLoading, apiContext) => {
|
|
41
|
+
const BulkExtractorContext_1 = require("../context/BulkExtractorContext");
|
|
42
|
+
const fetchReports = async (setReports, iTwinId, setIsLoading, reportsClient, getAccessToken) => {
|
|
55
43
|
try {
|
|
56
44
|
if (!iTwinId)
|
|
57
45
|
return;
|
|
58
46
|
setIsLoading(true);
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
setReports(reports !== null && reports !== void 0 ? reports : []);
|
|
47
|
+
const accessToken = await getAccessToken();
|
|
48
|
+
const reports = await reportsClient.getReports(accessToken, iTwinId);
|
|
49
|
+
setReports(reports ?? []);
|
|
63
50
|
}
|
|
64
51
|
catch (error) {
|
|
65
|
-
utils_1.handleError(error.status);
|
|
52
|
+
(0, utils_1.handleError)(error.status);
|
|
66
53
|
}
|
|
67
54
|
finally {
|
|
68
55
|
setIsLoading(false);
|
|
69
56
|
}
|
|
70
57
|
};
|
|
71
|
-
const Reports = () => {
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const
|
|
87
|
-
const [reports, setReports] = react_1.useState([]);
|
|
88
|
-
const bulkExtractor = react_1.useMemo(() => new BulkExtractor_1.default(apiConfig, successfulExtractionToast, failedExtractionToast), [apiConfig]);
|
|
89
|
-
const jobStartEvent = react_1.useMemo(() => new core_bentley_1.BeEvent(), []);
|
|
90
|
-
react_1.useEffect(() => {
|
|
91
|
-
void fetchReports(setReports, iTwinId, setIsLoading, apiConfig);
|
|
92
|
-
}, [apiConfig, iTwinId, setIsLoading]);
|
|
93
|
-
const refresh = react_1.useCallback(async () => {
|
|
94
|
-
setReportsView(ReportsView.REPORTS);
|
|
95
|
-
setSelectedReport(undefined);
|
|
96
|
-
await fetchReports(setReports, iTwinId, setIsLoading, apiConfig);
|
|
97
|
-
}, [apiConfig, iTwinId, setReports]);
|
|
98
|
-
const addReport = () => {
|
|
99
|
-
setReportsView(ReportsView.ADDING);
|
|
100
|
-
};
|
|
101
|
-
const filteredReports = react_1.useMemo(() => reports.filter((x) => [x.displayName, x.description]
|
|
58
|
+
const Reports = ({ onClickAddReport, onClickReportModify, onClickReportTitle, }) => {
|
|
59
|
+
const { iTwinId, getAccessToken, reportsClient } = (0, ReportsConfigApiContext_1.useReportsConfigApi)();
|
|
60
|
+
const { bulkExtractor } = (0, BulkExtractorContext_1.useBulkExtractor)();
|
|
61
|
+
const [showDeleteModal, setShowDeleteModal] = (0, react_1.useState)(undefined);
|
|
62
|
+
const [selectedReportIds, setSelectedReportIds] = (0, react_1.useState)([]);
|
|
63
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(true);
|
|
64
|
+
const [searchValue, setSearchValue] = (0, react_1.useState)("");
|
|
65
|
+
const [reports, setReports] = (0, react_1.useState)([]);
|
|
66
|
+
const jobStartEvent = (0, react_1.useMemo)(() => new core_bentley_1.BeEvent(), []);
|
|
67
|
+
(0, react_1.useEffect)(() => {
|
|
68
|
+
void fetchReports(setReports, iTwinId, setIsLoading, reportsClient, getAccessToken);
|
|
69
|
+
}, [getAccessToken, iTwinId, reportsClient, setIsLoading]);
|
|
70
|
+
const refresh = (0, react_1.useCallback)(async () => {
|
|
71
|
+
await fetchReports(setReports, iTwinId, setIsLoading, reportsClient, getAccessToken);
|
|
72
|
+
}, [getAccessToken, iTwinId, reportsClient]);
|
|
73
|
+
const filteredReports = (0, react_1.useMemo)(() => reports.filter((x) => [x.displayName, x.description]
|
|
102
74
|
.join(" ")
|
|
103
75
|
.toLowerCase()
|
|
104
76
|
.includes(searchValue.toLowerCase())), [reports, searchValue]);
|
|
@@ -109,50 +81,37 @@ const Reports = () => {
|
|
|
109
81
|
? sr.filter((r) => reportId !== r)
|
|
110
82
|
: [...sr, reportId]);
|
|
111
83
|
};
|
|
112
|
-
const updateDatasets = react_1.useCallback(async () => {
|
|
84
|
+
const updateDatasets = (0, react_1.useCallback)(async () => {
|
|
85
|
+
if (!bulkExtractor)
|
|
86
|
+
return;
|
|
113
87
|
await bulkExtractor.runReportExtractions(selectedReportIds);
|
|
114
88
|
selectedReportIds.map((reportId) => jobStartEvent.raiseEvent(reportId));
|
|
115
89
|
setSelectedReportIds([]);
|
|
116
90
|
}, [selectedReportIds, jobStartEvent, bulkExtractor]);
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
react_1.default.createElement(
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
setReportsView(ReportsView.REPORTSMAPPING);
|
|
142
|
-
}, jobStartEvent: jobStartEvent, bulkExtractor: bulkExtractor, onClickDelete: () => {
|
|
143
|
-
setSelectedReport(report);
|
|
144
|
-
setShowDeleteModal(true);
|
|
145
|
-
}, onClickModify: () => {
|
|
146
|
-
setSelectedReport(report);
|
|
147
|
-
setReportsView(ReportsView.MODIFYING);
|
|
148
|
-
}, onSelectionChange: onSelectionChange, selected: selectedReportIds.some((reportId) => report.id === reportId) })))))),
|
|
149
|
-
react_1.default.createElement(DeleteModal_1.default, { entityName: (_c = selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.displayName) !== null && _c !== void 0 ? _c : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
|
|
150
|
-
var _a;
|
|
151
|
-
const reportsClientApi = new insights_client_1.ReportsClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
|
|
152
|
-
const accessToken = await apiConfig.getAccessToken();
|
|
153
|
-
await reportsClientApi.deleteReport(accessToken, (_a = selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.id) !== null && _a !== void 0 ? _a : "");
|
|
154
|
-
}, refresh: refresh })));
|
|
155
|
-
}
|
|
91
|
+
if (!bulkExtractor)
|
|
92
|
+
return null;
|
|
93
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
94
|
+
react_1.default.createElement("div", { className: "rcw-reports-list-container" },
|
|
95
|
+
react_1.default.createElement("div", { className: "rcw-toolbar" },
|
|
96
|
+
react_1.default.createElement("div", { className: "rcw-button-spacing" },
|
|
97
|
+
onClickAddReport && (react_1.default.createElement(itwinui_react_1.Button, { startIcon: react_1.default.createElement(itwinui_icons_react_1.SvgAdd, null), onClick: onClickAddReport, styleType: "high-visibility", title: "New Report" }, ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:New"))),
|
|
98
|
+
react_1.default.createElement(itwinui_react_1.IconButton, { title: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:UpdateDatasets"), onClick: updateDatasets, disabled: selectedReportIds.length === 0 },
|
|
99
|
+
react_1.default.createElement(itwinui_icons_react_1.SvgPlay, null))),
|
|
100
|
+
react_1.default.createElement("div", { className: "rcw-search-bar-container", "data-testid": "rcw-search-bar" },
|
|
101
|
+
react_1.default.createElement(itwinui_react_1.IconButton, { title: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Refresh"), onClick: refresh, disabled: isLoading, styleType: "borderless" },
|
|
102
|
+
react_1.default.createElement(itwinui_icons_react_1.SvgRefresh, null)),
|
|
103
|
+
react_1.default.createElement(SearchBar_1.SearchBar, { searchValue: searchValue, setSearchValue: setSearchValue, disabled: isLoading }))),
|
|
104
|
+
isLoading ? (react_1.default.createElement(utils_1.LoadingOverlay, null)) : reports.length === 0 && onClickAddReport ? (react_1.default.createElement(utils_1.EmptyMessage, null,
|
|
105
|
+
react_1.default.createElement(react_1.default.Fragment, null,
|
|
106
|
+
ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:NoReports"),
|
|
107
|
+
react_1.default.createElement("div", null,
|
|
108
|
+
react_1.default.createElement(itwinui_react_1.Button, { onClick: onClickAddReport, styleType: "cta" }, ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:CreateOneReportCTA")))))) : (react_1.default.createElement("div", { className: "rcw-reports-list" }, filteredReports.map((report) => (react_1.default.createElement(ReportHorizontalTile_1.ReportHorizontalTile, { key: report.id, report: report, onClickTitle: onClickReportTitle, jobStartEvent: jobStartEvent, bulkExtractor: bulkExtractor, onClickDelete: () => {
|
|
109
|
+
setShowDeleteModal(report);
|
|
110
|
+
}, onClickModify: onClickReportModify, onSelectionChange: onSelectionChange, selected: selectedReportIds.some((reportId) => report.id === reportId) })))))),
|
|
111
|
+
react_1.default.createElement(DeleteModal_1.default, { entityName: showDeleteModal?.displayName, onClose: () => setShowDeleteModal(undefined), onDelete: async () => {
|
|
112
|
+
const accessToken = await getAccessToken();
|
|
113
|
+
await reportsClient.deleteReport(accessToken, showDeleteModal?.id ?? "");
|
|
114
|
+
}, refresh: refresh })));
|
|
156
115
|
};
|
|
157
116
|
exports.Reports = Reports;
|
|
158
117
|
//# sourceMappingURL=Reports.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reports.js","sourceRoot":"","sources":["../../../../src/widget/components/Reports.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport {\n SvgAdd,\n SvgPlay,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n IconButton,\n Surface,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"./utils\";\nimport {\n EmptyMessage,\n generateUrl,\n handleError,\n LoadingOverlay,\n WidgetHeader,\n} from \"./utils\";\nimport \"./Reports.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { REPORTING_BASE_PATH, ReportsClient } from \"@itwin/insights-client\";\nimport ReportAction from \"./ReportAction\";\nimport { ReportMappings } from \"./ReportMappings\";\nimport { ReportHorizontalTile } from \"./ReportHorizontalTile\";\nimport { SearchBar } from \"./SearchBar\";\nimport type { ReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport BulkExtractor from \"./BulkExtractor\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { FailedExtractionToast, SuccessfulExtractionToast } from \"./ExtractionToast\";\n\nexport type ReportType = CreateTypeFromInterface<Report>;\n\nenum ReportsView {\n REPORTS = \"reports\",\n REPORTSMAPPING = \"reportsmapping\",\n ADDING = \"adding\",\n MODIFYING = \"modifying\",\n}\n\nconst fetchReports = async (\n setReports: React.Dispatch<React.SetStateAction<Report[]>>,\n iTwinId: string | undefined,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n apiContext: ReportsApiConfig\n) => {\n try {\n if (!iTwinId) return;\n setIsLoading(true);\n const reportsClientApi = new ReportsClient(\n generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl)\n );\n const accessToken = await apiContext.getAccessToken();\n const reports = await reportsClientApi.getReports(accessToken, iTwinId);\n setReports(reports ?? []);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nexport const Reports = () => {\n const successfulExtractionToast = (iModelName: string, odataFeedUrl: string) => {\n toaster.positive(<SuccessfulExtractionToast iModelName={iModelName} odataFeedUrl={odataFeedUrl} />);\n };\n\n const failedExtractionToast = (iModelName: string) => {\n toaster.negative(<FailedExtractionToast iModelName={iModelName} />);\n };\n\n const iTwinId = useActiveIModelConnection()?.iTwinId ?? \"\";\n const apiConfig = useReportsApiConfig();\n const [selectedReportIds, setSelectedReportIds] = useState<string[]>([]);\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [reportsView, setReportsView] = useState<ReportsView>(\n ReportsView.REPORTS\n );\n const [selectedReport, setSelectedReport] = useState<Report | undefined>(\n undefined\n );\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [searchValue, setSearchValue] = useState<string>(\"\");\n const [reports, setReports] = useState<Report[]>([]);\n const bulkExtractor = useMemo(\n () => new BulkExtractor(apiConfig, successfulExtractionToast, failedExtractionToast),\n [apiConfig]\n );\n const jobStartEvent = useMemo(\n () => new BeEvent<(reportId: string) => void>(),\n []\n );\n\n useEffect(() => {\n void fetchReports(setReports, iTwinId, setIsLoading, apiConfig);\n }, [apiConfig, iTwinId, setIsLoading]);\n\n const refresh = useCallback(async () => {\n setReportsView(ReportsView.REPORTS);\n setSelectedReport(undefined);\n await fetchReports(setReports, iTwinId, setIsLoading, apiConfig);\n }, [apiConfig, iTwinId, setReports]);\n\n const addReport = () => {\n setReportsView(ReportsView.ADDING);\n };\n\n const filteredReports = useMemo(\n () =>\n reports.filter((x) =>\n [x.displayName, x.description]\n .join(\" \")\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ),\n [reports, searchValue]\n );\n\n const onSelectionChange = (reportId: string, control: boolean) => {\n if (!control)\n setSelectedReportIds([]);\n\n setSelectedReportIds((sr) =>\n sr.some((r) => reportId === r)\n ? sr.filter(\n (r) => reportId !== r\n )\n : [...sr, reportId]\n );\n };\n\n const updateDatasets = useCallback(async () => {\n await bulkExtractor.runReportExtractions(selectedReportIds);\n selectedReportIds.map((reportId) => jobStartEvent.raiseEvent(reportId));\n setSelectedReportIds([]);\n }, [selectedReportIds, jobStartEvent, bulkExtractor]);\n\n switch (reportsView) {\n case ReportsView.ADDING:\n return iTwinId ? (\n <ReportAction iTwinId={iTwinId ?? \"\"} returnFn={refresh} />\n ) : null;\n case ReportsView.MODIFYING:\n return iTwinId ? (\n <ReportAction\n iTwinId={iTwinId}\n report={selectedReport}\n returnFn={refresh}\n />\n ) : null;\n case ReportsView.REPORTSMAPPING:\n return selectedReport ? (\n <ReportMappings report={selectedReport} bulkExtractor={bulkExtractor} goBack={refresh} />\n ) : null;\n default:\n return (\n <>\n <WidgetHeader\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:ITwinReports\"\n )}\n />\n <Surface className=\"rcw-reports-list-container\">\n <div className=\"rcw-toolbar\">\n <Button\n startIcon={<SvgAdd />}\n onClick={() => addReport()}\n styleType=\"high-visibility\"\n >\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:New\"\n )}\n </Button>\n <IconButton\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateDatasets\"\n )}\n onClick={updateDatasets}\n disabled={selectedReportIds.length === 0}\n >\n <SvgPlay />\n </IconButton>\n <div className=\"rcw-search-bar-container\" data-testid=\"rcw-search-bar\">\n <div className=\"rcw-search-button\">\n <SearchBar\n searchValue={searchValue}\n setSearchValue={setSearchValue}\n disabled={isLoading}\n />\n </div>\n </div>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : reports.length === 0 ? (\n <EmptyMessage>\n <>\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:NoReports\"\n )}\n <div>\n <Button onClick={addReport} styleType=\"cta\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:CreateOneReportCTA\"\n )}\n </Button>\n </div>\n </>\n </EmptyMessage>\n ) : (\n <div className=\"rcw-reports-list\">\n {filteredReports.map((report) => (\n <ReportHorizontalTile\n key={report.id}\n report={report}\n onClickTitle={() => {\n setSelectedReport(report);\n setReportsView(ReportsView.REPORTSMAPPING);\n }}\n jobStartEvent={jobStartEvent}\n bulkExtractor={bulkExtractor}\n onClickDelete={() => {\n setSelectedReport(report);\n setShowDeleteModal(true);\n }}\n onClickModify={() => {\n setSelectedReport(report);\n setReportsView(ReportsView.MODIFYING);\n }}\n onSelectionChange={onSelectionChange}\n selected={selectedReportIds.some((reportId) => report.id === reportId)}\n />\n ))}\n </div>\n )}\n </Surface>\n <DeleteModal\n entityName={selectedReport?.displayName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n const reportsClientApi = new ReportsClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n await reportsClientApi.deleteReport(\n accessToken,\n selectedReport?.id ?? \"\"\n );\n }}\n refresh={refresh}\n />\n </>\n );\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Reports.js","sourceRoot":"","sources":["../../../../src/widget/components/Reports.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport { SvgAdd, SvgPlay, SvgRefresh } from \"@itwin/itwinui-icons-react\";\nimport { Button, IconButton } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"./utils\";\nimport {\n EmptyMessage,\n handleError,\n LoadingOverlay,\n} from \"./utils\";\nimport \"./Reports.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport type { Report, ReportsClient } from \"@itwin/insights-client\";\nimport { ReportHorizontalTile } from \"./ReportHorizontalTile\";\nimport { SearchBar } from \"./SearchBar\";\nimport { useReportsConfigApi } from \"../context/ReportsConfigApiContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { useBulkExtractor } from \"../context/BulkExtractorContext\";\n\nexport type ReportType = CreateTypeFromInterface<Report>;\n\nconst fetchReports = async (\n setReports: (reports: Report[]) => void,\n iTwinId: string | undefined,\n setIsLoading: (isLoading: boolean) => void,\n reportsClient: ReportsClient,\n getAccessToken: () => Promise<AccessToken>\n) => {\n try {\n if (!iTwinId) return;\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const reports = await reportsClient.getReports(accessToken, iTwinId);\n setReports(reports ?? []);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nexport interface ReportsProps {\n onClickAddReport?: () => void;\n onClickReportTitle?: (report: Report) => void;\n onClickReportModify?: (report: Report) => void;\n}\n\nexport const Reports = ({\n onClickAddReport,\n onClickReportModify,\n onClickReportTitle,\n}: ReportsProps) => {\n const { iTwinId, getAccessToken, reportsClient } = useReportsConfigApi();\n const { bulkExtractor } = useBulkExtractor();\n const [showDeleteModal, setShowDeleteModal] = useState<Report | undefined>(\n undefined\n );\n const [selectedReportIds, setSelectedReportIds] = useState<string[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [searchValue, setSearchValue] = useState<string>(\"\");\n const [reports, setReports] = useState<Report[]>([]);\n const jobStartEvent = useMemo(\n () => new BeEvent<(reportId: string) => void>(),\n []\n );\n\n useEffect(() => {\n void fetchReports(\n setReports,\n iTwinId,\n setIsLoading,\n reportsClient,\n getAccessToken\n );\n }, [getAccessToken, iTwinId, reportsClient, setIsLoading]);\n\n const refresh = useCallback(async () => {\n await fetchReports(\n setReports,\n iTwinId,\n setIsLoading,\n reportsClient,\n getAccessToken\n );\n }, [getAccessToken, iTwinId, reportsClient]);\n\n const filteredReports = useMemo(\n () =>\n reports.filter((x) =>\n [x.displayName, x.description]\n .join(\" \")\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ),\n [reports, searchValue]\n );\n\n const onSelectionChange = (reportId: string, control: boolean) => {\n if (!control) setSelectedReportIds([]);\n\n setSelectedReportIds((sr) =>\n sr.some((r) => reportId === r)\n ? sr.filter((r) => reportId !== r)\n : [...sr, reportId]\n );\n };\n\n const updateDatasets = useCallback(async () => {\n if (!bulkExtractor) return;\n await bulkExtractor.runReportExtractions(selectedReportIds);\n selectedReportIds.map((reportId) => jobStartEvent.raiseEvent(reportId));\n setSelectedReportIds([]);\n }, [selectedReportIds, jobStartEvent, bulkExtractor]);\n\n if (!bulkExtractor) return null;\n\n return (\n <>\n <div className=\"rcw-reports-list-container\">\n <div className=\"rcw-toolbar\">\n <div className=\"rcw-button-spacing\">\n {onClickAddReport && (\n <Button\n startIcon={<SvgAdd />}\n onClick={onClickAddReport}\n styleType=\"high-visibility\"\n title=\"New Report\"\n >\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:New\"\n )}\n </Button>\n )}\n <IconButton\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateDatasets\"\n )}\n onClick={updateDatasets}\n disabled={selectedReportIds.length === 0}\n >\n <SvgPlay />\n </IconButton>\n </div>\n <div\n className=\"rcw-search-bar-container\"\n data-testid=\"rcw-search-bar\"\n >\n <IconButton\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Refresh\"\n )}\n onClick={refresh}\n disabled={isLoading}\n styleType=\"borderless\"\n >\n <SvgRefresh />\n </IconButton>\n <SearchBar\n searchValue={searchValue}\n setSearchValue={setSearchValue}\n disabled={isLoading}\n />\n </div>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : reports.length === 0 && onClickAddReport ? (\n <EmptyMessage>\n <>\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:NoReports\"\n )}\n <div>\n <Button onClick={onClickAddReport} styleType=\"cta\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:CreateOneReportCTA\"\n )}\n </Button>\n </div>\n </>\n </EmptyMessage>\n ) : (\n <div className=\"rcw-reports-list\">\n {filteredReports.map((report) => (\n <ReportHorizontalTile\n key={report.id}\n report={report}\n onClickTitle={onClickReportTitle}\n jobStartEvent={jobStartEvent}\n bulkExtractor={bulkExtractor}\n onClickDelete={() => {\n setShowDeleteModal(report);\n }}\n onClickModify={onClickReportModify}\n onSelectionChange={onSelectionChange}\n selected={selectedReportIds.some(\n (reportId) => report.id === reportId\n )}\n />\n ))}\n </div>\n )}\n </div>\n <DeleteModal\n entityName={showDeleteModal?.displayName}\n onClose={() => setShowDeleteModal(undefined)}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await reportsClient.deleteReport(\n accessToken,\n showDeleteModal?.id ?? \"\"\n );\n }}\n refresh={refresh}\n />\n </>\n );\n};\n"]}
|
|
@@ -2,39 +2,39 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
@import "~@itwin/itwinui-css/scss/variables";
|
|
6
5
|
|
|
7
6
|
.rcw-reports-list-container {
|
|
8
7
|
display: flex;
|
|
9
8
|
flex-direction: column;
|
|
10
9
|
flex-grow: 1;
|
|
11
|
-
padding: $iui-baseline $iui-m;
|
|
12
10
|
min-height: 0;
|
|
13
11
|
|
|
14
12
|
.rcw-toolbar {
|
|
15
13
|
display: flex;
|
|
16
14
|
justify-content: space-between;
|
|
17
|
-
gap:
|
|
18
|
-
border-bottom: 1px solid var(--iui-color-
|
|
19
|
-
padding-bottom:
|
|
15
|
+
gap: var(--iui-size-xs);
|
|
16
|
+
border-bottom: 1px solid var(--iui-color-border-subtle);
|
|
17
|
+
padding-bottom: var(--iui-size-s);
|
|
20
18
|
flex-wrap: wrap;
|
|
21
|
-
}
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
.rcw-search-bar-container {
|
|
21
|
+
flex-shrink: 1;
|
|
22
|
+
flex-grow: 0;
|
|
23
|
+
display: flex;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.rcw-button-spacing {
|
|
27
|
+
display: flex;
|
|
28
|
+
gap: var(--iui-size-xs);
|
|
29
|
+
}
|
|
27
30
|
}
|
|
28
31
|
|
|
29
32
|
.rcw-reports-list {
|
|
30
33
|
display: flex;
|
|
31
34
|
flex-direction: column;
|
|
32
35
|
overflow-y: overlay;
|
|
33
|
-
gap:
|
|
34
|
-
margin-top:
|
|
36
|
+
gap: var(--iui-size-xs);
|
|
37
|
+
margin-top: var(--iui-size-xs);
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
|
|
38
|
-
.rcw-button-container {
|
|
39
|
-
display: flex;
|
|
40
|
-
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IModelsClient } from "@itwin/imodels-client-management";
|
|
2
|
+
import { ExtractionClient, MappingsClient, ReportsClient } from "@itwin/insights-client";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import type { GetAccessTokenFn } from "../context/ReportsConfigApiContext";
|
|
5
|
+
import { BulkExtractor } from "./BulkExtractor";
|
|
6
|
+
export interface ReportsConfigContextProps {
|
|
7
|
+
getAccessToken?: GetAccessTokenFn;
|
|
8
|
+
baseUrl?: string;
|
|
9
|
+
iTwinId: string;
|
|
10
|
+
bulkExtractor?: BulkExtractor;
|
|
11
|
+
reportsClient?: ReportsClient;
|
|
12
|
+
mappingsClient?: MappingsClient;
|
|
13
|
+
extractionClient?: ExtractionClient;
|
|
14
|
+
iModelsClient?: IModelsClient;
|
|
15
|
+
children?: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export declare const ReportsConfigContext: (props: ReportsConfigContextProps) => JSX.Element;
|
|
18
|
+
//# sourceMappingURL=ReportsConfigContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReportsConfigContext.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsConfigContext.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAa,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAuB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE9G,OAAO,KAAoD,MAAM,OAAO,CAAC;AAEzE,OAAO,KAAK,EACV,gBAAgB,EAEjB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,MAAM,WAAW,yBAAyB;IACxC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAKD,eAAO,MAAM,oBAAoB,UAAW,yBAAyB,gBA0DpE,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.ReportsConfigContext = void 0;
|
|
23
|
+
/*---------------------------------------------------------------------------------------------
|
|
24
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
25
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
26
|
+
*--------------------------------------------------------------------------------------------*/
|
|
27
|
+
const core_frontend_1 = require("@itwin/core-frontend");
|
|
28
|
+
const imodels_client_management_1 = require("@itwin/imodels-client-management");
|
|
29
|
+
const insights_client_1 = require("@itwin/insights-client");
|
|
30
|
+
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
31
|
+
const react_1 = __importStar(require("react"));
|
|
32
|
+
const BulkExtractorContext_1 = require("../context/BulkExtractorContext");
|
|
33
|
+
const ReportsConfigApiContext_1 = require("../context/ReportsConfigApiContext");
|
|
34
|
+
const ReportsConfigUiProvider_1 = require("../ReportsConfigUiProvider");
|
|
35
|
+
const BulkExtractor_1 = require("./BulkExtractor");
|
|
36
|
+
const ExtractionToast_1 = require("./ExtractionToast");
|
|
37
|
+
const utils_1 = require("./utils");
|
|
38
|
+
const authorizationClientGetAccessToken = async () => (await core_frontend_1.IModelApp.authorizationClient?.getAccessToken()) ?? "";
|
|
39
|
+
const ReportsConfigContext = (props) => {
|
|
40
|
+
const reportsBaseUrl = (0, react_1.useCallback)(() => (0, utils_1.generateUrl)(insights_client_1.REPORTING_BASE_PATH, props.baseUrl || ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL), [props.baseUrl]);
|
|
41
|
+
const iModelClientOptions = (0, react_1.useMemo)(() => ({
|
|
42
|
+
api: { baseUrl: (0, utils_1.generateUrl)(imodels_client_management_1.Constants.api.baseUrl, props.baseUrl ?? ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL) },
|
|
43
|
+
}), [props.baseUrl]);
|
|
44
|
+
const [extractionClient, setExtractionClient] = (0, react_1.useState)(props.extractionClient ?? new insights_client_1.ExtractionClient(reportsBaseUrl()));
|
|
45
|
+
const [apiConfig, setApiConfig] = (0, react_1.useState)({
|
|
46
|
+
getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,
|
|
47
|
+
baseUrl: reportsBaseUrl(),
|
|
48
|
+
iTwinId: props.iTwinId,
|
|
49
|
+
reportsClient: props.reportsClient ?? new insights_client_1.ReportsClient(reportsBaseUrl()),
|
|
50
|
+
mappingsClient: props.mappingsClient ?? new insights_client_1.MappingsClient(reportsBaseUrl()),
|
|
51
|
+
iModelsClient: props.iModelsClient ?? new imodels_client_management_1.IModelsClient(iModelClientOptions),
|
|
52
|
+
});
|
|
53
|
+
(0, react_1.useEffect)(() => {
|
|
54
|
+
if (!props.extractionClient) {
|
|
55
|
+
setExtractionClient(props.extractionClient ?? new insights_client_1.ExtractionClient(reportsBaseUrl()));
|
|
56
|
+
}
|
|
57
|
+
}, [props.extractionClient, reportsBaseUrl]);
|
|
58
|
+
const successfulExtractionToast = (iModelName, odataFeedUrl) => {
|
|
59
|
+
itwinui_react_1.toaster.positive(react_1.default.createElement(ExtractionToast_1.SuccessfulExtractionToast, { iModelName: iModelName, odataFeedUrl: odataFeedUrl }));
|
|
60
|
+
};
|
|
61
|
+
const failedExtractionToast = (iModelName) => {
|
|
62
|
+
itwinui_react_1.toaster.negative(react_1.default.createElement(ExtractionToast_1.FailedExtractionToast, { iModelName: iModelName }));
|
|
63
|
+
};
|
|
64
|
+
const bulkExtractor = (0, react_1.useMemo)(() => ({ bulkExtractor: props.bulkExtractor ?? new BulkExtractor_1.BulkExtractor(apiConfig.reportsClient, extractionClient, apiConfig.getAccessToken, successfulExtractionToast, failedExtractionToast) }), [apiConfig.getAccessToken, apiConfig.reportsClient, extractionClient, props.bulkExtractor]);
|
|
65
|
+
(0, react_1.useEffect)(() => {
|
|
66
|
+
setApiConfig(() => ({
|
|
67
|
+
getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,
|
|
68
|
+
baseUrl: props.baseUrl || ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL,
|
|
69
|
+
iTwinId: props.iTwinId,
|
|
70
|
+
reportsClient: props.reportsClient ?? new insights_client_1.ReportsClient(reportsBaseUrl()),
|
|
71
|
+
mappingsClient: props.mappingsClient ?? new insights_client_1.MappingsClient(reportsBaseUrl()),
|
|
72
|
+
iModelsClient: props.iModelsClient ?? new imodels_client_management_1.IModelsClient(iModelClientOptions),
|
|
73
|
+
}));
|
|
74
|
+
}, [props.getAccessToken, props.baseUrl, props.iTwinId, props.reportsClient, props.mappingsClient, props.iModelsClient, reportsBaseUrl, iModelClientOptions]);
|
|
75
|
+
return (react_1.default.createElement(ReportsConfigApiContext_1.ReportsConfigApiContext.Provider, { value: apiConfig },
|
|
76
|
+
react_1.default.createElement(BulkExtractorContext_1.BulkExtractorContext.Provider, { value: bulkExtractor }, props.children)));
|
|
77
|
+
};
|
|
78
|
+
exports.ReportsConfigContext = ReportsConfigContext;
|
|
79
|
+
//# sourceMappingURL=ReportsConfigContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReportsConfigContext.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportsConfigContext.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport type { IModelsClientOptions } from \"@itwin/imodels-client-management\";\nimport { Constants, IModelsClient } from \"@itwin/imodels-client-management\";\nimport { ExtractionClient, MappingsClient, REPORTING_BASE_PATH, ReportsClient } from \"@itwin/insights-client\";\nimport { toaster } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { BulkExtractorContext } from \"../context/BulkExtractorContext\";\nimport type {\n GetAccessTokenFn,\n ReportsConfigApiProps,\n} from \"../context/ReportsConfigApiContext\";\nimport { ReportsConfigApiContext } from \"../context/ReportsConfigApiContext\";\nimport { REPORTS_CONFIG_BASE_URL } from \"../ReportsConfigUiProvider\";\nimport { BulkExtractor } from \"./BulkExtractor\";\nimport { FailedExtractionToast, SuccessfulExtractionToast } from \"./ExtractionToast\";\nimport { generateUrl } from \"./utils\";\n\nexport interface ReportsConfigContextProps {\n getAccessToken?: GetAccessTokenFn;\n baseUrl?: string;\n iTwinId: string;\n bulkExtractor?: BulkExtractor;\n reportsClient?: ReportsClient;\n mappingsClient?: MappingsClient;\n extractionClient?: ExtractionClient;\n iModelsClient?: IModelsClient;\n children?: React.ReactNode;\n}\n\nconst authorizationClientGetAccessToken = async () =>\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n\nexport const ReportsConfigContext = (props: ReportsConfigContextProps) => {\n const reportsBaseUrl = useCallback(() => generateUrl(\n REPORTING_BASE_PATH,\n props.baseUrl || REPORTS_CONFIG_BASE_URL\n ), [props.baseUrl]);\n const iModelClientOptions: IModelsClientOptions = useMemo(() => ({\n api: { baseUrl: generateUrl(Constants.api.baseUrl, props.baseUrl ?? REPORTS_CONFIG_BASE_URL) },\n }), [props.baseUrl]);\n const [extractionClient, setExtractionClient] = useState<ExtractionClient>(\n props.extractionClient ?? new ExtractionClient(reportsBaseUrl())\n );\n\n const [apiConfig, setApiConfig] = useState<ReportsConfigApiProps>({\n getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,\n baseUrl: reportsBaseUrl(),\n iTwinId: props.iTwinId,\n reportsClient: props.reportsClient ?? new ReportsClient(reportsBaseUrl()),\n mappingsClient: props.mappingsClient ?? new MappingsClient(reportsBaseUrl()),\n iModelsClient: props.iModelsClient ?? new IModelsClient(iModelClientOptions),\n });\n\n useEffect(() => {\n if (!props.extractionClient) {\n setExtractionClient(props.extractionClient ?? new ExtractionClient(reportsBaseUrl()));\n }\n }, [props.extractionClient, reportsBaseUrl]);\n\n const successfulExtractionToast = (iModelName: string, odataFeedUrl: string) => {\n toaster.positive(<SuccessfulExtractionToast iModelName={iModelName} odataFeedUrl={odataFeedUrl} />);\n };\n\n const failedExtractionToast = (iModelName: string) => {\n toaster.negative(<FailedExtractionToast iModelName={iModelName} />);\n };\n\n const bulkExtractor = useMemo(\n () => ({ bulkExtractor: props.bulkExtractor ?? new BulkExtractor(apiConfig.reportsClient, extractionClient, apiConfig.getAccessToken, successfulExtractionToast, failedExtractionToast) }),\n [apiConfig.getAccessToken, apiConfig.reportsClient, extractionClient, props.bulkExtractor]\n );\n\n useEffect(() => {\n setApiConfig(() => ({\n getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,\n baseUrl: props.baseUrl || REPORTS_CONFIG_BASE_URL,\n iTwinId: props.iTwinId,\n reportsClient: props.reportsClient ?? new ReportsClient(reportsBaseUrl()),\n mappingsClient: props.mappingsClient ?? new MappingsClient(reportsBaseUrl()),\n iModelsClient: props.iModelsClient ?? new IModelsClient(iModelClientOptions),\n }));\n }, [props.getAccessToken, props.baseUrl, props.iTwinId, props.reportsClient, props.mappingsClient, props.iModelsClient, reportsBaseUrl, iModelClientOptions]);\n\n return (\n <ReportsConfigApiContext.Provider value={apiConfig}>\n <BulkExtractorContext.Provider value={bulkExtractor}>\n {props.children}\n </BulkExtractorContext.Provider>\n </ReportsConfigApiContext.Provider>\n );\n};\n"]}
|
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { AccessToken } from "@itwin/core-bentley";
|
|
3
3
|
import "./ReportsContainer.scss";
|
|
4
|
+
import type { Report } from "@itwin/insights-client";
|
|
4
5
|
interface ReportsContainerProps {
|
|
5
6
|
getAccessToken?: () => Promise<AccessToken>;
|
|
6
7
|
baseUrl: string;
|
|
7
8
|
}
|
|
9
|
+
export declare enum RouteStep {
|
|
10
|
+
ReportsList = 0,
|
|
11
|
+
ReportAction = 1,
|
|
12
|
+
ReportMappings = 2
|
|
13
|
+
}
|
|
14
|
+
export interface ReportsRouteFields {
|
|
15
|
+
report?: Report;
|
|
16
|
+
}
|
|
17
|
+
export interface Route {
|
|
18
|
+
step: RouteStep;
|
|
19
|
+
title: string;
|
|
20
|
+
reportsRoutingFields: ReportsRouteFields;
|
|
21
|
+
}
|
|
8
22
|
declare const ReportsContainer: ({ getAccessToken, baseUrl, }: ReportsContainerProps) => JSX.Element;
|
|
9
23
|
export default ReportsContainer;
|
|
10
24
|
//# sourceMappingURL=ReportsContainer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReportsContainer.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"ReportsContainer.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMrD,UAAU,qBAAqB;IAC7B,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,SAAS;IACnB,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,cAAc,IAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,kBAAkB,CAAC;CAC1C;AAED,QAAA,MAAM,gBAAgB,iCAGnB,qBAAqB,gBAgCvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -19,26 +19,37 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
|
|
22
|
+
exports.RouteStep = void 0;
|
|
23
23
|
const react_1 = __importStar(require("react"));
|
|
24
|
-
const Reports_1 = require("../components/Reports");
|
|
25
|
-
const ReportsApiConfigContext_1 = require("../context/ReportsApiConfigContext");
|
|
26
24
|
require("./ReportsContainer.scss");
|
|
27
|
-
const
|
|
25
|
+
const appui_react_1 = require("@itwin/appui-react");
|
|
26
|
+
const ReportsHeader_1 = require("./ReportsHeader");
|
|
27
|
+
const ReportsRouter_1 = require("./ReportsRouter");
|
|
28
|
+
const ReportsConfigContext_1 = require("./ReportsConfigContext");
|
|
29
|
+
var RouteStep;
|
|
30
|
+
(function (RouteStep) {
|
|
31
|
+
RouteStep[RouteStep["ReportsList"] = 0] = "ReportsList";
|
|
32
|
+
RouteStep[RouteStep["ReportAction"] = 1] = "ReportAction";
|
|
33
|
+
RouteStep[RouteStep["ReportMappings"] = 2] = "ReportMappings";
|
|
34
|
+
})(RouteStep = exports.RouteStep || (exports.RouteStep = {}));
|
|
28
35
|
const ReportsContainer = ({ getAccessToken, baseUrl, }) => {
|
|
29
|
-
const [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
const [routingHistory, setRoutingHistory] = (0, react_1.useState)([
|
|
37
|
+
{ step: RouteStep.ReportsList, title: "iTwin Reports", reportsRoutingFields: {} },
|
|
38
|
+
]);
|
|
39
|
+
const currentRoute = routingHistory[routingHistory.length - 1];
|
|
40
|
+
const iTwinId = (0, appui_react_1.useActiveIModelConnection)()?.iTwinId ?? "";
|
|
41
|
+
const navigateTo = (0, react_1.useCallback)((toRoute) => {
|
|
42
|
+
setRoutingHistory((r) => [...r, toRoute(r[r.length - 1])]);
|
|
43
|
+
}, []);
|
|
44
|
+
const goBack = (0, react_1.useCallback)(() => {
|
|
45
|
+
const updatedRouting = [...routingHistory];
|
|
46
|
+
updatedRouting.pop();
|
|
47
|
+
setRoutingHistory(updatedRouting);
|
|
48
|
+
}, [routingHistory]);
|
|
49
|
+
return (react_1.default.createElement(ReportsConfigContext_1.ReportsConfigContext, { getAccessToken: getAccessToken, baseUrl: baseUrl, iTwinId: iTwinId },
|
|
40
50
|
react_1.default.createElement("div", { className: "rcw-reports-container" },
|
|
41
|
-
react_1.default.createElement(
|
|
51
|
+
react_1.default.createElement(ReportsHeader_1.ReportsHeader, { goBack: goBack, currentRoute: currentRoute }),
|
|
52
|
+
react_1.default.createElement(ReportsRouter_1.ReportsRouter, { currentRoute: currentRoute, navigateTo: navigateTo, goBack: goBack }))));
|
|
42
53
|
};
|
|
43
54
|
exports.default = ReportsContainer;
|
|
44
55
|
//# sourceMappingURL=ReportsContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReportsContainer.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReportsContainer.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAKA,+CAAqD;AACrD,mCAAiC;AAEjC,oDAA+D;AAC/D,mDAAgD;AAChD,mDAAgD;AAChD,iEAA8D;AAO9D,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,uDAAW,CAAA;IACX,yDAAY,CAAA;IACZ,6DAAc,CAAA;AAChB,CAAC,EAJW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAIpB;AAYD,MAAM,gBAAgB,GAAG,CAAC,EACxB,cAAc,EACd,OAAO,GACe,EAAE,EAAE;IAE1B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAU;QAC5D,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,EAAE,EAAE;KAClF,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAA,uCAAyB,GAAE,EAAE,OAAO,IAAI,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAA,mBAAW,EAAC,CAAC,OAA2C,EAAE,EAAE;QAC7E,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC9B,MAAM,cAAc,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;QAC3C,cAAc,CAAC,GAAG,EAAE,CAAC;QACrB,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO,CACL,8BAAC,2CAAoB,IAAC,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;QACtF,uCAAK,SAAS,EAAC,uBAAuB;YACpC,8BAAC,6BAAa,IACZ,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,GAC1B;YACF,8BAAC,6BAAa,IACZ,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,GACd,CACE,CACe,CACxB,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,gBAAgB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport React, { useCallback, useState } from \"react\";\nimport \"./ReportsContainer.scss\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { ReportsHeader } from \"./ReportsHeader\";\nimport { ReportsRouter } from \"./ReportsRouter\";\nimport { ReportsConfigContext } from \"./ReportsConfigContext\";\n\ninterface ReportsContainerProps {\n getAccessToken?: () => Promise<AccessToken>;\n baseUrl: string;\n}\n\nexport enum RouteStep {\n ReportsList,\n ReportAction,\n ReportMappings\n}\n\nexport interface ReportsRouteFields {\n report?: Report;\n}\n\nexport interface Route {\n step: RouteStep;\n title: string;\n reportsRoutingFields: ReportsRouteFields;\n}\n\nconst ReportsContainer = ({\n getAccessToken,\n baseUrl,\n}: ReportsContainerProps) => {\n\n const [routingHistory, setRoutingHistory] = useState<Route[]>([\n { step: RouteStep.ReportsList, title: \"iTwin Reports\", reportsRoutingFields: {} },\n ]);\n const currentRoute = routingHistory[routingHistory.length - 1];\n const iTwinId = useActiveIModelConnection()?.iTwinId ?? \"\";\n const navigateTo = useCallback((toRoute: (prev: Route | undefined) => Route) => {\n setRoutingHistory((r) => [...r, toRoute(r[r.length - 1])]);\n }, []);\n\n const goBack = useCallback(() => {\n const updatedRouting = [...routingHistory];\n updatedRouting.pop();\n setRoutingHistory(updatedRouting);\n }, [routingHistory]);\n\n return (\n <ReportsConfigContext getAccessToken={getAccessToken} baseUrl={baseUrl} iTwinId={iTwinId}>\n <div className=\"rcw-reports-container\">\n <ReportsHeader\n goBack={goBack}\n currentRoute={currentRoute}\n />\n <ReportsRouter\n currentRoute={currentRoute}\n navigateTo={navigateTo}\n goBack={goBack}\n />\n </div>\n </ReportsConfigContext>\n );\n};\n\nexport default ReportsContainer;\n"]}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
@import "~@itwin/itwinui-css/scss/variables";
|
|
6
5
|
|
|
7
6
|
.rcw-reports-container {
|
|
8
7
|
position: absolute;
|
|
@@ -10,9 +9,8 @@
|
|
|
10
9
|
left: 0;
|
|
11
10
|
display: flex;
|
|
12
11
|
flex-direction: column;
|
|
13
|
-
padding:
|
|
12
|
+
padding: var(--iui-size-s) var(--iui-size-m);
|
|
14
13
|
box-sizing: border-box;
|
|
15
14
|
height: 100%;
|
|
16
15
|
overflow: auto;
|
|
17
|
-
gap: $iui-baseline;
|
|
18
16
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReportsHeader.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsHeader.tsx"],"names":[],"mappings":";AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,eAAO,MAAM,aAAa;YAIhB,MAAM,IAAI;kBACJ,KAAK;iBAYpB,CAAC"}
|