@itwin/one-click-lca-react 0.5.0 → 0.6.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/README.md +2 -1
- package/lib/cjs/components/ExportModal.d.ts +4 -0
- package/lib/cjs/components/ExportModal.js +13 -7
- package/lib/cjs/components/ExportModal.js.map +1 -1
- package/lib/cjs/components/OneClickLCA.d.ts +2 -1
- package/lib/cjs/components/OneClickLCA.js +35 -7
- package/lib/cjs/components/OneClickLCA.js.map +1 -1
- package/lib/cjs/components/OneClickLCAProps.d.ts +24 -0
- package/lib/cjs/components/OneClickLCAProps.js +7 -0
- package/lib/cjs/components/OneClickLCAProps.js.map +1 -0
- package/lib/cjs/components/Reports.d.ts +4 -2
- package/lib/cjs/components/Reports.js +9 -5
- package/lib/cjs/components/Reports.js.map +1 -1
- package/lib/cjs/components/api/OCLCAApiHelper.d.ts +9 -0
- package/lib/cjs/components/api/OCLCAApiHelper.js +25 -0
- package/lib/cjs/components/api/OCLCAApiHelper.js.map +1 -0
- package/lib/cjs/components/context/OCLCAJobsClientContext.d.ts +15 -0
- package/lib/cjs/components/context/OCLCAJobsClientContext.js +26 -0
- package/lib/cjs/components/context/OCLCAJobsClientContext.js.map +1 -0
- package/lib/cjs/components/context/ReportsClientContext.d.ts +15 -0
- package/lib/cjs/components/context/ReportsClientContext.js +28 -0
- package/lib/cjs/components/context/ReportsClientContext.js.map +1 -0
- package/lib/cjs/one-click-lca-widget.d.ts +2 -0
- package/lib/cjs/one-click-lca-widget.js +1 -0
- package/lib/cjs/one-click-lca-widget.js.map +1 -1
- package/lib/cjs/widgets/OneClickLCAWidget.d.ts +3 -0
- package/lib/cjs/widgets/OneClickLCAWidget.js +3 -2
- package/lib/cjs/widgets/OneClickLCAWidget.js.map +1 -1
- package/lib/esm/components/ExportModal.d.ts +4 -0
- package/lib/esm/components/ExportModal.js +14 -8
- package/lib/esm/components/ExportModal.js.map +1 -1
- package/lib/esm/components/OneClickLCA.d.ts +2 -1
- package/lib/esm/components/OneClickLCA.js +13 -5
- package/lib/esm/components/OneClickLCA.js.map +1 -1
- package/lib/esm/components/OneClickLCAProps.d.ts +24 -0
- package/lib/esm/components/OneClickLCAProps.js +6 -0
- package/lib/esm/components/OneClickLCAProps.js.map +1 -0
- package/lib/esm/components/Reports.d.ts +4 -2
- package/lib/esm/components/Reports.js +8 -6
- package/lib/esm/components/Reports.js.map +1 -1
- package/lib/esm/components/api/OCLCAApiHelper.d.ts +9 -0
- package/lib/esm/components/api/OCLCAApiHelper.js +21 -0
- package/lib/esm/components/api/OCLCAApiHelper.js.map +1 -0
- package/lib/esm/components/context/OCLCAJobsClientContext.d.ts +15 -0
- package/lib/esm/components/context/OCLCAJobsClientContext.js +21 -0
- package/lib/esm/components/context/OCLCAJobsClientContext.js.map +1 -0
- package/lib/esm/components/context/ReportsClientContext.d.ts +15 -0
- package/lib/esm/components/context/ReportsClientContext.js +23 -0
- package/lib/esm/components/context/ReportsClientContext.js.map +1 -0
- package/lib/esm/one-click-lca-widget.d.ts +2 -0
- package/lib/esm/one-click-lca-widget.js +1 -0
- package/lib/esm/one-click-lca-widget.js.map +1 -1
- package/lib/esm/widgets/OneClickLCAWidget.d.ts +3 -0
- package/lib/esm/widgets/OneClickLCAWidget.js +3 -2
- package/lib/esm/widgets/OneClickLCAWidget.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -13,7 +13,8 @@ This package provides a viewer _widget_. Documentation on how to add a widget to
|
|
|
13
13
|
|
|
14
14
|
## Permissions and Scopes
|
|
15
15
|
|
|
16
|
-
The SPA client used by your iTwin viewer
|
|
16
|
+
The SPA client used by your iTwin viewer must have the `itwin-platform` scope.
|
|
17
|
+
|
|
17
18
|
Users must have the `imodels_read` and `insights_view` [permissions](https://developer.bentley.com/apis/carbon-calculation/operations/create-oneclicklca-job/#authorization) assigned at either the Project or iModel level. Additional instruction on how to create roles and assign permissions can be found in the [iTwin Platform Projects API documentation](https://developer.bentley.com/apis/projects/tutorials/).
|
|
18
19
|
|
|
19
20
|
## Sample usage
|
|
@@ -4,7 +4,11 @@ interface ExportProps {
|
|
|
4
4
|
isOpen: boolean;
|
|
5
5
|
close: () => void;
|
|
6
6
|
reportId: string | undefined;
|
|
7
|
+
carbonCalculationBasePath?: string;
|
|
7
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
8
12
|
declare const ExportModal: (props: ExportProps) => JSX.Element;
|
|
9
13
|
export default ExportModal;
|
|
10
14
|
//# sourceMappingURL=ExportModal.d.ts.map
|
|
@@ -37,10 +37,16 @@ const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
|
37
37
|
const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
|
|
38
38
|
const insights_client_1 = require("@itwin/insights-client");
|
|
39
39
|
const oneClickLCALogo_png_1 = __importDefault(require("../../public/logo/oneClickLCALogo.png"));
|
|
40
|
+
const OCLCAJobsClientContext_1 = require("./context/OCLCAJobsClientContext");
|
|
41
|
+
const OCLCAApiHelper_1 = require("./api/OCLCAApiHelper");
|
|
42
|
+
/**
|
|
43
|
+
* @internal
|
|
44
|
+
*/
|
|
40
45
|
const ExportModal = (props) => {
|
|
41
46
|
const MILI_SECONDS = 1000;
|
|
42
47
|
const PIN_INTERVAL = 1000;
|
|
43
|
-
const
|
|
48
|
+
const oneClickLCAClient = (0, OCLCAJobsClientContext_1.useOCLCAJobsClient)();
|
|
49
|
+
const oclcaApiHelper = (0, react_1.useMemo)(() => new OCLCAApiHelper_1.OCLCAApiHelper(), []);
|
|
44
50
|
const [email, setEmail] = (0, react_1.useState)("");
|
|
45
51
|
const [password, setPassword] = (0, react_1.useState)("");
|
|
46
52
|
const [passwordIsVisible, showPassword] = (0, react_1.useState)(false);
|
|
@@ -74,7 +80,7 @@ const ExportModal = (props) => {
|
|
|
74
80
|
const intervalId = window.setInterval(async () => {
|
|
75
81
|
const token = (await core_frontend_1.IModelApp.authorizationClient?.getAccessToken()) ?? "";
|
|
76
82
|
if (job.id && token) {
|
|
77
|
-
const currentJobStatus = await
|
|
83
|
+
const currentJobStatus = await oneClickLCAClient.getOCLCAJobStatus(token, job?.id);
|
|
78
84
|
if (currentJobStatus.status) {
|
|
79
85
|
if (currentJobStatus.status === insights_client_1.CarbonUploadState.Succeeded) {
|
|
80
86
|
setJobLink(!!currentJobStatus?._links?.oneclicklca?.href ? { href: currentJobStatus._links.oneclicklca.href } : undefined);
|
|
@@ -88,12 +94,12 @@ const ExportModal = (props) => {
|
|
|
88
94
|
}
|
|
89
95
|
}, PIN_INTERVAL);
|
|
90
96
|
intervalRef.current = intervalId;
|
|
91
|
-
}, [setJobLink, setJobStatus,
|
|
97
|
+
}, [setJobLink, setJobStatus, oneClickLCAClient]);
|
|
92
98
|
const runJob = (0, react_1.useCallback)(async (token) => {
|
|
93
99
|
const accessToken = (await core_frontend_1.IModelApp.authorizationClient?.getAccessToken()) ?? "";
|
|
94
100
|
if (props.reportId && token) {
|
|
95
101
|
try {
|
|
96
|
-
const jobCreated = await
|
|
102
|
+
const jobCreated = await oneClickLCAClient.createJob(accessToken, {
|
|
97
103
|
reportId: props.reportId,
|
|
98
104
|
token,
|
|
99
105
|
});
|
|
@@ -116,12 +122,12 @@ const ExportModal = (props) => {
|
|
|
116
122
|
setJobStatus(insights_client_1.CarbonUploadState.Failed);
|
|
117
123
|
itwinui_react_1.toaster.negative("Invalid reportId.");
|
|
118
124
|
}
|
|
119
|
-
}, [props, pinStatus,
|
|
125
|
+
}, [props, pinStatus, oneClickLCAClient]);
|
|
120
126
|
const signin = (0, react_1.useCallback)(async (e) => {
|
|
121
127
|
e.preventDefault();
|
|
122
128
|
startSigningIn(true);
|
|
123
129
|
try {
|
|
124
|
-
const result = await
|
|
130
|
+
const result = await oclcaApiHelper.getOCLCAAccessToken(email, password);
|
|
125
131
|
if (result && result.access_token && result.expires_in) {
|
|
126
132
|
cacheToken({
|
|
127
133
|
token: result.access_token,
|
|
@@ -140,7 +146,7 @@ const ExportModal = (props) => {
|
|
|
140
146
|
console.error(err);
|
|
141
147
|
}
|
|
142
148
|
startSigningIn(false);
|
|
143
|
-
}, [email, password, resetSignin, cacheToken, showSigninError,
|
|
149
|
+
}, [email, password, resetSignin, cacheToken, showSigninError, oclcaApiHelper]);
|
|
144
150
|
const onClose = (0, react_1.useCallback)(() => {
|
|
145
151
|
resetSignin();
|
|
146
152
|
setJobStatus(undefined);
|
|
@@ -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, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { Alert, Button, LabeledInput, Modal, ProgressLinear, ProgressRadial, Text, toaster } from \"@itwin/itwinui-react\";\nimport { SvgVisibilityHide, SvgVisibilityShow } 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 = (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n if (job.id && token) {\n const currentJobStatus = await oneClickLCAClientApi.getOCLCAJobStatus(token, job?.id);\n if (currentJobStatus.status) {\n if (currentJobStatus.status === CarbonUploadState.Succeeded) {\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 = (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n if (props.reportId && token) {\n try {\n const jobCreated = await oneClickLCAClientApi.createJob(accessToken, {\n reportId: props.reportId,\n token,\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(email, password);\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 [email, password, resetSignin, cacheToken, showSigninError, oneClickLCAClientApi],\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((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 className=\"oclca-report-button\" href={link} target=\"_blank\" rel=\"noopener noreferrer\">\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>\n Invalid Job Status{\" \"}\n <span role=\"img\" aria-label=\"sad\">\n 😔\n </span>\n </Text>\n </div>\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 (jobStatus === CarbonUploadState.Succeeded || jobStatus === CarbonUploadState.Failed) {\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 data-testid=\"export-modal\" isOpen={props.isOpen} onClose={onClose} title={null} closeOnExternalClick={false}>\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={passwordIsVisible ? <SvgVisibilityHide onClick={() => showPassword(!passwordIsVisible)} /> : <SvgVisibilityShow />}\n iconDisplayStyle=\"inline\"\n required\n />\n </div>\n\n <div className=\"oclca-signin-button-container\">\n <Button className=\"oclca-signin-button\" type=\"submit\" styleType=\"cta\" disabled={!isValidSignin()}>\n {isSigningIn ? <ProgressRadial className=\"oclca-signin-wait\" indeterminate size=\"small\" value={50} /> : \"Sign In\"}\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, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { Alert, Button, LabeledInput, Modal, ProgressLinear, ProgressRadial, Text, toaster } from \"@itwin/itwinui-react\";\nimport { SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport type { Link, OCLCAJob } from \"@itwin/insights-client\";\nimport { CarbonUploadState } from \"@itwin/insights-client\";\nimport logo from \"../../public/logo/oneClickLCALogo.png\";\nimport { useOCLCAJobsClient } from \"./context/OCLCAJobsClientContext\";\nimport { OCLCAApiHelper } from \"./api/OCLCAApiHelper\";\n\ninterface ExportProps {\n isOpen: boolean;\n close: () => void;\n reportId: string | undefined;\n carbonCalculationBasePath?: string;\n}\n\ninterface OclcaTokenCache {\n token: string;\n exp: number;\n}\n\n/**\n * @internal\n */\nconst ExportModal = (props: ExportProps) => {\n const MILI_SECONDS = 1000;\n const PIN_INTERVAL = 1000;\n const oneClickLCAClient = useOCLCAJobsClient();\n const oclcaApiHelper = useMemo(() => new OCLCAApiHelper(), []);\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 = (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n if (job.id && token) {\n const currentJobStatus = await oneClickLCAClient.getOCLCAJobStatus(token, job?.id);\n if (currentJobStatus.status) {\n if (currentJobStatus.status === CarbonUploadState.Succeeded) {\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, oneClickLCAClient],\n );\n\n const runJob = useCallback(\n async (token: string) => {\n const accessToken = (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n if (props.reportId && token) {\n try {\n const jobCreated = await oneClickLCAClient.createJob(accessToken, {\n reportId: props.reportId,\n token,\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, oneClickLCAClient],\n );\n\n const signin = useCallback(\n async (e) => {\n e.preventDefault();\n startSigningIn(true);\n try {\n const result = await oclcaApiHelper.getOCLCAAccessToken(email, password);\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 [email, password, resetSignin, cacheToken, showSigninError, oclcaApiHelper],\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((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 className=\"oclca-report-button\" href={link} target=\"_blank\" rel=\"noopener noreferrer\">\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>\n Invalid Job Status{\" \"}\n <span role=\"img\" aria-label=\"sad\">\n 😔\n </span>\n </Text>\n </div>\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 (jobStatus === CarbonUploadState.Succeeded || jobStatus === CarbonUploadState.Failed) {\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 data-testid=\"export-modal\" isOpen={props.isOpen} onClose={onClose} title={null} closeOnExternalClick={false}>\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={passwordIsVisible ? <SvgVisibilityHide onClick={() => showPassword(!passwordIsVisible)} /> : <SvgVisibilityShow />}\n iconDisplayStyle=\"inline\"\n required\n />\n </div>\n\n <div className=\"oclca-signin-button-container\">\n <Button className=\"oclca-signin-button\" type=\"submit\" styleType=\"cta\" disabled={!isValidSignin()}>\n {isSigningIn ? <ProgressRadial className=\"oclca-signin-wait\" indeterminate size=\"small\" value={50} /> : \"Sign In\"}\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,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import "./Reports.scss";
|
|
3
|
-
|
|
3
|
+
import type { OneClickLCAProps } from "./OneClickLCAProps";
|
|
4
|
+
declare const OneClickLCA: (props?: OneClickLCAProps | undefined) => JSX.Element;
|
|
4
5
|
export default OneClickLCA;
|
|
5
6
|
//# sourceMappingURL=OneClickLCA.d.ts.map
|
|
@@ -1,18 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
4
24
|
};
|
|
5
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
26
|
/*---------------------------------------------------------------------------------------------
|
|
7
27
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
8
28
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
9
29
|
*--------------------------------------------------------------------------------------------*/
|
|
10
|
-
const react_1 =
|
|
11
|
-
const Reports_1 =
|
|
30
|
+
const react_1 = __importStar(require("react"));
|
|
31
|
+
const Reports_1 = require("./Reports");
|
|
12
32
|
require("./Reports.scss");
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
33
|
+
const ReportsClientContext_1 = require("./context/ReportsClientContext");
|
|
34
|
+
const OCLCAJobsClientContext_1 = require("./context/OCLCAJobsClientContext");
|
|
35
|
+
const OneClickLCA = (props) => {
|
|
36
|
+
const [reportsClient, setReportsClient] = (0, react_1.useState)(props?.reportsClient ?? (0, ReportsClientContext_1.createDefaultReportsClient)(props?.reportingBasePath));
|
|
37
|
+
const [oclcaJobsClient, setOclcaJobsClient] = (0, react_1.useState)(props?.oclcaJobsClient ?? (0, OCLCAJobsClientContext_1.createDefaultOCLCAJobsClient)(props?.carbonCalculationBasePath));
|
|
38
|
+
(0, react_1.useEffect)(() => setReportsClient(props?.reportsClient ?? (0, ReportsClientContext_1.createDefaultReportsClient)(props?.reportingBasePath)), [props?.reportingBasePath, props?.reportsClient]);
|
|
39
|
+
(0, react_1.useEffect)(() => setOclcaJobsClient(props?.oclcaJobsClient ?? (0, OCLCAJobsClientContext_1.createDefaultOCLCAJobsClient)(props?.carbonCalculationBasePath)), [props?.carbonCalculationBasePath, props?.oclcaJobsClient]);
|
|
40
|
+
return (react_1.default.createElement(ReportsClientContext_1.ReportsClientContext.Provider, { value: reportsClient },
|
|
41
|
+
react_1.default.createElement(OCLCAJobsClientContext_1.OCLCAJobsClientContext.Provider, { value: oclcaJobsClient },
|
|
42
|
+
react_1.default.createElement("div", { className: "oclca-container" },
|
|
43
|
+
react_1.default.createElement(Reports_1.Reports, null)))));
|
|
16
44
|
};
|
|
17
45
|
exports.default = OneClickLCA;
|
|
18
46
|
//# sourceMappingURL=OneClickLCA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OneClickLCA.js","sourceRoot":"","sources":["../../../src/components/OneClickLCA.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OneClickLCA.js","sourceRoot":"","sources":["../../../src/components/OneClickLCA.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAChG,+CAAmD;AACnD,uCAAoC;AACpC,0BAAwB;AAGxB,yEAAkG;AAElG,6EAAwG;AAExG,MAAM,WAAW,GAAG,CAAC,KAAwB,EAAE,EAAE;IAC/C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAiB,KAAK,EAAE,aAAa,IAAI,IAAA,iDAA0B,EAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACjJ,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EACpD,KAAK,EAAE,eAAe,IAAI,IAAA,qDAA4B,EAAC,KAAK,EAAE,yBAAyB,CAAC,CACzF,CAAC;IAEF,IAAA,iBAAS,EACP,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,IAAI,IAAA,iDAA0B,EAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,EACpG,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,CAAC,CACjD,CAAC;IACF,IAAA,iBAAS,EACP,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,eAAe,IAAI,IAAA,qDAA4B,EAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC,EAClH,CAAC,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,eAAe,CAAC,CAC3D,CAAC;IAEF,OAAO,CACL,8BAAC,2CAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,aAAa;QACjD,8BAAC,+CAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,eAAe;YACrD,uCAAK,SAAS,EAAC,iBAAiB;gBAC9B,8BAAC,iBAAO,OAAG,CACP,CAC0B,CACJ,CACjC,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,WAAW,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, { useEffect, useState } from \"react\";\nimport { Reports } from \"./Reports\";\nimport \"./Reports.scss\";\n\nimport type { OneClickLCAProps } from \"./OneClickLCAProps\";\nimport { createDefaultReportsClient, ReportsClientContext } from \"./context/ReportsClientContext\";\nimport type { IOCLCAJobsClient, IReportsClient } from \"@itwin/insights-client\";\nimport { createDefaultOCLCAJobsClient, OCLCAJobsClientContext } from \"./context/OCLCAJobsClientContext\";\n\nconst OneClickLCA = (props?: OneClickLCAProps) => {\n const [reportsClient, setReportsClient] = useState<IReportsClient>(props?.reportsClient ?? createDefaultReportsClient(props?.reportingBasePath));\n const [oclcaJobsClient, setOclcaJobsClient] = useState<IOCLCAJobsClient>(\n props?.oclcaJobsClient ?? createDefaultOCLCAJobsClient(props?.carbonCalculationBasePath),\n );\n\n useEffect(\n () => setReportsClient(props?.reportsClient ?? createDefaultReportsClient(props?.reportingBasePath)),\n [props?.reportingBasePath, props?.reportsClient],\n );\n useEffect(\n () => setOclcaJobsClient(props?.oclcaJobsClient ?? createDefaultOCLCAJobsClient(props?.carbonCalculationBasePath)),\n [props?.carbonCalculationBasePath, props?.oclcaJobsClient],\n );\n\n return (\n <ReportsClientContext.Provider value={reportsClient}>\n <OCLCAJobsClientContext.Provider value={oclcaJobsClient}>\n <div className=\"oclca-container\">\n <Reports />\n </div>\n </OCLCAJobsClientContext.Provider>\n </ReportsClientContext.Provider>\n );\n};\n\nexport default OneClickLCA;\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { IOCLCAJobsClient, IReportsClient } from "@itwin/insights-client";
|
|
2
|
+
/**
|
|
3
|
+
* Props for the {@link OneClickLCA} component.
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export interface OneClickLCAProps {
|
|
7
|
+
/**
|
|
8
|
+
* The base path for the Reporting API endpoints. If not specified, it defaults to REPORTING_BASE_PATH from @itwin/insights-client.
|
|
9
|
+
*/
|
|
10
|
+
reportingBasePath?: string;
|
|
11
|
+
/**
|
|
12
|
+
* The base path for the Carbon Calculation API endpoints. If not specified, it defaults to CARBON_CALCULATION_BASE_PATH from @itwin/insights-client.
|
|
13
|
+
*/
|
|
14
|
+
carbonCalculationBasePath?: string;
|
|
15
|
+
/**
|
|
16
|
+
* A custom implementation of IReportsClient. If provided, reportingBasePath is ignored.
|
|
17
|
+
*/
|
|
18
|
+
reportsClient?: IReportsClient;
|
|
19
|
+
/**
|
|
20
|
+
* A custom implementation of IOCLCAJobsClient. If provided, carbonCalculationBasePath is ignored.
|
|
21
|
+
*/
|
|
22
|
+
oclcaJobsClient?: IOCLCAJobsClient;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=OneClickLCAProps.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
//# sourceMappingURL=OneClickLCAProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OneClickLCAProps.js","sourceRoot":"","sources":["../../../src/components/OneClickLCAProps.ts"],"names":[],"mappings":";AAAA;;;gGAGgG","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 *--------------------------------------------------------------------------------------------*/\n\nimport type { IOCLCAJobsClient, IReportsClient } from \"@itwin/insights-client\";\n\n/**\n * Props for the {@link OneClickLCA} component.\n * @public\n */\nexport interface OneClickLCAProps {\n /**\n * The base path for the Reporting API endpoints. If not specified, it defaults to REPORTING_BASE_PATH from @itwin/insights-client.\n */\n reportingBasePath?: string;\n\n /**\n * The base path for the Carbon Calculation API endpoints. If not specified, it defaults to CARBON_CALCULATION_BASE_PATH from @itwin/insights-client.\n */\n carbonCalculationBasePath?: string;\n\n /**\n * A custom implementation of IReportsClient. If provided, reportingBasePath is ignored.\n */\n reportsClient?: IReportsClient;\n\n /**\n * A custom implementation of IOCLCAJobsClient. If provided, carbonCalculationBasePath is ignored.\n */\n oclcaJobsClient?: IOCLCAJobsClient;\n}\n"]}
|
|
@@ -26,6 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Reports = void 0;
|
|
29
30
|
/*---------------------------------------------------------------------------------------------
|
|
30
31
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
31
32
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -35,13 +36,16 @@ const core_react_1 = require("@itwin/core-react");
|
|
|
35
36
|
const core_frontend_1 = require("@itwin/core-frontend");
|
|
36
37
|
const appui_react_1 = require("@itwin/appui-react");
|
|
37
38
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
38
|
-
const insights_client_1 = require("@itwin/insights-client");
|
|
39
39
|
const utils_1 = require("./utils");
|
|
40
40
|
const ExportModal_1 = __importDefault(require("./ExportModal"));
|
|
41
41
|
require("./Reports.scss");
|
|
42
|
+
const ReportsClientContext_1 = require("./context/ReportsClientContext");
|
|
43
|
+
/**
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
42
46
|
const Reports = () => {
|
|
43
47
|
const projectId = (0, appui_react_1.useActiveIModelConnection)()?.iTwinId;
|
|
44
|
-
const
|
|
48
|
+
const reportsClient = (0, ReportsClientContext_1.useReportsClient)();
|
|
45
49
|
const [isLoading, setIsLoading] = (0, react_1.useState)(true);
|
|
46
50
|
const [reports, setReports] = (0, react_1.useState)([]);
|
|
47
51
|
const [buttonIsDisabled, disableButton] = (0, react_1.useState)(true);
|
|
@@ -97,7 +101,7 @@ const Reports = () => {
|
|
|
97
101
|
core_frontend_1.IModelApp.authorizationClient
|
|
98
102
|
.getAccessToken()
|
|
99
103
|
.then((token) => {
|
|
100
|
-
|
|
104
|
+
reportsClient
|
|
101
105
|
.getReports(token, projectId)
|
|
102
106
|
.then((data) => {
|
|
103
107
|
if (data) {
|
|
@@ -119,7 +123,7 @@ const Reports = () => {
|
|
|
119
123
|
/* eslint-disable no-console */
|
|
120
124
|
console.error(err);
|
|
121
125
|
});
|
|
122
|
-
}, [projectId,
|
|
126
|
+
}, [projectId, reportsClient]);
|
|
123
127
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
124
128
|
react_1.default.createElement(utils_1.WidgetHeader, { title: "Reports" }),
|
|
125
129
|
react_1.default.createElement("div", { className: "oclca-reports-container" },
|
|
@@ -130,5 +134,5 @@ const Reports = () => {
|
|
|
130
134
|
react_1.default.createElement(itwinui_react_1.Button, { onClick: () => openModal(true), styleType: "cta", disabled: buttonIsDisabled, className: "oclca-button-center" }, "One Click LCA Export"),
|
|
131
135
|
react_1.default.createElement(ExportModal_1.default, { isOpen: modalIsOpen, close: () => openModal(false), reportId: selectedReport?.id })));
|
|
132
136
|
};
|
|
133
|
-
exports.
|
|
137
|
+
exports.Reports = Reports;
|
|
134
138
|
//# sourceMappingURL=Reports.js.map
|
|
@@ -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 { WidgetHeader } from \"./utils\";\nimport ExportModal from \"./ExportModal\";\nimport \"./Reports.scss\";\nimport { useReportsClient } from \"./context/ReportsClientContext\";\n\ntype CreateTypeFromInterface<Interface> = {\n [Property in keyof Interface]: Interface[Property];\n};\n\ntype Reporting = CreateTypeFromInterface<Report>;\n\n/**\n * @internal\n */\nexport const Reports = () => {\n const projectId = useActiveIModelConnection()?.iTwinId as string;\n const reportsClient = useReportsClient();\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((x) => x.displayName && x.displayName.toLowerCase().indexOf(value.toLowerCase()) > -1);\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) throw new Error(\"AuthorizationClient is not defined. Most likely IModelApp.startup was not called yet.\");\n IModelApp.authorizationClient\n .getAccessToken()\n .then((token: string) => {\n reportsClient\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, reportsClient]);\n\n return (\n <>\n <WidgetHeader title=\"Reports\" />\n <div className=\"oclca-reports-container\">\n <div className=\"oclca-searchbox-container\">\n <SearchBox onValueChanged={onSearchBoxValueChanged} placeholder={\"Search reports\"} />\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 onClick={() => openModal(true)} styleType=\"cta\" disabled={buttonIsDisabled} className=\"oclca-button-center\">\n One Click LCA Export\n </Button>\n <ExportModal isOpen={modalIsOpen} close={() => openModal(false)} reportId={selectedReport?.id} />\n </>\n );\n};\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OCLCALoginResponse } from "@itwin/insights-client";
|
|
2
|
+
import { OperationsBase } from "@itwin/insights-client";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export declare class OCLCAApiHelper extends OperationsBase {
|
|
7
|
+
getOCLCAAccessToken(username: string, apiPassword: string): Promise<OCLCALoginResponse | undefined>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=OCLCAApiHelper.d.ts.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OCLCAApiHelper = void 0;
|
|
4
|
+
const insights_client_1 = require("@itwin/insights-client");
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
class OCLCAApiHelper extends insights_client_1.OperationsBase {
|
|
9
|
+
async getOCLCAAccessToken(username, apiPassword) {
|
|
10
|
+
if (username === undefined || apiPassword === undefined) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
const requestOptions = {
|
|
14
|
+
method: "POST",
|
|
15
|
+
};
|
|
16
|
+
requestOptions.body = JSON.stringify({
|
|
17
|
+
username,
|
|
18
|
+
password: apiPassword,
|
|
19
|
+
});
|
|
20
|
+
const url = `https://oneclicklcaapp.com/app/api/login`;
|
|
21
|
+
return this.fetchJSON(url, requestOptions);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.OCLCAApiHelper = OCLCAApiHelper;
|
|
25
|
+
//# sourceMappingURL=OCLCAApiHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OCLCAApiHelper.js","sourceRoot":"","sources":["../../../../src/components/api/OCLCAApiHelper.ts"],"names":[],"mappings":";;;AAKA,4DAAwD;AAExD;;GAEG;AACH,MAAa,cAAe,SAAQ,gCAAc;IACzC,KAAK,CAAC,mBAAmB,CAAC,QAAgB,EAAE,WAAmB;QACpE,IAAI,QAAQ,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE;YACvD,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,cAAc,GAAgB;YAClC,MAAM,EAAE,MAAM;SACf,CAAC;QACF,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YACnC,QAAQ;YACR,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,0CAA0C,CAAC;QACvD,OAAO,IAAI,CAAC,SAAS,CAAqB,GAAG,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC;CACF;AAfD,wCAeC","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 { OCLCALoginResponse} from \"@itwin/insights-client\";\nimport { OperationsBase } from \"@itwin/insights-client\";\n\n/**\n * @internal\n */\nexport class OCLCAApiHelper extends OperationsBase {\n public async getOCLCAAccessToken(username: string, apiPassword: string) {\n if (username === undefined || apiPassword === undefined) {\n return undefined;\n }\n const requestOptions: RequestInit = {\n method: \"POST\",\n };\n requestOptions.body = JSON.stringify({\n username,\n password: apiPassword,\n });\n const url = `https://oneclicklcaapp.com/app/api/login`;\n return this.fetchJSON<OCLCALoginResponse>(url, requestOptions);\n }\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { IOCLCAJobsClient } from "@itwin/insights-client";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export declare const createDefaultOCLCAJobsClient: (carbonCalculationBasePath?: string | undefined) => IOCLCAJobsClient;
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare const OCLCAJobsClientContext: import("react").Context<IOCLCAJobsClient>;
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare const useOCLCAJobsClient: () => IOCLCAJobsClient;
|
|
15
|
+
//# sourceMappingURL=OCLCAJobsClientContext.d.ts.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useOCLCAJobsClient = exports.OCLCAJobsClientContext = exports.createDefaultOCLCAJobsClient = void 0;
|
|
4
|
+
const insights_client_1 = require("@itwin/insights-client");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
const createDefaultOCLCAJobsClient = (carbonCalculationBasePath) => new insights_client_1.OCLCAJobsClient(carbonCalculationBasePath ?? insights_client_1.CARBON_CALCULATION_BASE_PATH);
|
|
10
|
+
exports.createDefaultOCLCAJobsClient = createDefaultOCLCAJobsClient;
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
exports.OCLCAJobsClientContext = (0, react_1.createContext)((0, exports.createDefaultOCLCAJobsClient)());
|
|
15
|
+
/**
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
const useOCLCAJobsClient = () => {
|
|
19
|
+
const context = (0, react_1.useContext)(exports.OCLCAJobsClientContext);
|
|
20
|
+
if (!context) {
|
|
21
|
+
throw new Error("useOCLCAJobsClient should be used within a OCLCAJobsClientContext provider");
|
|
22
|
+
}
|
|
23
|
+
return context;
|
|
24
|
+
};
|
|
25
|
+
exports.useOCLCAJobsClient = useOCLCAJobsClient;
|
|
26
|
+
//# sourceMappingURL=OCLCAJobsClientContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OCLCAJobsClientContext.js","sourceRoot":"","sources":["../../../../src/components/context/OCLCAJobsClientContext.ts"],"names":[],"mappings":";;;AAKA,4DAAuF;AACvF,iCAAkD;AAElD;;GAEG;AACI,MAAM,4BAA4B,GAAG,CAAC,yBAAkC,EAAoB,EAAE,CACnG,IAAI,iCAAe,CAAC,yBAAyB,IAAI,8CAA4B,CAAC,CAAC;AADpE,QAAA,4BAA4B,gCACwC;AAEjF;;GAEG;AACU,QAAA,sBAAsB,GAAG,IAAA,qBAAa,EAAmB,IAAA,oCAA4B,GAAE,CAAC,CAAC;AAEtG;;GAEG;AACI,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,8BAAsB,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;KAC/F;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AANW,QAAA,kBAAkB,sBAM7B","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 { IOCLCAJobsClient } from \"@itwin/insights-client\";\nimport { CARBON_CALCULATION_BASE_PATH, OCLCAJobsClient } from \"@itwin/insights-client\";\nimport { createContext, useContext } from \"react\";\n\n/**\n * @internal\n */\nexport const createDefaultOCLCAJobsClient = (carbonCalculationBasePath?: string): IOCLCAJobsClient =>\n new OCLCAJobsClient(carbonCalculationBasePath ?? CARBON_CALCULATION_BASE_PATH);\n\n/**\n * @internal\n */\nexport const OCLCAJobsClientContext = createContext<IOCLCAJobsClient>(createDefaultOCLCAJobsClient());\n\n/**\n * @internal\n */\nexport const useOCLCAJobsClient = () => {\n const context = useContext(OCLCAJobsClientContext);\n if (!context) {\n throw new Error(\"useOCLCAJobsClient should be used within a OCLCAJobsClientContext provider\");\n }\n return context;\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { IReportsClient } from "@itwin/insights-client";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export declare const createDefaultReportsClient: (reportingBasePath?: string | undefined) => IReportsClient;
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare const ReportsClientContext: import("react").Context<IReportsClient>;
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare const useReportsClient: () => IReportsClient;
|
|
15
|
+
//# sourceMappingURL=ReportsClientContext.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useReportsClient = exports.ReportsClientContext = exports.createDefaultReportsClient = void 0;
|
|
4
|
+
const insights_client_1 = require("@itwin/insights-client");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
const createDefaultReportsClient = (reportingBasePath) => {
|
|
10
|
+
return new insights_client_1.ReportsClient(reportingBasePath ?? insights_client_1.REPORTING_BASE_PATH);
|
|
11
|
+
};
|
|
12
|
+
exports.createDefaultReportsClient = createDefaultReportsClient;
|
|
13
|
+
/**
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
exports.ReportsClientContext = (0, react_1.createContext)((0, exports.createDefaultReportsClient)());
|
|
17
|
+
/**
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
const useReportsClient = () => {
|
|
21
|
+
const context = (0, react_1.useContext)(exports.ReportsClientContext);
|
|
22
|
+
if (!context) {
|
|
23
|
+
throw new Error("useReportsClient should be used within a ReportsClientContext provider");
|
|
24
|
+
}
|
|
25
|
+
return context;
|
|
26
|
+
};
|
|
27
|
+
exports.useReportsClient = useReportsClient;
|
|
28
|
+
//# sourceMappingURL=ReportsClientContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReportsClientContext.js","sourceRoot":"","sources":["../../../../src/components/context/ReportsClientContext.ts"],"names":[],"mappings":";;;AAKA,4DAA4E;AAC5E,iCAAkD;AAElD;;GAEG;AACI,MAAM,0BAA0B,GAAG,CAAC,iBAA0B,EAAkB,EAAE;IACvF,OAAO,IAAI,+BAAa,CAAC,iBAAiB,IAAI,qCAAmB,CAAC,CAAC;AACrE,CAAC,CAAC;AAFW,QAAA,0BAA0B,8BAErC;AAEF;;GAEG;AACU,QAAA,oBAAoB,GAAG,IAAA,qBAAa,EAAiB,IAAA,kCAA0B,GAAE,CAAC,CAAC;AAEhG;;GAEG;AACI,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,4BAAoB,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;KAC3F;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AANW,QAAA,gBAAgB,oBAM3B","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 { IReportsClient } from \"@itwin/insights-client\";\nimport { REPORTING_BASE_PATH, ReportsClient } from \"@itwin/insights-client\";\nimport { createContext, useContext } from \"react\";\n\n/**\n * @internal\n */\nexport const createDefaultReportsClient = (reportingBasePath?: string): IReportsClient => {\n return new ReportsClient(reportingBasePath ?? REPORTING_BASE_PATH);\n};\n\n/**\n * @internal\n */\nexport const ReportsClientContext = createContext<IReportsClient>(createDefaultReportsClient());\n\n/**\n * @internal\n */\nexport const useReportsClient = () => {\n const context = useContext(ReportsClientContext);\n if (!context) {\n throw new Error(\"useReportsClient should be used within a ReportsClientContext provider\");\n }\n return context;\n};\n"]}
|
|
@@ -20,4 +20,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
20
20
|
*--------------------------------------------------------------------------------------------*/
|
|
21
21
|
/** UI Provider for iTwin Viewer Applications */
|
|
22
22
|
__exportStar(require("./widgets/OneClickLCAWidget"), exports);
|
|
23
|
+
__exportStar(require("@itwin/insights-client"), exports);
|
|
23
24
|
//# sourceMappingURL=one-click-lca-widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"one-click-lca-widget.js","sourceRoot":"","sources":["../../src/one-click-lca-widget.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAChG,gDAAgD;AAChD,8DAA4C","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 *--------------------------------------------------------------------------------------------*/\n/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widgets/OneClickLCAWidget\";\n"]}
|
|
1
|
+
{"version":3,"file":"one-click-lca-widget.js","sourceRoot":"","sources":["../../src/one-click-lca-widget.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAChG,gDAAgD;AAChD,8DAA4C;AAE5C,yDAAuC","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 *--------------------------------------------------------------------------------------------*/\n/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widgets/OneClickLCAWidget\";\n\nexport * from \"@itwin/insights-client\";\n\nexport { OneClickLCAProps } from \"./components/OneClickLCAProps\";\n"]}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { UiItemsProvider, Widget } from "@itwin/appui-react";
|
|
2
2
|
import { StagePanelLocation, StagePanelSection } from "@itwin/appui-react";
|
|
3
|
+
import type { OneClickLCAProps } from "../components/OneClickLCAProps";
|
|
3
4
|
export declare class OneClickLCAProvider implements UiItemsProvider {
|
|
5
|
+
private readonly _props?;
|
|
4
6
|
readonly id = "OneClickLCAProvider";
|
|
7
|
+
constructor(_props?: OneClickLCAProps | undefined);
|
|
5
8
|
provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection): ReadonlyArray<Widget>;
|
|
6
9
|
}
|
|
7
10
|
//# sourceMappingURL=OneClickLCAWidget.d.ts.map
|