@itwin/one-click-lca-react 0.3.0 → 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/lib/cjs/components/ExportModal.js +83 -41
- package/lib/cjs/components/ExportModal.js.map +1 -1
- package/lib/cjs/components/ExportModal.scss +14 -16
- package/lib/cjs/components/OneClickLCA.js +7 -2
- package/lib/cjs/components/OneClickLCA.js.map +1 -1
- package/lib/cjs/components/Reports.js +41 -16
- package/lib/cjs/components/Reports.js.map +1 -1
- package/lib/cjs/components/Reports.scss +3 -5
- package/lib/cjs/components/utils.js +8 -2
- package/lib/cjs/components/utils.js.map +1 -1
- package/lib/cjs/components/utils.scss +4 -12
- package/lib/cjs/test/ExportModal.test.js +9 -5
- package/lib/cjs/test/ExportModal.test.js.map +1 -1
- package/lib/cjs/test/WidgetHeader.test.js +20 -16
- package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
- package/lib/cjs/widgets/OneClickLCAWidget.d.ts +3 -3
- package/lib/cjs/widgets/OneClickLCAWidget.js +6 -8
- package/lib/cjs/widgets/OneClickLCAWidget.js.map +1 -1
- package/lib/esm/components/ExportModal.js +39 -16
- package/lib/esm/components/ExportModal.js.map +1 -1
- package/lib/esm/components/ExportModal.scss +14 -16
- package/lib/esm/components/OneClickLCA.js +7 -2
- package/lib/esm/components/OneClickLCA.js.map +1 -1
- package/lib/esm/components/Reports.js +12 -6
- package/lib/esm/components/Reports.js.map +1 -1
- package/lib/esm/components/Reports.scss +3 -5
- package/lib/esm/components/utils.js +5 -2
- package/lib/esm/components/utils.js.map +1 -1
- package/lib/esm/components/utils.scss +4 -12
- package/lib/esm/test/ExportModal.test.js +6 -2
- package/lib/esm/test/ExportModal.test.js.map +1 -1
- package/lib/esm/test/WidgetHeader.test.js +14 -13
- package/lib/esm/test/WidgetHeader.test.js.map +1 -1
- package/lib/esm/widgets/OneClickLCAWidget.d.ts +3 -3
- package/lib/esm/widgets/OneClickLCAWidget.js +3 -5
- package/lib/esm/widgets/OneClickLCAWidget.js.map +1 -1
- package/package.json +27 -27
|
@@ -2,8 +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
|
-
|
|
7
5
|
.oclca {
|
|
8
6
|
&-scrollable-table {
|
|
9
7
|
overflow-y: scroll;
|
|
@@ -24,8 +22,8 @@
|
|
|
24
22
|
&-reports-container {
|
|
25
23
|
display: flex;
|
|
26
24
|
flex-direction: column;
|
|
27
|
-
gap:
|
|
28
|
-
margin-bottom:
|
|
25
|
+
gap: var(--iui-size-s);
|
|
26
|
+
margin-bottom: var(--iui-size-l);
|
|
29
27
|
max-height: 80%;
|
|
30
28
|
}
|
|
31
29
|
|
|
@@ -36,7 +34,7 @@
|
|
|
36
34
|
&-container {
|
|
37
35
|
display: flex;
|
|
38
36
|
flex-direction: column;
|
|
39
|
-
padding:
|
|
37
|
+
padding: var(--iui-size-s) var(--iui-size-m);
|
|
40
38
|
box-sizing: border-box;
|
|
41
39
|
height: 100%;
|
|
42
40
|
overflow: auto;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.WidgetHeader = void 0;
|
|
4
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
7
|
/*---------------------------------------------------------------------------------------------
|
|
6
8
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
7
9
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -9,8 +11,12 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
9
11
|
const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
|
|
10
12
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
11
13
|
require("./utils.scss");
|
|
14
|
+
const react_1 = __importDefault(require("react"));
|
|
12
15
|
const WidgetHeader = ({ title, disabled = false, returnFn, }) => {
|
|
13
|
-
return (
|
|
16
|
+
return (react_1.default.createElement("div", { className: "oclca-widget-header-container" },
|
|
17
|
+
returnFn && (react_1.default.createElement("div", { className: disabled ? "oclca-chevron-disabled" : "oclca-chevron", onClick: disabled ? undefined : returnFn, onKeyUp: disabled ? undefined : returnFn },
|
|
18
|
+
react_1.default.createElement(itwinui_icons_react_1.SvgChevronLeft, null))),
|
|
19
|
+
react_1.default.createElement(itwinui_react_1.Text, { className: "oclca-title", variant: "title" }, title)));
|
|
14
20
|
};
|
|
15
21
|
exports.WidgetHeader = WidgetHeader;
|
|
16
22
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/utils.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/utils.tsx"],"names":[],"mappings":";;;;;;AAAA;;;+FAG+F;AAC/F,oEAA4D;AAC5D,wDAA4C;AAC5C,wBAAsB;AACtB,kDAA0B;AAQnB,MAAM,YAAY,GAAG,CAAC,EAC3B,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,QAAQ,GACU,EAAE,EAAE;IACtB,OAAO,CACL,uCAAK,SAAS,EAAC,+BAA+B;QAC3C,QAAQ,IAAI,CACX,uCACE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,eAAe,EAChE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EACxC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAExC,8BAAC,oCAAc,OAAG,CACd,CACP;QACD,8BAAC,oBAAI,IAAC,SAAS,EAAC,aAAa,EAAC,OAAO,EAAC,OAAO,IAC1C,KAAK,CACD,CACH,CACP,CAAC;AACJ,CAAC,CAAC;AArBW,QAAA,YAAY,gBAqBvB","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 { SvgChevronLeft } from \"@itwin/itwinui-icons-react\";\nimport { Text } from \"@itwin/itwinui-react\";\nimport \"./utils.scss\";\nimport React from \"react\";\n\nexport interface WidgetHeaderProps {\n title: string;\n disabled?: boolean;\n returnFn?: () => Promise<void>;\n}\n\nexport const WidgetHeader = ({\n title,\n disabled = false,\n returnFn,\n}: WidgetHeaderProps) => {\n return (\n <div className=\"oclca-widget-header-container\">\n {returnFn && (\n <div\n className={disabled ? \"oclca-chevron-disabled\" : \"oclca-chevron\"}\n onClick={disabled ? undefined : returnFn}\n onKeyUp={disabled ? undefined : returnFn}\n >\n <SvgChevronLeft />\n </div>\n )}\n <Text className=\"oclca-title\" variant=\"title\">\n {title}\n </Text>\n </div>\n );\n};\n"]}
|
|
@@ -2,29 +2,21 @@
|
|
|
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
|
-
@import "~@itwin/itwinui-css/scss/icon/index";
|
|
7
|
-
@import "~@itwin/itwinui-css/scss/button/index";
|
|
8
|
-
|
|
9
5
|
.oclca-widget-header-container {
|
|
10
6
|
display: flex;
|
|
11
|
-
margin-bottom:
|
|
7
|
+
margin-bottom: calc(var(--iui-size-s) * 3);
|
|
12
8
|
.oclca-chevron {
|
|
13
|
-
@include iui-icons-large();
|
|
14
9
|
cursor: pointer;
|
|
15
10
|
align-self: center;
|
|
16
|
-
margin-right:
|
|
11
|
+
margin-right: var(--iui-size-xs);
|
|
17
12
|
}
|
|
18
13
|
|
|
19
14
|
.oclca-chevron-disabled {
|
|
20
|
-
|
|
21
|
-
@include themed {
|
|
22
|
-
fill: t(iui-icons-color-actionable-disabled);
|
|
23
|
-
}
|
|
15
|
+
fill: var(--iui-color-icon-disabled);
|
|
24
16
|
cursor: not-allowed;
|
|
25
17
|
|
|
26
18
|
align-self: center;
|
|
27
|
-
margin-right:
|
|
19
|
+
margin-right: var(--iui-size-xs);
|
|
28
20
|
}
|
|
29
21
|
|
|
30
22
|
.oclca-title {
|
|
@@ -3,15 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
|
|
6
|
+
/*---------------------------------------------------------------------------------------------
|
|
7
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
8
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
9
|
+
*--------------------------------------------------------------------------------------------*/
|
|
10
|
+
const react_1 = __importDefault(require("react"));
|
|
7
11
|
require("@testing-library/jest-dom");
|
|
8
|
-
const
|
|
12
|
+
const react_2 = require("@testing-library/react");
|
|
9
13
|
const ExportModal_1 = __importDefault(require("../components/ExportModal"));
|
|
10
14
|
describe("Testing Export Modal", function () {
|
|
11
15
|
it("signin", function () {
|
|
12
|
-
|
|
13
|
-
expect(
|
|
14
|
-
expect(
|
|
16
|
+
(0, react_2.render)(react_1.default.createElement(ExportModal_1.default, { isOpen: true, close: () => { }, reportId: undefined }));
|
|
17
|
+
expect(react_2.screen.getByLabelText("Email")).toBeDefined();
|
|
18
|
+
expect(react_2.screen.getByLabelText("Password")).toBeDefined();
|
|
15
19
|
});
|
|
16
20
|
});
|
|
17
21
|
//# sourceMappingURL=ExportModal.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportModal.test.js","sourceRoot":"","sources":["../../../src/test/ExportModal.test.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExportModal.test.js","sourceRoot":"","sources":["../../../src/test/ExportModal.test.tsx"],"names":[],"mappings":";;;;;AAAA;;;+FAG+F;AAC/F,kDAA0B;AAC1B,qCAAmC;AACnC,kDAAwD;AACxD,4EAAoD;AAEpD,QAAQ,CAAC,sBAAsB,EAAE;IAC/B,EAAE,CAAC,QAAQ,EAAE;QACX,IAAA,cAAM,EAAC,8BAAC,qBAAW,IAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,cAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,CAAC,cAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport { render, screen } from \"@testing-library/react\";\nimport ExportModal from \"../components/ExportModal\";\n\ndescribe(\"Testing Export Modal\", function () {\n it(\"signin\", function () {\n render(<ExportModal isOpen={true} close={() => {}} reportId={undefined} />);\n expect(screen.getByLabelText(\"Email\")).toBeDefined();\n expect(screen.getByLabelText(\"Password\")).toBeDefined();\n });\n});\n"]}
|
|
@@ -1,35 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
6
|
+
/*---------------------------------------------------------------------------------------------
|
|
7
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
8
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
9
|
+
*--------------------------------------------------------------------------------------------*/
|
|
10
|
+
const react_1 = __importDefault(require("react"));
|
|
4
11
|
require("@testing-library/jest-dom");
|
|
5
|
-
const
|
|
12
|
+
const react_2 = require("@testing-library/react");
|
|
6
13
|
const utils_1 = require("../components/utils");
|
|
7
14
|
describe("Widget Header Component", function () {
|
|
8
15
|
it("should have hello as title", function () {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
expect(react_1.screen.getByText("hello")).toBeDefined();
|
|
16
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(utils_1.WidgetHeader, { title: "hello" }));
|
|
17
|
+
expect(react_2.screen.getByText("hello")).toBeDefined();
|
|
12
18
|
expect(container.firstChild).toHaveClass("oclca-widget-header-container");
|
|
13
|
-
expect(
|
|
19
|
+
expect(container.firstChild?.firstChild).toHaveClass("oclca-title");
|
|
14
20
|
});
|
|
15
21
|
it("with return function", function () {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
expect(
|
|
19
|
-
expect((_b = container.firstChild) === null || _b === void 0 ? void 0 : _b.firstChild).not.toHaveClass("oclca-chevron-disabled");
|
|
22
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(utils_1.WidgetHeader, { title: "hello", returnFn: async () => { } }));
|
|
23
|
+
expect(container.firstChild?.firstChild).toHaveClass("oclca-chevron");
|
|
24
|
+
expect(container.firstChild?.firstChild).not.toHaveClass("oclca-chevron-disabled");
|
|
20
25
|
});
|
|
21
26
|
it("with disabled", function () {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
expect(
|
|
25
|
-
expect((_b = container.firstChild) === null || _b === void 0 ? void 0 : _b.firstChild).toHaveClass("oclca-chevron-disabled");
|
|
27
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(utils_1.WidgetHeader, { title: "hello", disabled: true, returnFn: async () => { } }));
|
|
28
|
+
expect(container.firstChild?.firstChild).not.toHaveClass("oclca-chevron");
|
|
29
|
+
expect(container.firstChild?.firstChild).toHaveClass("oclca-chevron-disabled");
|
|
26
30
|
});
|
|
27
31
|
it("with mocked return function", function () {
|
|
28
32
|
const mockReturnFn = jest.fn();
|
|
29
|
-
const { container } =
|
|
33
|
+
const { container } = (0, react_2.render)(react_1.default.createElement(utils_1.WidgetHeader, { title: "hello", returnFn: mockReturnFn }));
|
|
30
34
|
const toTestElement = container.querySelector("SvgChevronLeft");
|
|
31
35
|
if (toTestElement !== null) {
|
|
32
|
-
|
|
36
|
+
react_2.fireEvent.click(toTestElement);
|
|
33
37
|
}
|
|
34
38
|
expect(mockReturnFn).toHaveBeenCalled;
|
|
35
39
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetHeader.test.js","sourceRoot":"","sources":["../../../src/test/WidgetHeader.test.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WidgetHeader.test.js","sourceRoot":"","sources":["../../../src/test/WidgetHeader.test.tsx"],"names":[],"mappings":";;;;;AAAA;;;+FAG+F;AAC/F,kDAA0B;AAC1B,qCAAmC;AACnC,kDAAmE;AACnE,+CAAmD;AAEnD,QAAQ,CAAC,yBAAyB,EAAE;IAClC,EAAE,CAAC,4BAA4B,EAAE;QAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAAC,8BAAC,oBAAY,IAAC,KAAK,EAAC,OAAO,GAAG,CAAC,CAAC;QAC7D,MAAM,CAAC,cAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QAC1E,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,oBAAY,IAAC,KAAK,EAAC,OAAO,EAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,GAAI,CACzD,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,WAAW,CACtD,wBAAwB,CACzB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,EAAE;QAClB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,oBAAY,IAAC,KAAK,EAAC,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,GAAI,CACzE,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAC1E,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,WAAW,CAClD,wBAAwB,CACzB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAC1B,8BAAC,oBAAY,IAAC,KAAK,EAAC,OAAO,EAAC,QAAQ,EAAE,YAAY,GAAI,CACvD,CAAC;QAEF,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAChE,IAAI,aAAa,KAAK,IAAI,EAAE;YAC1B,iBAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;SAChC;QACD,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport { fireEvent, render, screen } from \"@testing-library/react\";\nimport { WidgetHeader } from \"../components/utils\";\n\ndescribe(\"Widget Header Component\", function () {\n it(\"should have hello as title\", function () {\n const { container } = render(<WidgetHeader title=\"hello\" />);\n expect(screen.getByText(\"hello\")).toBeDefined();\n expect(container.firstChild).toHaveClass(\"oclca-widget-header-container\");\n expect(container.firstChild?.firstChild).toHaveClass(\"oclca-title\");\n });\n\n it(\"with return function\", function () {\n const { container } = render(\n <WidgetHeader title=\"hello\" returnFn={async () => {}} />\n );\n expect(container.firstChild?.firstChild).toHaveClass(\"oclca-chevron\");\n expect(container.firstChild?.firstChild).not.toHaveClass(\n \"oclca-chevron-disabled\"\n );\n });\n\n it(\"with disabled\", function () {\n const { container } = render(\n <WidgetHeader title=\"hello\" disabled={true} returnFn={async () => {}} />\n );\n expect(container.firstChild?.firstChild).not.toHaveClass(\"oclca-chevron\");\n expect(container.firstChild?.firstChild).toHaveClass(\n \"oclca-chevron-disabled\"\n );\n });\n\n it(\"with mocked return function\", function () {\n const mockReturnFn = jest.fn();\n const { container } = render(\n <WidgetHeader title=\"hello\" returnFn={mockReturnFn} />\n );\n\n const toTestElement = container.querySelector(\"SvgChevronLeft\");\n if (toTestElement !== null) {\n fireEvent.click(toTestElement);\n }\n expect(mockReturnFn).toHaveBeenCalled;\n });\n});\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { StagePanelLocation, StagePanelSection } from "@itwin/appui-
|
|
1
|
+
import type { UiItemsProvider, Widget } from "@itwin/appui-react";
|
|
2
|
+
import { StagePanelLocation, StagePanelSection } from "@itwin/appui-react";
|
|
3
3
|
export declare class OneClickLCAProvider implements UiItemsProvider {
|
|
4
4
|
readonly id = "OneClickLCAProvider";
|
|
5
|
-
provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection): ReadonlyArray<
|
|
5
|
+
provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection): ReadonlyArray<Widget>;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=OneClickLCAWidget.d.ts.map
|
|
@@ -4,24 +4,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.OneClickLCAProvider = void 0;
|
|
7
|
-
const
|
|
8
|
-
const appui_abstract_1 = require("@itwin/appui-abstract");
|
|
7
|
+
const appui_react_1 = require("@itwin/appui-react");
|
|
9
8
|
const OneClickLCA_1 = __importDefault(require("../components/OneClickLCA"));
|
|
9
|
+
const react_1 = __importDefault(require("react"));
|
|
10
10
|
class OneClickLCAProvider {
|
|
11
11
|
constructor() {
|
|
12
12
|
this.id = "OneClickLCAProvider";
|
|
13
13
|
}
|
|
14
14
|
provideWidgets(_stageId, stageUsage, location, section) {
|
|
15
15
|
const widgets = [];
|
|
16
|
-
if (location ===
|
|
17
|
-
section ===
|
|
18
|
-
stageUsage ===
|
|
16
|
+
if (location === appui_react_1.StagePanelLocation.Left &&
|
|
17
|
+
section === appui_react_1.StagePanelSection.Start &&
|
|
18
|
+
stageUsage === appui_react_1.StageUsage.General) {
|
|
19
19
|
const OneClickLCAWidget = {
|
|
20
20
|
id: "OneClickLCAWidget",
|
|
21
21
|
label: "One Click LCA",
|
|
22
|
-
|
|
23
|
-
return jsx_runtime_1.jsx(OneClickLCA_1.default, {}, void 0);
|
|
24
|
-
},
|
|
22
|
+
content: react_1.default.createElement(OneClickLCA_1.default, null),
|
|
25
23
|
};
|
|
26
24
|
widgets.push(OneClickLCAWidget);
|
|
27
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OneClickLCAWidget.js","sourceRoot":"","sources":["../../../src/widgets/OneClickLCAWidget.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OneClickLCAWidget.js","sourceRoot":"","sources":["../../../src/widgets/OneClickLCAWidget.tsx"],"names":[],"mappings":";;;;;;AAQA,oDAI4B;AAC5B,4EAAoD;AACpD,kDAA0B;AAE1B,MAAa,mBAAmB;IAAhC;QACkB,OAAE,GAAG,qBAAqB,CAAC;IAyB7C,CAAC;IAvBQ,cAAc,CACnB,QAAgB,EAChB,UAAkB,EAClB,QAA4B,EAC5B,OAA2B;QAE3B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IACE,QAAQ,KAAK,gCAAkB,CAAC,IAAI;YACpC,OAAO,KAAK,+BAAiB,CAAC,KAAK;YACnC,UAAU,KAAK,wBAAU,CAAC,OAAO,EACjC;YACA,MAAM,iBAAiB,GAAW;gBAChC,EAAE,EAAE,mBAAmB;gBACvB,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,8BAAC,qBAAW,OAAE;aACxB,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACjC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA1BD,kDA0BC","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 {\n UiItemsProvider,\n Widget,\n} from \"@itwin/appui-react\";\nimport {\n StagePanelLocation,\n StagePanelSection,\n StageUsage,\n} from \"@itwin/appui-react\";\nimport OneClickLCA from \"../components/OneClickLCA\";\nimport React from \"react\";\n\nexport class OneClickLCAProvider implements UiItemsProvider {\n public readonly id = \"OneClickLCAProvider\";\n\n public provideWidgets(\n _stageId: string,\n stageUsage: string,\n location: StagePanelLocation,\n section?: StagePanelSection\n ): ReadonlyArray<Widget> {\n const widgets: Widget[] = [];\n if (\n location === StagePanelLocation.Left &&\n section === StagePanelSection.Start &&\n stageUsage === StageUsage.General\n ) {\n const OneClickLCAWidget: Widget = {\n id: \"OneClickLCAWidget\",\n label: \"One Click LCA\",\n content: <OneClickLCA/>,\n };\n\n widgets.push(OneClickLCAWidget);\n }\n\n return widgets;\n }\n}\n"]}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
1
|
/*---------------------------------------------------------------------------------------------
|
|
3
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
4
|
*--------------------------------------------------------------------------------------------*/
|
|
6
5
|
import "./ExportModal.scss";
|
|
7
|
-
import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
6
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
8
7
|
import { IModelApp } from "@itwin/core-frontend";
|
|
9
8
|
import { Alert, Button, LabeledInput, Modal, ProgressLinear, ProgressRadial, Text, toaster, } from "@itwin/itwinui-react";
|
|
10
9
|
import { SvgVisibilityHide, SvgVisibilityShow, } from "@itwin/itwinui-icons-react";
|
|
@@ -29,7 +28,7 @@ const ExportModal = (props) => {
|
|
|
29
28
|
return password !== "";
|
|
30
29
|
}, [password]);
|
|
31
30
|
const validateSignin = useCallback(() => {
|
|
32
|
-
return
|
|
31
|
+
return cache?.token && cache?.exp > Date.now();
|
|
33
32
|
}, [cache]);
|
|
34
33
|
const [isSignedIn, setIsSignedIn] = useState(validateSignin());
|
|
35
34
|
const [isSigningIn, startSigningIn] = useState(false);
|
|
@@ -45,13 +44,12 @@ const ExportModal = (props) => {
|
|
|
45
44
|
}, [setEmail, setPassword, showPassword, showSigninError]);
|
|
46
45
|
const pinStatus = useCallback((job) => {
|
|
47
46
|
const intervalId = window.setInterval(async () => {
|
|
48
|
-
|
|
49
|
-
const token = (_b = (await ((_a = IModelApp.authorizationClient) === null || _a === void 0 ? void 0 : _a.getAccessToken()))) !== null && _b !== void 0 ? _b : "";
|
|
47
|
+
const token = (await IModelApp.authorizationClient?.getAccessToken()) ?? "";
|
|
50
48
|
if (job.id && token) {
|
|
51
|
-
const currentJobStatus = await oneClickLCAClientApi.getOCLCAJobStatus(token, job
|
|
49
|
+
const currentJobStatus = await oneClickLCAClientApi.getOCLCAJobStatus(token, job?.id);
|
|
52
50
|
if (currentJobStatus.status) {
|
|
53
51
|
if (currentJobStatus.status === CarbonUploadState.Succeeded) {
|
|
54
|
-
setJobLink(!!
|
|
52
|
+
setJobLink(!!currentJobStatus?._links?.oneclicklca?.href ? { href: currentJobStatus._links.oneclicklca.href } : undefined);
|
|
55
53
|
}
|
|
56
54
|
setJobStatus(currentJobStatus.status);
|
|
57
55
|
}
|
|
@@ -64,8 +62,7 @@ const ExportModal = (props) => {
|
|
|
64
62
|
intervalRef.current = intervalId;
|
|
65
63
|
}, [setJobLink, setJobStatus, oneClickLCAClientApi]);
|
|
66
64
|
const runJob = useCallback(async (token) => {
|
|
67
|
-
|
|
68
|
-
const accessToken = (_b = (await ((_a = IModelApp.authorizationClient) === null || _a === void 0 ? void 0 : _a.getAccessToken()))) !== null && _b !== void 0 ? _b : "";
|
|
65
|
+
const accessToken = (await IModelApp.authorizationClient?.getAccessToken()) ?? "";
|
|
69
66
|
if (props.reportId && token) {
|
|
70
67
|
try {
|
|
71
68
|
const jobCreated = await oneClickLCAClientApi.createJob(accessToken, {
|
|
@@ -135,19 +132,31 @@ const ExportModal = (props) => {
|
|
|
135
132
|
const getStatusComponent = useCallback((status, link) => {
|
|
136
133
|
switch (status) {
|
|
137
134
|
case CarbonUploadState.Queued:
|
|
138
|
-
return (
|
|
135
|
+
return (React.createElement("div", { className: "oclca-progress-radial-container" },
|
|
136
|
+
React.createElement(ProgressRadial, { indeterminate: true, size: "small", value: 50 }),
|
|
137
|
+
React.createElement(Text, { variant: "leading", className: "oclca-status-text" }, "Export queued")));
|
|
139
138
|
case CarbonUploadState.Running:
|
|
140
|
-
return (
|
|
139
|
+
return (React.createElement("div", { className: "oclca-progress-linear-container" },
|
|
140
|
+
React.createElement(ProgressLinear, { indeterminate: true }),
|
|
141
|
+
React.createElement(Text, { variant: "leading", className: "oclca-status-text" }, "Export running")));
|
|
141
142
|
case CarbonUploadState.Succeeded:
|
|
142
|
-
return (link && (
|
|
143
|
+
return (link && (React.createElement("div", { className: "oclca-progress-radial-container" },
|
|
144
|
+
React.createElement(ProgressRadial, { status: "positive", size: "small", value: 50 }),
|
|
145
|
+
React.createElement("a", { className: "oclca-report-button", href: link, target: "_blank", rel: "noopener noreferrer" },
|
|
146
|
+
React.createElement(Button, { styleType: "cta" }, "Open in One Click LCA")))));
|
|
143
147
|
case CarbonUploadState.Failed:
|
|
144
|
-
return (
|
|
148
|
+
return (React.createElement("div", { className: "oclca-progress-radial-container" },
|
|
149
|
+
React.createElement(ProgressRadial, { status: "negative", size: "small", value: 100 }),
|
|
150
|
+
React.createElement(Text, { variant: "leading", className: "oclca-status-text" }, "Export failed")));
|
|
145
151
|
default:
|
|
146
|
-
return (
|
|
152
|
+
return (React.createElement("div", { className: "oclca-progress-radial-container" },
|
|
153
|
+
React.createElement(Text, null,
|
|
154
|
+
"Invalid Job Status ",
|
|
155
|
+
React.createElement("span", { role: "img", "aria-label": "sad" }, "\uD83D\uDE14"))));
|
|
147
156
|
}
|
|
148
157
|
}, []);
|
|
149
158
|
useEffect(() => {
|
|
150
|
-
if (props.isOpen && isSignedIn &&
|
|
159
|
+
if (props.isOpen && isSignedIn && cache?.token) {
|
|
151
160
|
runJob(cache.token).catch((err) => {
|
|
152
161
|
setJobStatus(CarbonUploadState.Failed);
|
|
153
162
|
toaster.negative("Error occurs while running the job. 😔");
|
|
@@ -174,7 +183,21 @@ const ExportModal = (props) => {
|
|
|
174
183
|
return;
|
|
175
184
|
}
|
|
176
185
|
}, [email, isValidEmail]);
|
|
177
|
-
return (
|
|
186
|
+
return (React.createElement(Modal, { "data-testid": "export-modal", isOpen: props.isOpen, onClose: onClose, title: null, closeOnExternalClick: false },
|
|
187
|
+
!isSignedIn && (React.createElement("div", { className: "oclca-signin" },
|
|
188
|
+
React.createElement("img", { className: "oclca-signin-icon", src: logo, alt: "One Click LCA\u00AE software", "data-height-percentage": "80", "data-actual-width": "1200", "data-actual-height": "600" }),
|
|
189
|
+
React.createElement("form", { onSubmit: signin, className: "oclca-signin-form" },
|
|
190
|
+
React.createElement("div", { className: "oclca-signin-prompt" }, "Sign in to One Click LCA."),
|
|
191
|
+
signinError && (React.createElement(Alert, { type: "negative", className: "oclca-signin-error" }, "Incorrect email or password.")),
|
|
192
|
+
React.createElement("div", { className: "oclca-signin-input" },
|
|
193
|
+
React.createElement(LabeledInput, { label: "Email", value: email, onChange: (v) => setEmail(v.target.value), type: "email", status: emailError ? "negative" : undefined, message: emailError ? "Invalid email address." : "", required: true })),
|
|
194
|
+
React.createElement("div", { className: "oclca-signin-input" },
|
|
195
|
+
React.createElement(LabeledInput, { label: "Password", value: password, onChange: (e) => setPassword(e.target.value), type: passwordIsVisible ? "text" : "password", svgIcon: passwordIsVisible ? (React.createElement(SvgVisibilityHide, { onClick: () => showPassword(!passwordIsVisible) })) : (React.createElement(SvgVisibilityShow, null)), iconDisplayStyle: "inline", required: true })),
|
|
196
|
+
React.createElement("div", { className: "oclca-signin-button-container" },
|
|
197
|
+
React.createElement(Button, { className: "oclca-signin-button", type: "submit", styleType: "cta", disabled: !isValidSignin() }, isSigningIn ? (React.createElement(ProgressRadial, { className: "oclca-signin-wait", indeterminate: true, size: "small", value: 50 })) : ("Sign In")))))),
|
|
198
|
+
isSignedIn && !jobStatus && (React.createElement("div", { className: "oclca-progress-radial-container" },
|
|
199
|
+
React.createElement(ProgressRadial, { indeterminate: true, size: "large", value: 50 }))),
|
|
200
|
+
isSignedIn && jobStatus && getStatusComponent(jobStatus, jobLink?.href)));
|
|
178
201
|
};
|
|
179
202
|
export default ExportModal;
|
|
180
203
|
//# sourceMappingURL=ExportModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportModal.js","sourceRoot":"","sources":["../../../src/components/ExportModal.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 \"./ExportModal.scss\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport {\n Alert,\n Button,\n LabeledInput,\n Modal,\n ProgressLinear,\n ProgressRadial,\n Text,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgVisibilityHide,\n SvgVisibilityShow,\n} from \"@itwin/itwinui-icons-react\";\nimport type { Link, OCLCAJob } from \"@itwin/insights-client\";\nimport { CarbonUploadState, OCLCAJobsClient } from \"@itwin/insights-client\";\nimport logo from \"../../public/logo/oneClickLCALogo.png\";\n\ninterface ExportProps {\n isOpen: boolean;\n close: () => void;\n reportId: string | undefined;\n}\n\ninterface OclcaTokenCache {\n token: string;\n exp: number;\n}\n\nconst ExportModal = (props: ExportProps) => {\n const MILI_SECONDS = 1000;\n const PIN_INTERVAL = 1000;\n const oneClickLCAClientApi = useMemo(() => new OCLCAJobsClient(), []);\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [passwordIsVisible, showPassword] = useState(false);\n const [signinError, showSigninError] = useState(false);\n const [emailError, setEmailError] = useState(false);\n const [cache, cacheToken] = useState<OclcaTokenCache>();\n\n const [jobStatus, setJobStatus] = useState<CarbonUploadState>();\n const [jobLink, setJobLink] = useState<Link | undefined>();\n\n const isValidEmail = useCallback(() => {\n return /\\S+@\\S+\\.\\S+/.test(email);\n }, [email]);\n\n const isValidPassword = useCallback(() => {\n return password !== \"\";\n }, [password]);\n\n const validateSignin = useCallback(() => {\n return cache?.token && cache?.exp > Date.now();\n }, [cache]);\n\n const [isSignedIn, setIsSignedIn] = useState(validateSignin());\n const [isSigningIn, startSigningIn] = useState(false);\n const intervalRef = useRef<number>();\n\n const isValidSignin = useCallback(() => {\n return isValidEmail() && isValidPassword();\n }, [isValidEmail, isValidPassword]);\n\n const resetSignin = useCallback(() => {\n setEmail(\"\");\n setPassword(\"\");\n showPassword(false);\n showSigninError(false);\n }, [setEmail, setPassword, showPassword, showSigninError]);\n\n const pinStatus = useCallback(\n (job: OCLCAJob) => {\n const intervalId = window.setInterval(async () => {\n const token =\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n if (job.id && token) {\n const currentJobStatus =\n await oneClickLCAClientApi.getOCLCAJobStatus(token, job?.id);\n if (currentJobStatus.status) {\n if (\n currentJobStatus.status === CarbonUploadState.Succeeded\n ) {\n setJobLink(!!currentJobStatus?._links?.oneclicklca?.href ? { href: currentJobStatus._links.oneclicklca.href } : undefined);\n }\n setJobStatus(currentJobStatus.status);\n } else {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Failed to get job status. 😔\");\n }\n }\n }, PIN_INTERVAL);\n intervalRef.current = intervalId;\n },\n [setJobLink, setJobStatus, oneClickLCAClientApi]\n );\n\n const runJob = useCallback(\n async (token: string) => {\n const accessToken =\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n if (props.reportId && token) {\n try {\n const jobCreated = await oneClickLCAClientApi.createJob(\n accessToken,\n {\n reportId: props.reportId,\n token,\n }\n );\n if (jobCreated.id) {\n pinStatus(jobCreated);\n } else {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Failed to create one click lca job. 😔\");\n }\n } catch (e) {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"You do not have the required permissions. Please contact the project administrator.\");\n /* eslint-disable no-console */\n console.error(e);\n }\n } else {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Invalid reportId.\");\n }\n },\n [props, pinStatus, oneClickLCAClientApi]\n );\n\n const signin = useCallback(\n async (e) => {\n e.preventDefault();\n startSigningIn(true);\n try {\n const result = await oneClickLCAClientApi.getOCLCAAccessToken(\n email,\n password\n );\n if (result && result.access_token && result.expires_in) {\n cacheToken({\n token: result.access_token,\n exp: Date.now() + result.expires_in * MILI_SECONDS,\n });\n resetSignin();\n setIsSignedIn(true);\n } else {\n showSigninError(true);\n }\n } catch (err) {\n toaster.negative(\"Failed to sign in One Click LCA.\");\n /* eslint-disable no-console */\n console.error(err);\n }\n startSigningIn(false);\n },\n [\n email,\n password,\n resetSignin,\n cacheToken,\n showSigninError,\n oneClickLCAClientApi,\n ]\n );\n\n const onClose = useCallback(() => {\n resetSignin();\n setJobStatus(undefined);\n setJobLink(undefined);\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current);\n }\n props.close();\n }, [props, resetSignin]);\n\n const getStatusComponent = useCallback(\n (status: CarbonUploadState, link: string | undefined) => {\n switch (status) {\n case CarbonUploadState.Queued:\n return (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial indeterminate size=\"small\" value={50} />\n <Text variant=\"leading\" className=\"oclca-status-text\">\n Export queued\n </Text>\n </div>\n );\n case CarbonUploadState.Running:\n return (\n <div className=\"oclca-progress-linear-container\">\n <ProgressLinear indeterminate />\n <Text variant=\"leading\" className=\"oclca-status-text\">\n Export running\n </Text>\n </div>\n );\n case CarbonUploadState.Succeeded:\n return (\n link && (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial status=\"positive\" size=\"small\" value={50} />\n <a\n className=\"oclca-report-button\"\n href={link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <Button styleType=\"cta\">Open in One Click LCA</Button>\n </a>\n </div>\n )\n );\n case CarbonUploadState.Failed:\n return (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial status=\"negative\" size=\"small\" value={100} />\n <Text variant=\"leading\" className=\"oclca-status-text\">\n Export failed\n </Text>\n </div>\n );\n default:\n return (\n <div className=\"oclca-progress-radial-container\">\n <Text>Invalid Job Status <span role=\"img\" aria-label=\"sad\">😔</span></Text>\n </div>\n );\n }\n },\n []\n );\n\n useEffect(() => {\n if (props.isOpen && isSignedIn && cache?.token) {\n runJob(cache.token).catch((err) => {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Error occurs while running the job. 😔\");\n /* eslint-disable no-console */\n console.error(err);\n });\n }\n }, [props.isOpen, isSignedIn, cache, runJob]);\n\n useEffect(() => {\n if (\n jobStatus === CarbonUploadState.Succeeded ||\n jobStatus === CarbonUploadState.Failed\n ) {\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current);\n }\n }\n }, [jobStatus]);\n\n useEffect(() => {\n if (email !== \"\") {\n const timeoutId = setTimeout(() => setEmailError(!isValidEmail()), 1000);\n return () => clearTimeout(timeoutId);\n } else {\n setEmailError(false);\n return;\n }\n }, [email, isValidEmail]);\n\n return (\n <Modal\n data-testid=\"export-modal\"\n isOpen={props.isOpen}\n onClose={onClose}\n title={null}\n closeOnExternalClick={false}\n >\n {!isSignedIn && (\n <div className=\"oclca-signin\">\n <img\n className=\"oclca-signin-icon\"\n src={logo}\n alt=\"One Click LCA® software\"\n data-height-percentage=\"80\"\n data-actual-width=\"1200\"\n data-actual-height=\"600\"\n />\n <form onSubmit={signin} className=\"oclca-signin-form\">\n <div className=\"oclca-signin-prompt\">Sign in to One Click LCA.</div>\n {signinError && (\n <Alert type=\"negative\" className=\"oclca-signin-error\">\n Incorrect email or password.\n </Alert>\n )}\n <div className=\"oclca-signin-input\">\n <LabeledInput\n label=\"Email\"\n value={email}\n onChange={(v) => setEmail(v.target.value)}\n type=\"email\"\n status={emailError ? \"negative\" : undefined}\n message={emailError ? \"Invalid email address.\" : \"\"}\n required\n />\n </div>\n <div className=\"oclca-signin-input\">\n <LabeledInput\n label=\"Password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n type={passwordIsVisible ? \"text\" : \"password\"}\n svgIcon={\n passwordIsVisible ? (\n <SvgVisibilityHide\n onClick={() => showPassword(!passwordIsVisible)}\n />\n ) : (\n <SvgVisibilityShow />\n )\n }\n iconDisplayStyle=\"inline\"\n required\n />\n </div>\n\n <div className=\"oclca-signin-button-container\">\n <Button\n className=\"oclca-signin-button\"\n type=\"submit\"\n styleType=\"cta\"\n disabled={!isValidSignin()}\n >\n {isSigningIn ? (\n <ProgressRadial\n className=\"oclca-signin-wait\"\n indeterminate\n size=\"small\"\n value={50}\n />\n ) : (\n \"Sign In\"\n )}\n </Button>\n </div>\n </form>\n </div>\n )}\n {isSignedIn && !jobStatus && (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial indeterminate size=\"large\" value={50} />\n </div>\n )}\n {isSignedIn && jobStatus && getStatusComponent(jobStatus, jobLink?.href)}\n </Modal>\n );\n};\n\nexport default ExportModal;\n"]}
|
|
1
|
+
{"version":3,"file":"ExportModal.js","sourceRoot":"","sources":["../../../src/components/ExportModal.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 \"./ExportModal.scss\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport {\n Alert,\n Button,\n LabeledInput,\n Modal,\n ProgressLinear,\n ProgressRadial,\n Text,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgVisibilityHide,\n SvgVisibilityShow,\n} from \"@itwin/itwinui-icons-react\";\nimport type { Link, OCLCAJob } from \"@itwin/insights-client\";\nimport { CarbonUploadState, OCLCAJobsClient } from \"@itwin/insights-client\";\nimport logo from \"../../public/logo/oneClickLCALogo.png\";\n\ninterface ExportProps {\n isOpen: boolean;\n close: () => void;\n reportId: string | undefined;\n}\n\ninterface OclcaTokenCache {\n token: string;\n exp: number;\n}\n\nconst ExportModal = (props: ExportProps) => {\n const MILI_SECONDS = 1000;\n const PIN_INTERVAL = 1000;\n const oneClickLCAClientApi = useMemo(() => new OCLCAJobsClient(), []);\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [passwordIsVisible, showPassword] = useState(false);\n const [signinError, showSigninError] = useState(false);\n const [emailError, setEmailError] = useState(false);\n const [cache, cacheToken] = useState<OclcaTokenCache>();\n\n const [jobStatus, setJobStatus] = useState<CarbonUploadState>();\n const [jobLink, setJobLink] = useState<Link | undefined>();\n\n const isValidEmail = useCallback(() => {\n return /\\S+@\\S+\\.\\S+/.test(email);\n }, [email]);\n\n const isValidPassword = useCallback(() => {\n return password !== \"\";\n }, [password]);\n\n const validateSignin = useCallback(() => {\n return cache?.token && cache?.exp > Date.now();\n }, [cache]);\n\n const [isSignedIn, setIsSignedIn] = useState(validateSignin());\n const [isSigningIn, startSigningIn] = useState(false);\n const intervalRef = useRef<number>();\n\n const isValidSignin = useCallback(() => {\n return isValidEmail() && isValidPassword();\n }, [isValidEmail, isValidPassword]);\n\n const resetSignin = useCallback(() => {\n setEmail(\"\");\n setPassword(\"\");\n showPassword(false);\n showSigninError(false);\n }, [setEmail, setPassword, showPassword, showSigninError]);\n\n const pinStatus = useCallback(\n (job: OCLCAJob) => {\n const intervalId = window.setInterval(async () => {\n const token =\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n if (job.id && token) {\n const currentJobStatus =\n await oneClickLCAClientApi.getOCLCAJobStatus(token, job?.id);\n if (currentJobStatus.status) {\n if (\n currentJobStatus.status === CarbonUploadState.Succeeded\n ) {\n setJobLink(!!currentJobStatus?._links?.oneclicklca?.href ? { href: currentJobStatus._links.oneclicklca.href } : undefined);\n }\n setJobStatus(currentJobStatus.status);\n } else {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Failed to get job status. 😔\");\n }\n }\n }, PIN_INTERVAL);\n intervalRef.current = intervalId;\n },\n [setJobLink, setJobStatus, oneClickLCAClientApi]\n );\n\n const runJob = useCallback(\n async (token: string) => {\n const accessToken =\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n if (props.reportId && token) {\n try {\n const jobCreated = await oneClickLCAClientApi.createJob(\n accessToken,\n {\n reportId: props.reportId,\n token,\n }\n );\n if (jobCreated.id) {\n pinStatus(jobCreated);\n } else {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Failed to create one click lca job. 😔\");\n }\n } catch (e) {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"You do not have the required permissions. Please contact the project administrator.\");\n /* eslint-disable no-console */\n console.error(e);\n }\n } else {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Invalid reportId.\");\n }\n },\n [props, pinStatus, oneClickLCAClientApi]\n );\n\n const signin = useCallback(\n async (e) => {\n e.preventDefault();\n startSigningIn(true);\n try {\n const result = await oneClickLCAClientApi.getOCLCAAccessToken(\n email,\n password\n );\n if (result && result.access_token && result.expires_in) {\n cacheToken({\n token: result.access_token,\n exp: Date.now() + result.expires_in * MILI_SECONDS,\n });\n resetSignin();\n setIsSignedIn(true);\n } else {\n showSigninError(true);\n }\n } catch (err) {\n toaster.negative(\"Failed to sign in One Click LCA.\");\n /* eslint-disable no-console */\n console.error(err);\n }\n startSigningIn(false);\n },\n [\n email,\n password,\n resetSignin,\n cacheToken,\n showSigninError,\n oneClickLCAClientApi,\n ]\n );\n\n const onClose = useCallback(() => {\n resetSignin();\n setJobStatus(undefined);\n setJobLink(undefined);\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current);\n }\n props.close();\n }, [props, resetSignin]);\n\n const getStatusComponent = useCallback(\n (status: CarbonUploadState, link: string | undefined) => {\n switch (status) {\n case CarbonUploadState.Queued:\n return (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial indeterminate size=\"small\" value={50} />\n <Text variant=\"leading\" className=\"oclca-status-text\">\n Export queued\n </Text>\n </div>\n );\n case CarbonUploadState.Running:\n return (\n <div className=\"oclca-progress-linear-container\">\n <ProgressLinear indeterminate />\n <Text variant=\"leading\" className=\"oclca-status-text\">\n Export running\n </Text>\n </div>\n );\n case CarbonUploadState.Succeeded:\n return (\n link && (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial status=\"positive\" size=\"small\" value={50} />\n <a\n className=\"oclca-report-button\"\n href={link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <Button styleType=\"cta\">Open in One Click LCA</Button>\n </a>\n </div>\n )\n );\n case CarbonUploadState.Failed:\n return (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial status=\"negative\" size=\"small\" value={100} />\n <Text variant=\"leading\" className=\"oclca-status-text\">\n Export failed\n </Text>\n </div>\n );\n default:\n return (\n <div className=\"oclca-progress-radial-container\">\n <Text>Invalid Job Status <span role=\"img\" aria-label=\"sad\">😔</span></Text>\n </div>\n );\n }\n },\n []\n );\n\n useEffect(() => {\n if (props.isOpen && isSignedIn && cache?.token) {\n runJob(cache.token).catch((err) => {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Error occurs while running the job. 😔\");\n /* eslint-disable no-console */\n console.error(err);\n });\n }\n }, [props.isOpen, isSignedIn, cache, runJob]);\n\n useEffect(() => {\n if (\n jobStatus === CarbonUploadState.Succeeded ||\n jobStatus === CarbonUploadState.Failed\n ) {\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current);\n }\n }\n }, [jobStatus]);\n\n useEffect(() => {\n if (email !== \"\") {\n const timeoutId = setTimeout(() => setEmailError(!isValidEmail()), 1000);\n return () => clearTimeout(timeoutId);\n } else {\n setEmailError(false);\n return;\n }\n }, [email, isValidEmail]);\n\n return (\n <Modal\n data-testid=\"export-modal\"\n isOpen={props.isOpen}\n onClose={onClose}\n title={null}\n closeOnExternalClick={false}\n >\n {!isSignedIn && (\n <div className=\"oclca-signin\">\n <img\n className=\"oclca-signin-icon\"\n src={logo}\n alt=\"One Click LCA® software\"\n data-height-percentage=\"80\"\n data-actual-width=\"1200\"\n data-actual-height=\"600\"\n />\n <form onSubmit={signin} className=\"oclca-signin-form\">\n <div className=\"oclca-signin-prompt\">Sign in to One Click LCA.</div>\n {signinError && (\n <Alert type=\"negative\" className=\"oclca-signin-error\">\n Incorrect email or password.\n </Alert>\n )}\n <div className=\"oclca-signin-input\">\n <LabeledInput\n label=\"Email\"\n value={email}\n onChange={(v) => setEmail(v.target.value)}\n type=\"email\"\n status={emailError ? \"negative\" : undefined}\n message={emailError ? \"Invalid email address.\" : \"\"}\n required\n />\n </div>\n <div className=\"oclca-signin-input\">\n <LabeledInput\n label=\"Password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n type={passwordIsVisible ? \"text\" : \"password\"}\n svgIcon={\n passwordIsVisible ? (\n <SvgVisibilityHide\n onClick={() => showPassword(!passwordIsVisible)}\n />\n ) : (\n <SvgVisibilityShow />\n )\n }\n iconDisplayStyle=\"inline\"\n required\n />\n </div>\n\n <div className=\"oclca-signin-button-container\">\n <Button\n className=\"oclca-signin-button\"\n type=\"submit\"\n styleType=\"cta\"\n disabled={!isValidSignin()}\n >\n {isSigningIn ? (\n <ProgressRadial\n className=\"oclca-signin-wait\"\n indeterminate\n size=\"small\"\n value={50}\n />\n ) : (\n \"Sign In\"\n )}\n </Button>\n </div>\n </form>\n </div>\n )}\n {isSignedIn && !jobStatus && (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial indeterminate size=\"large\" value={50} />\n </div>\n )}\n {isSignedIn && jobStatus && getStatusComponent(jobStatus, jobLink?.href)}\n </Modal>\n );\n};\n\nexport default ExportModal;\n"]}
|
|
@@ -2,23 +2,21 @@
|
|
|
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
|
-
|
|
7
5
|
.oclca {
|
|
8
6
|
&-signin {
|
|
9
7
|
display: flex;
|
|
10
8
|
flex-direction: column;
|
|
11
9
|
align-items: center;
|
|
12
|
-
padding-bottom: 4 *
|
|
13
|
-
padding-top: 2 *
|
|
10
|
+
padding-bottom: calc(4 * var(--iui-size-s));
|
|
11
|
+
padding-top: calc(2 * var(--iui-size-s));
|
|
14
12
|
|
|
15
13
|
&-icon {
|
|
16
|
-
width: 2 *
|
|
17
|
-
height: 1 *
|
|
14
|
+
width: calc(2 * var(--iui-size-3xl));
|
|
15
|
+
height: calc(1 * var(--iui-size-3xl));
|
|
18
16
|
}
|
|
19
17
|
|
|
20
18
|
&-prompt {
|
|
21
|
-
margin:
|
|
19
|
+
margin: var(--iui-size-l) 0;
|
|
22
20
|
font-size: medium;
|
|
23
21
|
display: flex;
|
|
24
22
|
flex-direction: column;
|
|
@@ -31,11 +29,11 @@
|
|
|
31
29
|
|
|
32
30
|
&-input {
|
|
33
31
|
width: 100%;
|
|
34
|
-
margin:
|
|
32
|
+
margin: var(--iui-size-2xs) 0;
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
&-button-container {
|
|
38
|
-
margin:
|
|
36
|
+
margin: var(--iui-size-s) 0;
|
|
39
37
|
}
|
|
40
38
|
|
|
41
39
|
&-button {
|
|
@@ -43,7 +41,7 @@
|
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
&-error {
|
|
46
|
-
height:
|
|
44
|
+
height: var(--iui-size-xl);
|
|
47
45
|
font-size: small;
|
|
48
46
|
}
|
|
49
47
|
|
|
@@ -54,7 +52,7 @@
|
|
|
54
52
|
}
|
|
55
53
|
|
|
56
54
|
&-report-button {
|
|
57
|
-
margin:
|
|
55
|
+
margin: var(--iui-size-l);
|
|
58
56
|
text-decoration: none;
|
|
59
57
|
:hover {
|
|
60
58
|
cursor: pointer;
|
|
@@ -62,15 +60,15 @@
|
|
|
62
60
|
}
|
|
63
61
|
|
|
64
62
|
&-status-text {
|
|
65
|
-
margin:
|
|
63
|
+
margin: var(--iui-size-xs);
|
|
66
64
|
}
|
|
67
65
|
|
|
68
66
|
&-progress-radial-container {
|
|
69
67
|
display: flex;
|
|
70
68
|
flex-direction: column;
|
|
71
69
|
align-items: center;
|
|
72
|
-
margin:
|
|
73
|
-
height:
|
|
70
|
+
margin: var(--iui-size-l);
|
|
71
|
+
height: var(--iui-size-3xl);
|
|
74
72
|
place-content: space-evenly;
|
|
75
73
|
}
|
|
76
74
|
|
|
@@ -78,8 +76,8 @@
|
|
|
78
76
|
display: flex;
|
|
79
77
|
flex-direction: column;
|
|
80
78
|
text-align: center;
|
|
81
|
-
margin:
|
|
82
|
-
height:
|
|
79
|
+
margin: var(--iui-size-l);
|
|
80
|
+
height: var(--iui-size-3xl);
|
|
83
81
|
place-content: space-evenly;
|
|
84
82
|
}
|
|
85
83
|
}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import React from "react";
|
|
2
6
|
import Reports from "./Reports";
|
|
3
7
|
import "./Reports.scss";
|
|
4
8
|
const OneClickLCA = () => {
|
|
5
|
-
return (
|
|
9
|
+
return (React.createElement("div", { className: "oclca-container" },
|
|
10
|
+
React.createElement(Reports, null)));
|
|
6
11
|
};
|
|
7
12
|
export default OneClickLCA;
|
|
8
13
|
//# sourceMappingURL=OneClickLCA.js.map
|