@itwin/reports-config-widget-react 0.1.0 → 0.2.1
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/package-deps_rebuild.json +38 -34
- package/.rush/temp/shrinkwrap-deps.json +14 -6
- package/CHANGELOG.json +30 -0
- package/CHANGELOG.md +17 -1
- package/coverage/clover.xml +605 -610
- package/coverage/coverage-final.json +28 -27
- package/coverage/lcov-report/index.html +31 -31
- package/coverage/lcov-report/src/ReportsConfigWidget.ts.html +10 -10
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/test/index.html +1 -1
- package/coverage/lcov-report/src/test/test-utils.tsx.html +22 -22
- package/coverage/lcov-report/src/widget/ReportsConfigUiProvider.tsx.html +7 -7
- package/coverage/lcov-report/src/widget/components/ActionPanel.tsx.html +29 -41
- package/coverage/lcov-report/src/widget/components/AddMappingsModal.tsx.html +31 -37
- package/coverage/lcov-report/src/widget/components/BulkExtractor.ts.html +270 -162
- package/coverage/lcov-report/src/widget/components/Constants.ts.html +4 -4
- package/coverage/lcov-report/src/widget/components/DeleteModal.tsx.html +21 -21
- package/coverage/lcov-report/src/widget/components/ExtractionStates/FailedExtractionState.tsx.html +6 -6
- package/coverage/lcov-report/src/widget/components/ExtractionStates/QueuedExtractionState.tsx.html +14 -14
- package/coverage/lcov-report/src/widget/components/ExtractionStates/RunningExtractionState.tsx.html +15 -15
- package/coverage/lcov-report/src/widget/components/ExtractionStates/StartingExtractionState.tsx.html +14 -14
- package/coverage/lcov-report/src/widget/components/ExtractionStates/SucceededExtractionState.tsx.html +22 -19
- package/coverage/lcov-report/src/widget/components/ExtractionStates/index.html +43 -43
- package/coverage/lcov-report/src/widget/components/ExtractionStatus.tsx.html +57 -57
- package/coverage/lcov-report/src/widget/components/ExtractionToast.tsx.html +208 -0
- package/coverage/lcov-report/src/widget/components/HorizontalTile.tsx.html +8 -8
- package/coverage/lcov-report/src/widget/components/LocalizedTablePaginator.tsx.html +8 -8
- package/coverage/lcov-report/src/widget/components/ReportAction.tsx.html +14 -20
- package/coverage/lcov-report/src/widget/components/ReportHorizontalTile.tsx.html +30 -33
- package/coverage/lcov-report/src/widget/components/ReportMappingHorizontalTile.tsx.html +469 -0
- package/coverage/lcov-report/src/widget/components/ReportMappings.tsx.html +183 -231
- package/coverage/lcov-report/src/widget/components/Reports.tsx.html +73 -43
- package/coverage/lcov-report/src/widget/components/ReportsContainer.tsx.html +10 -10
- package/coverage/lcov-report/src/widget/components/SearchBar.tsx.html +10 -10
- package/coverage/lcov-report/src/widget/components/SelectIModel.tsx.html +31 -31
- package/coverage/lcov-report/src/widget/components/index.html +100 -85
- package/coverage/lcov-report/src/widget/components/utils.tsx.html +32 -32
- package/coverage/lcov-report/src/widget/context/ReportsApiConfigContext.tsx.html +8 -8
- 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 +7 -7
- package/coverage/lcov-report/src/widget/index.html +1 -1
- package/coverage/lcov.info +990 -1003
- package/jest.config.js +6 -0
- package/lib/cjs/test/AddMappingModal.test.d.ts +2 -0
- package/lib/cjs/test/AddMappingModal.test.d.ts.map +1 -0
- package/lib/cjs/test/AddMappingModal.test.js +277 -0
- package/lib/cjs/test/AddMappingModal.test.js.map +1 -0
- package/lib/cjs/test/BulkExtractor.test.d.ts +2 -0
- package/lib/cjs/test/BulkExtractor.test.d.ts.map +1 -0
- package/lib/cjs/test/BulkExtractor.test.js +182 -0
- package/lib/cjs/test/BulkExtractor.test.js.map +1 -0
- package/lib/cjs/test/DeleteModal.test.d.ts +2 -0
- package/lib/cjs/test/DeleteModal.test.d.ts.map +1 -0
- package/lib/cjs/test/DeleteModal.test.js +93 -0
- package/lib/cjs/test/DeleteModal.test.js.map +1 -0
- package/lib/cjs/test/ReportAction.test.js +2 -3
- package/lib/cjs/test/ReportAction.test.js.map +1 -1
- package/lib/cjs/test/ReportMappingHorizontalTile.test.d.ts +2 -0
- package/lib/cjs/test/ReportMappingHorizontalTile.test.d.ts.map +1 -0
- package/lib/cjs/test/ReportMappingHorizontalTile.test.js +340 -0
- package/lib/cjs/test/ReportMappingHorizontalTile.test.js.map +1 -0
- package/lib/cjs/test/ReportMappings.test.js +115 -267
- package/lib/cjs/test/ReportMappings.test.js.map +1 -1
- package/lib/cjs/test/Reports.test.js +1 -1
- package/lib/cjs/test/Reports.test.js.map +1 -1
- package/lib/cjs/tsconfig.tsbuildinfo +1 -1
- package/lib/cjs/widget/components/ActionPanel.d.ts.map +1 -1
- package/lib/cjs/widget/components/ActionPanel.js +4 -5
- package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
- package/lib/cjs/widget/components/AddMappingsModal.d.ts +2 -2
- package/lib/cjs/widget/components/AddMappingsModal.d.ts.map +1 -1
- package/lib/cjs/widget/components/AddMappingsModal.js +5 -4
- package/lib/cjs/widget/components/AddMappingsModal.js.map +1 -1
- package/lib/cjs/widget/components/AddMappingsModal.scss +4 -3
- package/lib/cjs/widget/components/BulkExtractor.d.ts +18 -9
- package/lib/cjs/widget/components/BulkExtractor.d.ts.map +1 -1
- package/lib/cjs/widget/components/BulkExtractor.js +86 -57
- package/lib/cjs/widget/components/BulkExtractor.js.map +1 -1
- package/lib/cjs/widget/components/DeleteModal.js +1 -1
- package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
- package/lib/cjs/widget/components/DeleteModal.scss +4 -3
- package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.js +1 -1
- package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.js.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.d.ts.map +1 -1
- package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.js +1 -1
- package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.js.map +1 -1
- package/lib/cjs/widget/components/ExtractionStatus.scss +15 -1
- package/lib/cjs/widget/components/ExtractionToast.d.ts +11 -0
- package/lib/cjs/widget/components/ExtractionToast.d.ts.map +1 -0
- package/lib/cjs/widget/components/ExtractionToast.js +33 -0
- package/lib/cjs/widget/components/ExtractionToast.js.map +1 -0
- package/lib/cjs/widget/components/HorizontalTile.scss +1 -1
- package/lib/cjs/widget/components/ReportAction.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportAction.js +3 -3
- package/lib/cjs/widget/components/ReportAction.js.map +1 -1
- package/lib/cjs/widget/components/ReportAction.scss +2 -2
- package/lib/cjs/widget/components/ReportHorizontalTile.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportHorizontalTile.js +1 -2
- package/lib/cjs/widget/components/ReportHorizontalTile.js.map +1 -1
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts +13 -0
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -0
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.js +82 -0
- package/lib/cjs/widget/components/ReportMappingHorizontalTile.js.map +1 -0
- package/lib/cjs/widget/components/ReportMappings.d.ts +3 -1
- package/lib/cjs/widget/components/ReportMappings.d.ts.map +1 -1
- package/lib/cjs/widget/components/ReportMappings.js +39 -40
- package/lib/cjs/widget/components/ReportMappings.js.map +1 -1
- package/lib/cjs/widget/components/ReportMappings.scss +7 -7
- package/lib/cjs/widget/components/Reports.d.ts.map +1 -1
- package/lib/cjs/widget/components/Reports.js +13 -6
- package/lib/cjs/widget/components/Reports.js.map +1 -1
- package/lib/cjs/widget/components/Reports.scss +1 -1
- package/lib/cjs/widget/components/ReportsContainer.js +1 -1
- package/lib/cjs/widget/components/ReportsContainer.js.map +1 -1
- package/lib/cjs/widget/components/ReportsContainer.scss +2 -2
- package/lib/cjs/widget/components/SelectIModel.js +2 -2
- package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
- package/lib/cjs/widget/components/SelectIModel.scss +4 -3
- 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 +2 -2
- package/lib/esm/test/AddMappingModal.test.d.ts +2 -0
- package/lib/esm/test/AddMappingModal.test.d.ts.map +1 -0
- package/lib/esm/test/AddMappingModal.test.js +253 -0
- package/lib/esm/test/AddMappingModal.test.js.map +1 -0
- package/lib/esm/test/BulkExtractor.test.d.ts +2 -0
- package/lib/esm/test/BulkExtractor.test.d.ts.map +1 -0
- package/lib/esm/test/BulkExtractor.test.js +158 -0
- package/lib/esm/test/BulkExtractor.test.js.map +1 -0
- package/lib/esm/test/DeleteModal.test.d.ts +2 -0
- package/lib/esm/test/DeleteModal.test.d.ts.map +1 -0
- package/lib/esm/test/DeleteModal.test.js +69 -0
- package/lib/esm/test/DeleteModal.test.js.map +1 -0
- package/lib/esm/test/ReportAction.test.js +2 -3
- package/lib/esm/test/ReportAction.test.js.map +1 -1
- package/lib/esm/test/ReportMappingHorizontalTile.test.d.ts +2 -0
- package/lib/esm/test/ReportMappingHorizontalTile.test.d.ts.map +1 -0
- package/lib/esm/test/ReportMappingHorizontalTile.test.js +316 -0
- package/lib/esm/test/ReportMappingHorizontalTile.test.js.map +1 -0
- package/lib/esm/test/ReportMappings.test.js +117 -269
- package/lib/esm/test/ReportMappings.test.js.map +1 -1
- package/lib/esm/test/Reports.test.js +1 -1
- package/lib/esm/test/Reports.test.js.map +1 -1
- package/lib/esm/tsconfig.tsbuildinfo +1 -1
- package/lib/esm/widget/components/ActionPanel.d.ts.map +1 -1
- package/lib/esm/widget/components/ActionPanel.js +4 -5
- package/lib/esm/widget/components/ActionPanel.js.map +1 -1
- package/lib/esm/widget/components/AddMappingsModal.d.ts +2 -2
- package/lib/esm/widget/components/AddMappingsModal.d.ts.map +1 -1
- package/lib/esm/widget/components/AddMappingsModal.js +4 -5
- package/lib/esm/widget/components/AddMappingsModal.js.map +1 -1
- package/lib/esm/widget/components/AddMappingsModal.scss +4 -3
- package/lib/esm/widget/components/BulkExtractor.d.ts +18 -9
- package/lib/esm/widget/components/BulkExtractor.d.ts.map +1 -1
- package/lib/esm/widget/components/BulkExtractor.js +86 -57
- package/lib/esm/widget/components/BulkExtractor.js.map +1 -1
- package/lib/esm/widget/components/DeleteModal.js +1 -1
- package/lib/esm/widget/components/DeleteModal.js.map +1 -1
- package/lib/esm/widget/components/DeleteModal.scss +4 -3
- package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.js +1 -1
- package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.js.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.d.ts.map +1 -1
- package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.js +1 -1
- package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.js.map +1 -1
- package/lib/esm/widget/components/ExtractionStatus.scss +15 -1
- package/lib/esm/widget/components/ExtractionToast.d.ts +11 -0
- package/lib/esm/widget/components/ExtractionToast.d.ts.map +1 -0
- package/lib/esm/widget/components/ExtractionToast.js +25 -0
- package/lib/esm/widget/components/ExtractionToast.js.map +1 -0
- package/lib/esm/widget/components/HorizontalTile.scss +1 -1
- package/lib/esm/widget/components/ReportAction.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportAction.js +3 -3
- package/lib/esm/widget/components/ReportAction.js.map +1 -1
- package/lib/esm/widget/components/ReportAction.scss +2 -2
- package/lib/esm/widget/components/ReportHorizontalTile.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportHorizontalTile.js +1 -2
- package/lib/esm/widget/components/ReportHorizontalTile.js.map +1 -1
- package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts +13 -0
- package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -0
- package/lib/esm/widget/components/ReportMappingHorizontalTile.js +75 -0
- package/lib/esm/widget/components/ReportMappingHorizontalTile.js.map +1 -0
- package/lib/esm/widget/components/ReportMappings.d.ts +3 -1
- package/lib/esm/widget/components/ReportMappings.d.ts.map +1 -1
- package/lib/esm/widget/components/ReportMappings.js +40 -41
- package/lib/esm/widget/components/ReportMappings.js.map +1 -1
- package/lib/esm/widget/components/ReportMappings.scss +7 -7
- package/lib/esm/widget/components/Reports.d.ts.map +1 -1
- package/lib/esm/widget/components/Reports.js +15 -8
- package/lib/esm/widget/components/Reports.js.map +1 -1
- package/lib/esm/widget/components/Reports.scss +1 -1
- package/lib/esm/widget/components/ReportsContainer.js +1 -1
- package/lib/esm/widget/components/ReportsContainer.js.map +1 -1
- package/lib/esm/widget/components/ReportsContainer.scss +2 -2
- 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 +4 -3
- package/lib/esm/widget/components/utils.js +1 -1
- package/lib/esm/widget/components/utils.js.map +1 -1
- package/lib/esm/widget/components/utils.scss +2 -2
- package/lib/public/locales/en/ReportsConfigWidget.json +5 -0
- package/package.json +7 -4
- package/public/locales/en/ReportsConfigWidget.json +5 -0
- package/reports-config-widget-react.build.error.log +10 -6
- package/reports-config-widget-react.build.log +51 -46
- package/src/test/AddMappingModal.test.tsx +315 -0
- package/src/test/BulkExtractor.test.ts +301 -0
- package/src/test/DeleteModal.test.tsx +118 -0
- package/src/test/ReportAction.test.tsx +2 -4
- package/src/test/ReportMappingHorizontalTile.test.tsx +451 -0
- package/src/test/ReportMappings.test.tsx +154 -549
- package/src/test/Reports.test.tsx +1 -1
- package/src/widget/components/ActionPanel.tsx +19 -23
- package/src/widget/components/AddMappingsModal.scss +4 -3
- package/src/widget/components/AddMappingsModal.tsx +4 -6
- package/src/widget/components/BulkExtractor.ts +97 -61
- package/src/widget/components/DeleteModal.scss +4 -3
- package/src/widget/components/DeleteModal.tsx +1 -1
- package/src/widget/components/ExtractionStates/RunningExtractionState.tsx +1 -1
- package/src/widget/components/ExtractionStates/SucceededExtractionState.tsx +1 -0
- package/src/widget/components/ExtractionStatus.scss +15 -1
- package/src/widget/components/ExtractionToast.tsx +41 -0
- package/src/widget/components/HorizontalTile.scss +1 -1
- package/src/widget/components/ReportAction.scss +2 -2
- package/src/widget/components/ReportAction.tsx +1 -3
- package/src/widget/components/ReportHorizontalTile.tsx +1 -2
- package/src/widget/components/ReportMappingHorizontalTile.tsx +128 -0
- package/src/widget/components/ReportMappings.scss +7 -7
- package/src/widget/components/ReportMappings.tsx +89 -105
- package/src/widget/components/Reports.scss +1 -1
- package/src/widget/components/Reports.tsx +18 -8
- package/src/widget/components/ReportsContainer.scss +2 -2
- package/src/widget/components/ReportsContainer.tsx +1 -1
- package/src/widget/components/SelectIModel.scss +4 -3
- package/src/widget/components/SelectIModel.tsx +2 -2
- package/src/widget/components/utils.scss +2 -2
- package/src/widget/components/utils.tsx +1 -1
- package/coverage/lcov-report/src/widget/components/Extraction.tsx.html +0 -1030
- package/lib/cjs/widget/components/Extraction.d.ts +0 -28
- package/lib/cjs/widget/components/Extraction.d.ts.map +0 -1
- package/lib/cjs/widget/components/Extraction.js +0 -190
- package/lib/cjs/widget/components/Extraction.js.map +0 -1
- package/lib/cjs/widget/components/Extraction.scss +0 -39
- package/lib/esm/widget/components/Extraction.d.ts +0 -28
- package/lib/esm/widget/components/Extraction.d.ts.map +0 -1
- package/lib/esm/widget/components/Extraction.js +0 -166
- package/lib/esm/widget/components/Extraction.js.map +0 -1
- package/lib/esm/widget/components/Extraction.scss +0 -39
- package/src/widget/components/Extraction.scss +0 -39
- package/src/widget/components/Extraction.tsx +0 -315
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import "./Extraction.scss";
|
|
3
|
-
export declare const REFRESH_DELAY = 2000;
|
|
4
|
-
export declare enum ExtractionStates {
|
|
5
|
-
None = 0,
|
|
6
|
-
Starting = 1,
|
|
7
|
-
FetchingUpdate = 2,
|
|
8
|
-
Queued = 3,
|
|
9
|
-
Running = 4,
|
|
10
|
-
Succeeded = 5,
|
|
11
|
-
Failed = 6
|
|
12
|
-
}
|
|
13
|
-
interface ExtractionStatusProps {
|
|
14
|
-
state: ExtractionStates;
|
|
15
|
-
setExtractionState?: React.Dispatch<React.SetStateAction<ExtractionStates>>;
|
|
16
|
-
children?: React.ReactNode;
|
|
17
|
-
}
|
|
18
|
-
export declare const ExtractionStatus: ({ state, children, setExtractionState, }: ExtractionStatusProps) => JSX.Element;
|
|
19
|
-
interface ExtractionProps {
|
|
20
|
-
iModels: Map<string, string>;
|
|
21
|
-
setExtractingIModelId: React.Dispatch<React.SetStateAction<string>>;
|
|
22
|
-
extractionState: ExtractionStates;
|
|
23
|
-
setExtractionState: React.Dispatch<React.SetStateAction<ExtractionStates>>;
|
|
24
|
-
isLoading: boolean;
|
|
25
|
-
}
|
|
26
|
-
export declare const Extraction: ({ iModels, setExtractingIModelId, extractionState, setExtractionState, isLoading, }: ExtractionProps) => JSX.Element;
|
|
27
|
-
export {};
|
|
28
|
-
//# sourceMappingURL=Extraction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Extraction.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/Extraction.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,mBAAmB,CAAC;AAU3B,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,oBAAY,gBAAgB;IAC1B,IAAI,IAAA;IACJ,QAAQ,IAAA;IACR,cAAc,IAAA;IACd,MAAM,IAAA;IACN,OAAO,IAAA;IACP,SAAS,IAAA;IACT,MAAM,IAAA;CACP;AACD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,gBAAgB,CAAC;IACxB,kBAAkB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5E,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,eAAO,MAAM,gBAAgB,6CAI1B,qBAAqB,gBAkHvB,CAAC;AAEF,UAAU,eAAe;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE,eAAe,EAAE,gBAAgB,CAAC;IAClC,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,wFAMpB,eAAe,gBA0IjB,CAAC"}
|
|
@@ -1,190 +0,0 @@
|
|
|
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.Extraction = exports.ExtractionStatus = exports.ExtractionStates = exports.REFRESH_DELAY = void 0;
|
|
23
|
-
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
24
|
-
const React = __importStar(require("react"));
|
|
25
|
-
const react_1 = require("react");
|
|
26
|
-
const insights_client_1 = require("@itwin/insights-client");
|
|
27
|
-
const utils_1 = require("./utils");
|
|
28
|
-
require("./Extraction.scss");
|
|
29
|
-
const itwinui_icons_color_react_1 = require("@itwin/itwinui-icons-color-react");
|
|
30
|
-
const ReportsApiConfigContext_1 = require("../context/ReportsApiConfigContext");
|
|
31
|
-
const ReportsConfigWidget_1 = require("../../ReportsConfigWidget");
|
|
32
|
-
exports.REFRESH_DELAY = 2000;
|
|
33
|
-
var ExtractionStates;
|
|
34
|
-
(function (ExtractionStates) {
|
|
35
|
-
ExtractionStates[ExtractionStates["None"] = 0] = "None";
|
|
36
|
-
ExtractionStates[ExtractionStates["Starting"] = 1] = "Starting";
|
|
37
|
-
ExtractionStates[ExtractionStates["FetchingUpdate"] = 2] = "FetchingUpdate";
|
|
38
|
-
ExtractionStates[ExtractionStates["Queued"] = 3] = "Queued";
|
|
39
|
-
ExtractionStates[ExtractionStates["Running"] = 4] = "Running";
|
|
40
|
-
ExtractionStates[ExtractionStates["Succeeded"] = 5] = "Succeeded";
|
|
41
|
-
ExtractionStates[ExtractionStates["Failed"] = 6] = "Failed";
|
|
42
|
-
})(ExtractionStates = exports.ExtractionStates || (exports.ExtractionStates = {}));
|
|
43
|
-
const ExtractionStatus = ({ state, children, setExtractionState, }) => {
|
|
44
|
-
const [fadeOut, setFadeOut] = react_1.useState(false);
|
|
45
|
-
const onAnimationEnd = () => {
|
|
46
|
-
if (setExtractionState) {
|
|
47
|
-
setExtractionState(ExtractionStates.None);
|
|
48
|
-
setFadeOut(false);
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
react_1.useEffect(() => {
|
|
52
|
-
let timer;
|
|
53
|
-
switch (state) {
|
|
54
|
-
case ExtractionStates.Succeeded:
|
|
55
|
-
case ExtractionStates.Failed:
|
|
56
|
-
timer = window.setTimeout(() => setFadeOut(true), 5000);
|
|
57
|
-
}
|
|
58
|
-
return () => clearTimeout(timer);
|
|
59
|
-
}, [state, setExtractionState]);
|
|
60
|
-
switch (state) {
|
|
61
|
-
case ExtractionStates.Starting:
|
|
62
|
-
return (React.createElement("div", { title: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Starting"), className: "extraction-status" },
|
|
63
|
-
React.createElement("div", { className: "status-icon" },
|
|
64
|
-
React.createElement(itwinui_icons_color_react_1.SvgStatusPendingHollow, null))));
|
|
65
|
-
case ExtractionStates.FetchingUpdate:
|
|
66
|
-
return (React.createElement("div", { title: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Loading"), className: "extraction-status" },
|
|
67
|
-
React.createElement(itwinui_react_1.ProgressRadial, { size: "x-small", indeterminate: true })));
|
|
68
|
-
case ExtractionStates.Queued:
|
|
69
|
-
return (React.createElement("div", { title: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Queued"), className: "extraction-status" },
|
|
70
|
-
React.createElement("div", { className: "status-icon" },
|
|
71
|
-
React.createElement(itwinui_icons_color_react_1.SvgStatusPending, null))));
|
|
72
|
-
case ExtractionStates.Running:
|
|
73
|
-
return (React.createElement("div", { title: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Running"), className: "extraction-status" },
|
|
74
|
-
React.createElement(itwinui_react_1.ProgressRadial, { size: "x-small", indeterminate: true })));
|
|
75
|
-
case ExtractionStates.Succeeded:
|
|
76
|
-
return (React.createElement("div", { title: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Success"), className: "extraction-status" },
|
|
77
|
-
React.createElement("div", { className: `status-icon`, style: {
|
|
78
|
-
animationName: fadeOut ? "rcw-fade-out" : "",
|
|
79
|
-
animationDelay: "5s",
|
|
80
|
-
animationDuration: "1s",
|
|
81
|
-
}, onAnimationEnd: onAnimationEnd },
|
|
82
|
-
React.createElement(itwinui_icons_color_react_1.SvgStatusSuccess, null))));
|
|
83
|
-
case ExtractionStates.Failed:
|
|
84
|
-
return (React.createElement("div", { title: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Failed"), className: "extraction-status" },
|
|
85
|
-
React.createElement("div", { className: `status-icon`, style: {
|
|
86
|
-
animationName: fadeOut ? "rcw-fade-out" : "",
|
|
87
|
-
animationDelay: "5s",
|
|
88
|
-
animationDuration: "1s",
|
|
89
|
-
}, onAnimationEnd: onAnimationEnd },
|
|
90
|
-
React.createElement(itwinui_icons_color_react_1.SvgStatusError, null))));
|
|
91
|
-
default:
|
|
92
|
-
return React.createElement(React.Fragment, null, children);
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
exports.ExtractionStatus = ExtractionStatus;
|
|
96
|
-
const Extraction = ({ iModels, setExtractingIModelId, extractionState, setExtractionState, isLoading, }) => {
|
|
97
|
-
const jobId = react_1.useRef("");
|
|
98
|
-
const intervalId = react_1.useRef();
|
|
99
|
-
const [isRunning, setIsRunning] = react_1.useState(false);
|
|
100
|
-
const [currentIModelId, setCurrentIModelId] = react_1.useState();
|
|
101
|
-
const apiConfig = ReportsApiConfigContext_1.useReportsApiConfig();
|
|
102
|
-
const runExtraction = async (iModelId) => {
|
|
103
|
-
try {
|
|
104
|
-
setExtractionState(ExtractionStates.Starting);
|
|
105
|
-
setExtractingIModelId(iModelId);
|
|
106
|
-
const extractionClientApi = new insights_client_1.ExtractionClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
|
|
107
|
-
const accessToken = await apiConfig.getAccessToken();
|
|
108
|
-
const response = await extractionClientApi.runExtraction(accessToken, iModelId);
|
|
109
|
-
jobId.current = response.id;
|
|
110
|
-
setIsRunning(true);
|
|
111
|
-
setExtractionState(ExtractionStates.FetchingUpdate);
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
utils_1.handleError(error.status);
|
|
115
|
-
setExtractionState(ExtractionStates.Failed);
|
|
116
|
-
setIsRunning(false);
|
|
117
|
-
setCurrentIModelId(undefined);
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
react_1.useEffect(() => {
|
|
121
|
-
if (!intervalId.current && isRunning) {
|
|
122
|
-
const newIntervalId = window.setInterval(async () => {
|
|
123
|
-
const extractionClientApi = new insights_client_1.ExtractionClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
|
|
124
|
-
const accessToken = await apiConfig.getAccessToken();
|
|
125
|
-
const response = await extractionClientApi.getExtractionStatus(accessToken, jobId.current);
|
|
126
|
-
if (response.state === "Queued") {
|
|
127
|
-
setExtractionState(ExtractionStates.Queued);
|
|
128
|
-
}
|
|
129
|
-
else if (response.state === "Running") {
|
|
130
|
-
setExtractionState(ExtractionStates.Running);
|
|
131
|
-
}
|
|
132
|
-
else if (response.state === "Succeeded") {
|
|
133
|
-
setExtractionState(ExtractionStates.Succeeded);
|
|
134
|
-
setIsRunning(false);
|
|
135
|
-
setCurrentIModelId(undefined);
|
|
136
|
-
}
|
|
137
|
-
else if (response.state === "Failed") {
|
|
138
|
-
setExtractionState(ExtractionStates.Failed);
|
|
139
|
-
setIsRunning(false);
|
|
140
|
-
setCurrentIModelId(undefined);
|
|
141
|
-
}
|
|
142
|
-
}, exports.REFRESH_DELAY);
|
|
143
|
-
intervalId.current = newIntervalId;
|
|
144
|
-
}
|
|
145
|
-
else if (intervalId && !isRunning) {
|
|
146
|
-
window.clearInterval(intervalId.current);
|
|
147
|
-
intervalId.current = undefined;
|
|
148
|
-
}
|
|
149
|
-
return () => window.clearInterval(intervalId.current);
|
|
150
|
-
}, [apiConfig, isRunning, jobId, setExtractionState]);
|
|
151
|
-
const iModelOptions = react_1.useMemo(() => {
|
|
152
|
-
const newIModelOptions = [];
|
|
153
|
-
for (const [iModelId, iModelName] of iModels.entries()) {
|
|
154
|
-
newIModelOptions.push({
|
|
155
|
-
label: iModelName,
|
|
156
|
-
value: iModelId,
|
|
157
|
-
key: iModelId,
|
|
158
|
-
disabled: extractionState !== ExtractionStates.None,
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
return newIModelOptions;
|
|
162
|
-
}, [iModels, extractionState]);
|
|
163
|
-
return (React.createElement("div", { className: "extraction-container" },
|
|
164
|
-
React.createElement("div", { className: "extraction-combo-box", "data-testid": "extraction-combo-box" },
|
|
165
|
-
React.createElement(itwinui_react_1.Label, { htmlFor: "combo-input" }, ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:UpdateDataset")),
|
|
166
|
-
isLoading ? (React.createElement(utils_1.SkeletonBlock, null)) : (React.createElement(itwinui_react_1.ComboBox, { options: iModelOptions, value: currentIModelId, onChange: async (value) => {
|
|
167
|
-
setCurrentIModelId(value);
|
|
168
|
-
value && await runExtraction(value);
|
|
169
|
-
}, inputProps: {
|
|
170
|
-
id: "combo-input",
|
|
171
|
-
placeholder: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:SelectIModel"),
|
|
172
|
-
}, message: extractionState !== ExtractionStates.None && (React.createElement(itwinui_react_1.StatusMessage, null,
|
|
173
|
-
React.createElement("div", { className: "extraction-status-container" },
|
|
174
|
-
React.createElement(exports.ExtractionStatus, { state: extractionState, setExtractionState: setExtractionState }),
|
|
175
|
-
(() => {
|
|
176
|
-
switch (extractionState) {
|
|
177
|
-
case ExtractionStates.Succeeded: {
|
|
178
|
-
return ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Success");
|
|
179
|
-
}
|
|
180
|
-
case ExtractionStates.Failed: {
|
|
181
|
-
return ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Failed");
|
|
182
|
-
}
|
|
183
|
-
default: {
|
|
184
|
-
return ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:UpdateInProgress");
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
})()))) })))));
|
|
188
|
-
};
|
|
189
|
-
exports.Extraction = Extraction;
|
|
190
|
-
//# sourceMappingURL=Extraction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Extraction.js","sourceRoot":"","sources":["../../../../src/widget/components/Extraction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport {\n ComboBox,\n Label,\n ProgressRadial,\n StatusMessage,\n} from \"@itwin/itwinui-react\";\nimport * as React from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { ExtractionClient, REPORTING_BASE_PATH } from \"@itwin/insights-client\";\nimport { generateUrl, handleError, SkeletonBlock } from \"./utils\";\nimport \"./Extraction.scss\";\nimport {\n SvgStatusError,\n SvgStatusPending,\n SvgStatusPendingHollow,\n SvgStatusSuccess,\n} from \"@itwin/itwinui-icons-color-react\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\n\nexport const REFRESH_DELAY = 2000;\n\nexport enum ExtractionStates {\n None,\n Starting,\n FetchingUpdate,\n Queued,\n Running,\n Succeeded,\n Failed,\n}\ninterface ExtractionStatusProps {\n state: ExtractionStates;\n setExtractionState?: React.Dispatch<React.SetStateAction<ExtractionStates>>;\n children?: React.ReactNode;\n}\n\nexport const ExtractionStatus = ({\n state,\n children,\n setExtractionState,\n}: ExtractionStatusProps) => {\n const [fadeOut, setFadeOut] = useState<boolean>(false);\n\n const onAnimationEnd = () => {\n if (setExtractionState) {\n setExtractionState(ExtractionStates.None);\n setFadeOut(false);\n }\n };\n\n useEffect(() => {\n let timer: number;\n switch (state) {\n case ExtractionStates.Succeeded:\n case ExtractionStates.Failed:\n timer = window.setTimeout(() => setFadeOut(true), 5000);\n }\n return () => clearTimeout(timer);\n }, [state, setExtractionState]);\n\n switch (state) {\n case ExtractionStates.Starting:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Starting\"\n )}\n className=\"extraction-status\"\n >\n <div className=\"status-icon\">\n <SvgStatusPendingHollow />\n </div>\n </div>\n );\n case ExtractionStates.FetchingUpdate:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Loading\"\n )}\n className=\"extraction-status\"\n >\n <ProgressRadial size=\"x-small\" indeterminate />\n </div>\n );\n case ExtractionStates.Queued:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Queued\"\n )}\n className=\"extraction-status\"\n >\n <div className=\"status-icon\">\n <SvgStatusPending />\n </div>\n </div>\n );\n case ExtractionStates.Running:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Running\"\n )}\n className=\"extraction-status\"\n >\n <ProgressRadial size=\"x-small\" indeterminate />\n </div>\n );\n case ExtractionStates.Succeeded:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Success\"\n )}\n className=\"extraction-status\"\n >\n <div\n className={`status-icon`}\n style={{\n animationName: fadeOut ? \"rcw-fade-out\" : \"\",\n animationDelay: \"5s\",\n animationDuration: \"1s\",\n }}\n onAnimationEnd={onAnimationEnd}\n >\n <SvgStatusSuccess />\n </div>\n </div>\n );\n case ExtractionStates.Failed:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Failed\"\n )}\n className=\"extraction-status\"\n >\n <div\n className={`status-icon`}\n style={{\n animationName: fadeOut ? \"rcw-fade-out\" : \"\",\n animationDelay: \"5s\",\n animationDuration: \"1s\",\n }}\n onAnimationEnd={onAnimationEnd}\n >\n <SvgStatusError />\n </div>\n </div>\n );\n default:\n return <>{children}</>;\n }\n};\n\ninterface ExtractionProps {\n iModels: Map<string, string>;\n setExtractingIModelId: React.Dispatch<React.SetStateAction<string>>;\n extractionState: ExtractionStates;\n setExtractionState: React.Dispatch<React.SetStateAction<ExtractionStates>>;\n isLoading: boolean;\n}\n\nexport const Extraction = ({\n iModels,\n setExtractingIModelId,\n extractionState,\n setExtractionState,\n isLoading,\n}: ExtractionProps) => {\n const jobId = useRef<string>(\"\");\n const intervalId = useRef<number>();\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const [currentIModelId, setCurrentIModelId] = useState<string>();\n const apiConfig = useReportsApiConfig();\n\n const runExtraction = async (iModelId: string) => {\n try {\n setExtractionState(ExtractionStates.Starting);\n setExtractingIModelId(iModelId);\n const extractionClientApi = new ExtractionClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n const response = await extractionClientApi.runExtraction(\n accessToken,\n iModelId\n );\n jobId.current = response.id;\n setIsRunning(true);\n setExtractionState(ExtractionStates.FetchingUpdate);\n } catch (error: any) {\n handleError(error.status);\n setExtractionState(ExtractionStates.Failed);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n }\n };\n\n useEffect(() => {\n if (!intervalId.current && isRunning) {\n const newIntervalId = window.setInterval(async () => {\n const extractionClientApi = new ExtractionClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n const response = await extractionClientApi.getExtractionStatus(\n accessToken,\n jobId.current\n );\n if (response.state === \"Queued\") {\n setExtractionState(ExtractionStates.Queued);\n } else if (response.state === \"Running\") {\n setExtractionState(ExtractionStates.Running);\n } else if (response.state === \"Succeeded\") {\n setExtractionState(ExtractionStates.Succeeded);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n } else if (response.state === \"Failed\") {\n setExtractionState(ExtractionStates.Failed);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n }\n }, REFRESH_DELAY);\n intervalId.current = newIntervalId;\n } else if (intervalId && !isRunning) {\n window.clearInterval(intervalId.current);\n intervalId.current = undefined;\n }\n return () => window.clearInterval(intervalId.current);\n }, [apiConfig, isRunning, jobId, setExtractionState]);\n\n const iModelOptions = useMemo(() => {\n const newIModelOptions: SelectOption<string>[] = [];\n\n for (const [iModelId, iModelName] of iModels.entries()) {\n newIModelOptions.push({\n label: iModelName,\n value: iModelId,\n key: iModelId,\n disabled: extractionState !== ExtractionStates.None,\n });\n }\n\n return newIModelOptions;\n }, [iModels, extractionState]);\n\n return (\n <div className=\"extraction-container\">\n <div className=\"extraction-combo-box\" data-testid=\"extraction-combo-box\">\n <Label htmlFor=\"combo-input\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateDataset\"\n )}\n </Label>\n {isLoading ? (\n <SkeletonBlock />\n ) : (\n <ComboBox\n options={iModelOptions}\n value={currentIModelId}\n onChange={async (value) => {\n setCurrentIModelId(value);\n value && await runExtraction(value);\n }}\n inputProps={{\n id: \"combo-input\",\n placeholder: ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:SelectIModel\"\n ),\n }}\n message={\n extractionState !== ExtractionStates.None && (\n <StatusMessage>\n <div className=\"extraction-status-container\">\n <ExtractionStatus\n state={extractionState}\n setExtractionState={setExtractionState}\n />\n {(() => {\n switch (extractionState) {\n case ExtractionStates.Succeeded: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Success\"\n );\n }\n case ExtractionStates.Failed: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Failed\"\n );\n }\n default: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateInProgress\"\n );\n }\n }\n })()}\n </div>\n </StatusMessage>\n )\n }\n />\n )}\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
@import "~@itwin/itwinui-css/scss/variables";
|
|
6
|
-
|
|
7
|
-
.extraction-container {
|
|
8
|
-
display: flex;
|
|
9
|
-
justify-content: space-between;
|
|
10
|
-
align-items: center;
|
|
11
|
-
gap: $iui-s;
|
|
12
|
-
.extraction-combo-box {
|
|
13
|
-
display: flex;
|
|
14
|
-
flex-direction: column;
|
|
15
|
-
flex-grow: 1;
|
|
16
|
-
}
|
|
17
|
-
.extraction-status-container {
|
|
18
|
-
display: flex;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.extraction-status {
|
|
23
|
-
display: flex;
|
|
24
|
-
align-items: center;
|
|
25
|
-
margin: 0 $iui-s;
|
|
26
|
-
.status-icon {
|
|
27
|
-
width: $iui-icons-default;
|
|
28
|
-
height: $iui-icons-default;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@keyframes rcw-fade-out {
|
|
33
|
-
0% {
|
|
34
|
-
opacity: 1;
|
|
35
|
-
}
|
|
36
|
-
100% {
|
|
37
|
-
opacity: 0;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import "./Extraction.scss";
|
|
3
|
-
export declare const REFRESH_DELAY = 2000;
|
|
4
|
-
export declare enum ExtractionStates {
|
|
5
|
-
None = 0,
|
|
6
|
-
Starting = 1,
|
|
7
|
-
FetchingUpdate = 2,
|
|
8
|
-
Queued = 3,
|
|
9
|
-
Running = 4,
|
|
10
|
-
Succeeded = 5,
|
|
11
|
-
Failed = 6
|
|
12
|
-
}
|
|
13
|
-
interface ExtractionStatusProps {
|
|
14
|
-
state: ExtractionStates;
|
|
15
|
-
setExtractionState?: React.Dispatch<React.SetStateAction<ExtractionStates>>;
|
|
16
|
-
children?: React.ReactNode;
|
|
17
|
-
}
|
|
18
|
-
export declare const ExtractionStatus: ({ state, children, setExtractionState, }: ExtractionStatusProps) => JSX.Element;
|
|
19
|
-
interface ExtractionProps {
|
|
20
|
-
iModels: Map<string, string>;
|
|
21
|
-
setExtractingIModelId: React.Dispatch<React.SetStateAction<string>>;
|
|
22
|
-
extractionState: ExtractionStates;
|
|
23
|
-
setExtractionState: React.Dispatch<React.SetStateAction<ExtractionStates>>;
|
|
24
|
-
isLoading: boolean;
|
|
25
|
-
}
|
|
26
|
-
export declare const Extraction: ({ iModels, setExtractingIModelId, extractionState, setExtractionState, isLoading, }: ExtractionProps) => JSX.Element;
|
|
27
|
-
export {};
|
|
28
|
-
//# sourceMappingURL=Extraction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Extraction.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/Extraction.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,mBAAmB,CAAC;AAU3B,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,oBAAY,gBAAgB;IAC1B,IAAI,IAAA;IACJ,QAAQ,IAAA;IACR,cAAc,IAAA;IACd,MAAM,IAAA;IACN,OAAO,IAAA;IACP,SAAS,IAAA;IACT,MAAM,IAAA;CACP;AACD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,gBAAgB,CAAC;IACxB,kBAAkB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5E,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,eAAO,MAAM,gBAAgB,6CAI1B,qBAAqB,gBAkHvB,CAAC;AAEF,UAAU,eAAe;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE,eAAe,EAAE,gBAAgB,CAAC;IAClC,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,wFAMpB,eAAe,gBA0IjB,CAAC"}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { ComboBox, Label, ProgressRadial, StatusMessage, } from "@itwin/itwinui-react";
|
|
2
|
-
import * as React from "react";
|
|
3
|
-
import { useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
-
import { ExtractionClient, REPORTING_BASE_PATH } from "@itwin/insights-client";
|
|
5
|
-
import { generateUrl, handleError, SkeletonBlock } from "./utils";
|
|
6
|
-
import "./Extraction.scss";
|
|
7
|
-
import { SvgStatusError, SvgStatusPending, SvgStatusPendingHollow, SvgStatusSuccess, } from "@itwin/itwinui-icons-color-react";
|
|
8
|
-
import { useReportsApiConfig } from "../context/ReportsApiConfigContext";
|
|
9
|
-
import { ReportsConfigWidget } from "../../ReportsConfigWidget";
|
|
10
|
-
export const REFRESH_DELAY = 2000;
|
|
11
|
-
export var ExtractionStates;
|
|
12
|
-
(function (ExtractionStates) {
|
|
13
|
-
ExtractionStates[ExtractionStates["None"] = 0] = "None";
|
|
14
|
-
ExtractionStates[ExtractionStates["Starting"] = 1] = "Starting";
|
|
15
|
-
ExtractionStates[ExtractionStates["FetchingUpdate"] = 2] = "FetchingUpdate";
|
|
16
|
-
ExtractionStates[ExtractionStates["Queued"] = 3] = "Queued";
|
|
17
|
-
ExtractionStates[ExtractionStates["Running"] = 4] = "Running";
|
|
18
|
-
ExtractionStates[ExtractionStates["Succeeded"] = 5] = "Succeeded";
|
|
19
|
-
ExtractionStates[ExtractionStates["Failed"] = 6] = "Failed";
|
|
20
|
-
})(ExtractionStates || (ExtractionStates = {}));
|
|
21
|
-
export const ExtractionStatus = ({ state, children, setExtractionState, }) => {
|
|
22
|
-
const [fadeOut, setFadeOut] = useState(false);
|
|
23
|
-
const onAnimationEnd = () => {
|
|
24
|
-
if (setExtractionState) {
|
|
25
|
-
setExtractionState(ExtractionStates.None);
|
|
26
|
-
setFadeOut(false);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
useEffect(() => {
|
|
30
|
-
let timer;
|
|
31
|
-
switch (state) {
|
|
32
|
-
case ExtractionStates.Succeeded:
|
|
33
|
-
case ExtractionStates.Failed:
|
|
34
|
-
timer = window.setTimeout(() => setFadeOut(true), 5000);
|
|
35
|
-
}
|
|
36
|
-
return () => clearTimeout(timer);
|
|
37
|
-
}, [state, setExtractionState]);
|
|
38
|
-
switch (state) {
|
|
39
|
-
case ExtractionStates.Starting:
|
|
40
|
-
return (React.createElement("div", { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Starting"), className: "extraction-status" },
|
|
41
|
-
React.createElement("div", { className: "status-icon" },
|
|
42
|
-
React.createElement(SvgStatusPendingHollow, null))));
|
|
43
|
-
case ExtractionStates.FetchingUpdate:
|
|
44
|
-
return (React.createElement("div", { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Loading"), className: "extraction-status" },
|
|
45
|
-
React.createElement(ProgressRadial, { size: "x-small", indeterminate: true })));
|
|
46
|
-
case ExtractionStates.Queued:
|
|
47
|
-
return (React.createElement("div", { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Queued"), className: "extraction-status" },
|
|
48
|
-
React.createElement("div", { className: "status-icon" },
|
|
49
|
-
React.createElement(SvgStatusPending, null))));
|
|
50
|
-
case ExtractionStates.Running:
|
|
51
|
-
return (React.createElement("div", { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Running"), className: "extraction-status" },
|
|
52
|
-
React.createElement(ProgressRadial, { size: "x-small", indeterminate: true })));
|
|
53
|
-
case ExtractionStates.Succeeded:
|
|
54
|
-
return (React.createElement("div", { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Success"), className: "extraction-status" },
|
|
55
|
-
React.createElement("div", { className: `status-icon`, style: {
|
|
56
|
-
animationName: fadeOut ? "rcw-fade-out" : "",
|
|
57
|
-
animationDelay: "5s",
|
|
58
|
-
animationDuration: "1s",
|
|
59
|
-
}, onAnimationEnd: onAnimationEnd },
|
|
60
|
-
React.createElement(SvgStatusSuccess, null))));
|
|
61
|
-
case ExtractionStates.Failed:
|
|
62
|
-
return (React.createElement("div", { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Failed"), className: "extraction-status" },
|
|
63
|
-
React.createElement("div", { className: `status-icon`, style: {
|
|
64
|
-
animationName: fadeOut ? "rcw-fade-out" : "",
|
|
65
|
-
animationDelay: "5s",
|
|
66
|
-
animationDuration: "1s",
|
|
67
|
-
}, onAnimationEnd: onAnimationEnd },
|
|
68
|
-
React.createElement(SvgStatusError, null))));
|
|
69
|
-
default:
|
|
70
|
-
return React.createElement(React.Fragment, null, children);
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
export const Extraction = ({ iModels, setExtractingIModelId, extractionState, setExtractionState, isLoading, }) => {
|
|
74
|
-
const jobId = useRef("");
|
|
75
|
-
const intervalId = useRef();
|
|
76
|
-
const [isRunning, setIsRunning] = useState(false);
|
|
77
|
-
const [currentIModelId, setCurrentIModelId] = useState();
|
|
78
|
-
const apiConfig = useReportsApiConfig();
|
|
79
|
-
const runExtraction = async (iModelId) => {
|
|
80
|
-
try {
|
|
81
|
-
setExtractionState(ExtractionStates.Starting);
|
|
82
|
-
setExtractingIModelId(iModelId);
|
|
83
|
-
const extractionClientApi = new ExtractionClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
|
|
84
|
-
const accessToken = await apiConfig.getAccessToken();
|
|
85
|
-
const response = await extractionClientApi.runExtraction(accessToken, iModelId);
|
|
86
|
-
jobId.current = response.id;
|
|
87
|
-
setIsRunning(true);
|
|
88
|
-
setExtractionState(ExtractionStates.FetchingUpdate);
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
handleError(error.status);
|
|
92
|
-
setExtractionState(ExtractionStates.Failed);
|
|
93
|
-
setIsRunning(false);
|
|
94
|
-
setCurrentIModelId(undefined);
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
useEffect(() => {
|
|
98
|
-
if (!intervalId.current && isRunning) {
|
|
99
|
-
const newIntervalId = window.setInterval(async () => {
|
|
100
|
-
const extractionClientApi = new ExtractionClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
|
|
101
|
-
const accessToken = await apiConfig.getAccessToken();
|
|
102
|
-
const response = await extractionClientApi.getExtractionStatus(accessToken, jobId.current);
|
|
103
|
-
if (response.state === "Queued") {
|
|
104
|
-
setExtractionState(ExtractionStates.Queued);
|
|
105
|
-
}
|
|
106
|
-
else if (response.state === "Running") {
|
|
107
|
-
setExtractionState(ExtractionStates.Running);
|
|
108
|
-
}
|
|
109
|
-
else if (response.state === "Succeeded") {
|
|
110
|
-
setExtractionState(ExtractionStates.Succeeded);
|
|
111
|
-
setIsRunning(false);
|
|
112
|
-
setCurrentIModelId(undefined);
|
|
113
|
-
}
|
|
114
|
-
else if (response.state === "Failed") {
|
|
115
|
-
setExtractionState(ExtractionStates.Failed);
|
|
116
|
-
setIsRunning(false);
|
|
117
|
-
setCurrentIModelId(undefined);
|
|
118
|
-
}
|
|
119
|
-
}, REFRESH_DELAY);
|
|
120
|
-
intervalId.current = newIntervalId;
|
|
121
|
-
}
|
|
122
|
-
else if (intervalId && !isRunning) {
|
|
123
|
-
window.clearInterval(intervalId.current);
|
|
124
|
-
intervalId.current = undefined;
|
|
125
|
-
}
|
|
126
|
-
return () => window.clearInterval(intervalId.current);
|
|
127
|
-
}, [apiConfig, isRunning, jobId, setExtractionState]);
|
|
128
|
-
const iModelOptions = useMemo(() => {
|
|
129
|
-
const newIModelOptions = [];
|
|
130
|
-
for (const [iModelId, iModelName] of iModels.entries()) {
|
|
131
|
-
newIModelOptions.push({
|
|
132
|
-
label: iModelName,
|
|
133
|
-
value: iModelId,
|
|
134
|
-
key: iModelId,
|
|
135
|
-
disabled: extractionState !== ExtractionStates.None,
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
return newIModelOptions;
|
|
139
|
-
}, [iModels, extractionState]);
|
|
140
|
-
return (React.createElement("div", { className: "extraction-container" },
|
|
141
|
-
React.createElement("div", { className: "extraction-combo-box", "data-testid": "extraction-combo-box" },
|
|
142
|
-
React.createElement(Label, { htmlFor: "combo-input" }, ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:UpdateDataset")),
|
|
143
|
-
isLoading ? (React.createElement(SkeletonBlock, null)) : (React.createElement(ComboBox, { options: iModelOptions, value: currentIModelId, onChange: async (value) => {
|
|
144
|
-
setCurrentIModelId(value);
|
|
145
|
-
value && await runExtraction(value);
|
|
146
|
-
}, inputProps: {
|
|
147
|
-
id: "combo-input",
|
|
148
|
-
placeholder: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:SelectIModel"),
|
|
149
|
-
}, message: extractionState !== ExtractionStates.None && (React.createElement(StatusMessage, null,
|
|
150
|
-
React.createElement("div", { className: "extraction-status-container" },
|
|
151
|
-
React.createElement(ExtractionStatus, { state: extractionState, setExtractionState: setExtractionState }),
|
|
152
|
-
(() => {
|
|
153
|
-
switch (extractionState) {
|
|
154
|
-
case ExtractionStates.Succeeded: {
|
|
155
|
-
return ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Success");
|
|
156
|
-
}
|
|
157
|
-
case ExtractionStates.Failed: {
|
|
158
|
-
return ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Failed");
|
|
159
|
-
}
|
|
160
|
-
default: {
|
|
161
|
-
return ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:UpdateInProgress");
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
})()))) })))));
|
|
165
|
-
};
|
|
166
|
-
//# sourceMappingURL=Extraction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Extraction.js","sourceRoot":"","sources":["../../../../src/widget/components/Extraction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport {\n ComboBox,\n Label,\n ProgressRadial,\n StatusMessage,\n} from \"@itwin/itwinui-react\";\nimport * as React from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { ExtractionClient, REPORTING_BASE_PATH } from \"@itwin/insights-client\";\nimport { generateUrl, handleError, SkeletonBlock } from \"./utils\";\nimport \"./Extraction.scss\";\nimport {\n SvgStatusError,\n SvgStatusPending,\n SvgStatusPendingHollow,\n SvgStatusSuccess,\n} from \"@itwin/itwinui-icons-color-react\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\n\nexport const REFRESH_DELAY = 2000;\n\nexport enum ExtractionStates {\n None,\n Starting,\n FetchingUpdate,\n Queued,\n Running,\n Succeeded,\n Failed,\n}\ninterface ExtractionStatusProps {\n state: ExtractionStates;\n setExtractionState?: React.Dispatch<React.SetStateAction<ExtractionStates>>;\n children?: React.ReactNode;\n}\n\nexport const ExtractionStatus = ({\n state,\n children,\n setExtractionState,\n}: ExtractionStatusProps) => {\n const [fadeOut, setFadeOut] = useState<boolean>(false);\n\n const onAnimationEnd = () => {\n if (setExtractionState) {\n setExtractionState(ExtractionStates.None);\n setFadeOut(false);\n }\n };\n\n useEffect(() => {\n let timer: number;\n switch (state) {\n case ExtractionStates.Succeeded:\n case ExtractionStates.Failed:\n timer = window.setTimeout(() => setFadeOut(true), 5000);\n }\n return () => clearTimeout(timer);\n }, [state, setExtractionState]);\n\n switch (state) {\n case ExtractionStates.Starting:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Starting\"\n )}\n className=\"extraction-status\"\n >\n <div className=\"status-icon\">\n <SvgStatusPendingHollow />\n </div>\n </div>\n );\n case ExtractionStates.FetchingUpdate:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Loading\"\n )}\n className=\"extraction-status\"\n >\n <ProgressRadial size=\"x-small\" indeterminate />\n </div>\n );\n case ExtractionStates.Queued:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Queued\"\n )}\n className=\"extraction-status\"\n >\n <div className=\"status-icon\">\n <SvgStatusPending />\n </div>\n </div>\n );\n case ExtractionStates.Running:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Running\"\n )}\n className=\"extraction-status\"\n >\n <ProgressRadial size=\"x-small\" indeterminate />\n </div>\n );\n case ExtractionStates.Succeeded:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Success\"\n )}\n className=\"extraction-status\"\n >\n <div\n className={`status-icon`}\n style={{\n animationName: fadeOut ? \"rcw-fade-out\" : \"\",\n animationDelay: \"5s\",\n animationDuration: \"1s\",\n }}\n onAnimationEnd={onAnimationEnd}\n >\n <SvgStatusSuccess />\n </div>\n </div>\n );\n case ExtractionStates.Failed:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Failed\"\n )}\n className=\"extraction-status\"\n >\n <div\n className={`status-icon`}\n style={{\n animationName: fadeOut ? \"rcw-fade-out\" : \"\",\n animationDelay: \"5s\",\n animationDuration: \"1s\",\n }}\n onAnimationEnd={onAnimationEnd}\n >\n <SvgStatusError />\n </div>\n </div>\n );\n default:\n return <>{children}</>;\n }\n};\n\ninterface ExtractionProps {\n iModels: Map<string, string>;\n setExtractingIModelId: React.Dispatch<React.SetStateAction<string>>;\n extractionState: ExtractionStates;\n setExtractionState: React.Dispatch<React.SetStateAction<ExtractionStates>>;\n isLoading: boolean;\n}\n\nexport const Extraction = ({\n iModels,\n setExtractingIModelId,\n extractionState,\n setExtractionState,\n isLoading,\n}: ExtractionProps) => {\n const jobId = useRef<string>(\"\");\n const intervalId = useRef<number>();\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const [currentIModelId, setCurrentIModelId] = useState<string>();\n const apiConfig = useReportsApiConfig();\n\n const runExtraction = async (iModelId: string) => {\n try {\n setExtractionState(ExtractionStates.Starting);\n setExtractingIModelId(iModelId);\n const extractionClientApi = new ExtractionClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n const response = await extractionClientApi.runExtraction(\n accessToken,\n iModelId\n );\n jobId.current = response.id;\n setIsRunning(true);\n setExtractionState(ExtractionStates.FetchingUpdate);\n } catch (error: any) {\n handleError(error.status);\n setExtractionState(ExtractionStates.Failed);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n }\n };\n\n useEffect(() => {\n if (!intervalId.current && isRunning) {\n const newIntervalId = window.setInterval(async () => {\n const extractionClientApi = new ExtractionClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n const response = await extractionClientApi.getExtractionStatus(\n accessToken,\n jobId.current\n );\n if (response.state === \"Queued\") {\n setExtractionState(ExtractionStates.Queued);\n } else if (response.state === \"Running\") {\n setExtractionState(ExtractionStates.Running);\n } else if (response.state === \"Succeeded\") {\n setExtractionState(ExtractionStates.Succeeded);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n } else if (response.state === \"Failed\") {\n setExtractionState(ExtractionStates.Failed);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n }\n }, REFRESH_DELAY);\n intervalId.current = newIntervalId;\n } else if (intervalId && !isRunning) {\n window.clearInterval(intervalId.current);\n intervalId.current = undefined;\n }\n return () => window.clearInterval(intervalId.current);\n }, [apiConfig, isRunning, jobId, setExtractionState]);\n\n const iModelOptions = useMemo(() => {\n const newIModelOptions: SelectOption<string>[] = [];\n\n for (const [iModelId, iModelName] of iModels.entries()) {\n newIModelOptions.push({\n label: iModelName,\n value: iModelId,\n key: iModelId,\n disabled: extractionState !== ExtractionStates.None,\n });\n }\n\n return newIModelOptions;\n }, [iModels, extractionState]);\n\n return (\n <div className=\"extraction-container\">\n <div className=\"extraction-combo-box\" data-testid=\"extraction-combo-box\">\n <Label htmlFor=\"combo-input\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateDataset\"\n )}\n </Label>\n {isLoading ? (\n <SkeletonBlock />\n ) : (\n <ComboBox\n options={iModelOptions}\n value={currentIModelId}\n onChange={async (value) => {\n setCurrentIModelId(value);\n value && await runExtraction(value);\n }}\n inputProps={{\n id: \"combo-input\",\n placeholder: ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:SelectIModel\"\n ),\n }}\n message={\n extractionState !== ExtractionStates.None && (\n <StatusMessage>\n <div className=\"extraction-status-container\">\n <ExtractionStatus\n state={extractionState}\n setExtractionState={setExtractionState}\n />\n {(() => {\n switch (extractionState) {\n case ExtractionStates.Succeeded: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Success\"\n );\n }\n case ExtractionStates.Failed: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Failed\"\n );\n }\n default: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateInProgress\"\n );\n }\n }\n })()}\n </div>\n </StatusMessage>\n )\n }\n />\n )}\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
@import "~@itwin/itwinui-css/scss/variables";
|
|
6
|
-
|
|
7
|
-
.extraction-container {
|
|
8
|
-
display: flex;
|
|
9
|
-
justify-content: space-between;
|
|
10
|
-
align-items: center;
|
|
11
|
-
gap: $iui-s;
|
|
12
|
-
.extraction-combo-box {
|
|
13
|
-
display: flex;
|
|
14
|
-
flex-direction: column;
|
|
15
|
-
flex-grow: 1;
|
|
16
|
-
}
|
|
17
|
-
.extraction-status-container {
|
|
18
|
-
display: flex;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.extraction-status {
|
|
23
|
-
display: flex;
|
|
24
|
-
align-items: center;
|
|
25
|
-
margin: 0 $iui-s;
|
|
26
|
-
.status-icon {
|
|
27
|
-
width: $iui-icons-default;
|
|
28
|
-
height: $iui-icons-default;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@keyframes rcw-fade-out {
|
|
33
|
-
0% {
|
|
34
|
-
opacity: 1;
|
|
35
|
-
}
|
|
36
|
-
100% {
|
|
37
|
-
opacity: 0;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
@import "~@itwin/itwinui-css/scss/variables";
|
|
6
|
-
|
|
7
|
-
.extraction-container {
|
|
8
|
-
display: flex;
|
|
9
|
-
justify-content: space-between;
|
|
10
|
-
align-items: center;
|
|
11
|
-
gap: $iui-s;
|
|
12
|
-
.extraction-combo-box {
|
|
13
|
-
display: flex;
|
|
14
|
-
flex-direction: column;
|
|
15
|
-
flex-grow: 1;
|
|
16
|
-
}
|
|
17
|
-
.extraction-status-container {
|
|
18
|
-
display: flex;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.extraction-status {
|
|
23
|
-
display: flex;
|
|
24
|
-
align-items: center;
|
|
25
|
-
margin: 0 $iui-s;
|
|
26
|
-
.status-icon {
|
|
27
|
-
width: $iui-icons-default;
|
|
28
|
-
height: $iui-icons-default;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@keyframes rcw-fade-out {
|
|
33
|
-
0% {
|
|
34
|
-
opacity: 1;
|
|
35
|
-
}
|
|
36
|
-
100% {
|
|
37
|
-
opacity: 0;
|
|
38
|
-
}
|
|
39
|
-
}
|