@itwin/one-click-lca-react 0.2.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 +101 -59
- 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 +59 -36
- 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 +28 -28
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reports.js","sourceRoot":"","sources":["../../../src/components/Reports.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Reports.js","sourceRoot":"","sources":["../../../src/components/Reports.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { SearchBox } from \"@itwin/core-react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { Button, Table, toaster } from \"@itwin/itwinui-react\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { ReportsClient } from \"@itwin/insights-client\";\nimport { WidgetHeader } from \"./utils\";\nimport ExportModal from \"./ExportModal\";\nimport \"./Reports.scss\";\n\ntype CreateTypeFromInterface<Interface> = {\n [Property in keyof Interface]: Interface[Property];\n};\n\ntype Reporting = CreateTypeFromInterface<Report>;\n\nconst Reports = () => {\n const projectId = useActiveIModelConnection()?.iTwinId as string;\n const reportsClientApi = useMemo(() => new ReportsClient(), []);\n\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [reports, setReports] = useState<Report[]>([]);\n const [buttonIsDisabled, disableButton] = useState<boolean>(true);\n const [filteredReports, setFilteredReports] = useState<Report[]>(reports);\n const [selectedReport, setSelectedReport] = useState<Reporting>();\n\n const [modalIsOpen, openModal] = useState(false);\n\n const reportsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"displayName\",\n Header: \"Name\",\n accessor: \"displayName\",\n },\n {\n id: \"description\",\n Header: \"Description\",\n accessor: \"description\",\n },\n ],\n },\n ],\n []\n );\n\n const onSearchBoxValueChanged = async (value: string) => {\n disableButton(true);\n const filterReports = reports.filter(\n (x) =>\n x.displayName &&\n x.displayName.toLowerCase().indexOf(value.toLowerCase()) > -1\n );\n setFilteredReports(filterReports);\n };\n\n const tableStateSingleSelectReducer = (newState: any, action: any): any => {\n switch (action.type) {\n case \"toggleRowSelected\": {\n return { ...newState, selectedRowIds: { [action.id]: action.value } };\n }\n default:\n break;\n }\n return newState;\n };\n\n const onReportRowClick = useMemo(\n () => (_: any, row: any) => {\n if (row.original === selectedReport) {\n disableButton(!buttonIsDisabled);\n row.toggleRowSelected();\n } else {\n disableButton(false);\n row.toggleRowSelected(true);\n }\n setSelectedReport(row.original);\n },\n [buttonIsDisabled, selectedReport]\n );\n\n useEffect(() => {\n if (!IModelApp.authorizationClient)\n throw new Error(\n \"AuthorizationClient is not defined. Most likely IModelApp.startup was not called yet.\"\n );\n IModelApp.authorizationClient\n .getAccessToken()\n .then((token: string) => {\n reportsClientApi\n .getReports(token, projectId)\n .then((data) => {\n if (data) {\n const fetchedReports = data ?? [];\n setReports(fetchedReports);\n setFilteredReports(fetchedReports);\n setIsLoading(false);\n }\n })\n .catch((err) => {\n setIsLoading(false);\n toaster.negative(\"You are not authorized to get reports for this projects. Please contact project administrator.\");\n /* eslint-disable no-console */\n console.error(err);\n });\n })\n .catch((err) => {\n toaster.negative(\"You are not authorized to use this system.\");\n /* eslint-disable no-console */\n console.error(err);\n });\n }, [projectId, reportsClientApi]);\n\n return (\n <>\n <WidgetHeader title=\"Reports\" />\n <div className=\"oclca-reports-container\">\n <div className=\"oclca-searchbox-container\">\n <SearchBox\n onValueChanged={onSearchBoxValueChanged}\n placeholder={\"Search reports\"}\n />\n </div>\n <div className=\"oclca-scrollable-table\">\n <Table<Reporting>\n className=\"oclca-reports-table\"\n data={filteredReports}\n density=\"extra-condensed\"\n columns={reportsColumns}\n emptyTableContent=\"No reports available.\"\n isSortable\n onRowClick={onReportRowClick}\n stateReducer={tableStateSingleSelectReducer}\n isLoading={isLoading}\n selectRowOnClick={true}\n selectSubRows={false}\n />\n </div>\n </div>\n <Button\n onClick={() => openModal(true)}\n styleType=\"cta\"\n disabled={buttonIsDisabled}\n className=\"oclca-button-center\"\n >\n One Click LCA Export\n </Button>\n <ExportModal\n isOpen={modalIsOpen}\n close={() => openModal(false)}\n reportId={selectedReport?.id}\n />\n </>\n );\n};\n\nexport default Reports;\n"]}
|
|
@@ -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,19 +1,18 @@
|
|
|
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";
|
|
11
|
-
import {
|
|
10
|
+
import { CarbonUploadState, OCLCAJobsClient } from "@itwin/insights-client";
|
|
12
11
|
import logo from "../../public/logo/oneClickLCALogo.png";
|
|
13
12
|
const ExportModal = (props) => {
|
|
14
13
|
const MILI_SECONDS = 1000;
|
|
15
14
|
const PIN_INTERVAL = 1000;
|
|
16
|
-
const oneClickLCAClientApi = useMemo(() => new
|
|
15
|
+
const oneClickLCAClientApi = useMemo(() => new OCLCAJobsClient(), []);
|
|
17
16
|
const [email, setEmail] = useState("");
|
|
18
17
|
const [password, setPassword] = useState("");
|
|
19
18
|
const [passwordIsVisible, showPassword] = useState(false);
|
|
@@ -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,18 +44,17 @@ 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.
|
|
52
|
-
if (
|
|
53
|
-
if (
|
|
54
|
-
setJobLink(!!
|
|
49
|
+
const currentJobStatus = await oneClickLCAClientApi.getOCLCAJobStatus(token, job?.id);
|
|
50
|
+
if (currentJobStatus.status) {
|
|
51
|
+
if (currentJobStatus.status === CarbonUploadState.Succeeded) {
|
|
52
|
+
setJobLink(!!currentJobStatus?._links?.oneclicklca?.href ? { href: currentJobStatus._links.oneclicklca.href } : undefined);
|
|
55
53
|
}
|
|
56
|
-
setJobStatus(
|
|
54
|
+
setJobStatus(currentJobStatus.status);
|
|
57
55
|
}
|
|
58
56
|
else {
|
|
59
|
-
setJobStatus(
|
|
57
|
+
setJobStatus(CarbonUploadState.Failed);
|
|
60
58
|
toaster.negative("Failed to get job status. 😔");
|
|
61
59
|
}
|
|
62
60
|
}
|
|
@@ -64,31 +62,30 @@ 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
|
-
const jobCreated = await oneClickLCAClientApi.
|
|
68
|
+
const jobCreated = await oneClickLCAClientApi.createJob(accessToken, {
|
|
72
69
|
reportId: props.reportId,
|
|
73
70
|
token,
|
|
74
71
|
});
|
|
75
|
-
if (
|
|
76
|
-
pinStatus(jobCreated
|
|
72
|
+
if (jobCreated.id) {
|
|
73
|
+
pinStatus(jobCreated);
|
|
77
74
|
}
|
|
78
75
|
else {
|
|
79
|
-
setJobStatus(
|
|
76
|
+
setJobStatus(CarbonUploadState.Failed);
|
|
80
77
|
toaster.negative("Failed to create one click lca job. 😔");
|
|
81
78
|
}
|
|
82
79
|
}
|
|
83
80
|
catch (e) {
|
|
84
|
-
setJobStatus(
|
|
81
|
+
setJobStatus(CarbonUploadState.Failed);
|
|
85
82
|
toaster.negative("You do not have the required permissions. Please contact the project administrator.");
|
|
86
83
|
/* eslint-disable no-console */
|
|
87
84
|
console.error(e);
|
|
88
85
|
}
|
|
89
86
|
}
|
|
90
87
|
else {
|
|
91
|
-
setJobStatus(
|
|
88
|
+
setJobStatus(CarbonUploadState.Failed);
|
|
92
89
|
toaster.negative("Invalid reportId.");
|
|
93
90
|
}
|
|
94
91
|
}, [props, pinStatus, oneClickLCAClientApi]);
|
|
@@ -96,7 +93,7 @@ const ExportModal = (props) => {
|
|
|
96
93
|
e.preventDefault();
|
|
97
94
|
startSigningIn(true);
|
|
98
95
|
try {
|
|
99
|
-
const result = await oneClickLCAClientApi.
|
|
96
|
+
const result = await oneClickLCAClientApi.getOCLCAAccessToken(email, password);
|
|
100
97
|
if (result && result.access_token && result.expires_in) {
|
|
101
98
|
cacheToken({
|
|
102
99
|
token: result.access_token,
|
|
@@ -134,22 +131,34 @@ const ExportModal = (props) => {
|
|
|
134
131
|
}, [props, resetSignin]);
|
|
135
132
|
const getStatusComponent = useCallback((status, link) => {
|
|
136
133
|
switch (status) {
|
|
137
|
-
case
|
|
138
|
-
return (
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
case
|
|
142
|
-
return (
|
|
143
|
-
|
|
144
|
-
|
|
134
|
+
case CarbonUploadState.Queued:
|
|
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")));
|
|
138
|
+
case CarbonUploadState.Running:
|
|
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")));
|
|
142
|
+
case CarbonUploadState.Succeeded:
|
|
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")))));
|
|
147
|
+
case CarbonUploadState.Failed:
|
|
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
|
-
setJobStatus(
|
|
161
|
+
setJobStatus(CarbonUploadState.Failed);
|
|
153
162
|
toaster.negative("Error occurs while running the job. 😔");
|
|
154
163
|
/* eslint-disable no-console */
|
|
155
164
|
console.error(err);
|
|
@@ -157,8 +166,8 @@ const ExportModal = (props) => {
|
|
|
157
166
|
}
|
|
158
167
|
}, [props.isOpen, isSignedIn, cache, runJob]);
|
|
159
168
|
useEffect(() => {
|
|
160
|
-
if (jobStatus ===
|
|
161
|
-
jobStatus ===
|
|
169
|
+
if (jobStatus === CarbonUploadState.Succeeded ||
|
|
170
|
+
jobStatus === CarbonUploadState.Failed) {
|
|
162
171
|
if (intervalRef.current) {
|
|
163
172
|
window.clearInterval(intervalRef.current);
|
|
164
173
|
}
|
|
@@ -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
|