@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.
Files changed (56) hide show
  1. package/README.md +2 -1
  2. package/lib/cjs/components/ExportModal.d.ts +4 -0
  3. package/lib/cjs/components/ExportModal.js +13 -7
  4. package/lib/cjs/components/ExportModal.js.map +1 -1
  5. package/lib/cjs/components/OneClickLCA.d.ts +2 -1
  6. package/lib/cjs/components/OneClickLCA.js +35 -7
  7. package/lib/cjs/components/OneClickLCA.js.map +1 -1
  8. package/lib/cjs/components/OneClickLCAProps.d.ts +24 -0
  9. package/lib/cjs/components/OneClickLCAProps.js +7 -0
  10. package/lib/cjs/components/OneClickLCAProps.js.map +1 -0
  11. package/lib/cjs/components/Reports.d.ts +4 -2
  12. package/lib/cjs/components/Reports.js +9 -5
  13. package/lib/cjs/components/Reports.js.map +1 -1
  14. package/lib/cjs/components/api/OCLCAApiHelper.d.ts +9 -0
  15. package/lib/cjs/components/api/OCLCAApiHelper.js +25 -0
  16. package/lib/cjs/components/api/OCLCAApiHelper.js.map +1 -0
  17. package/lib/cjs/components/context/OCLCAJobsClientContext.d.ts +15 -0
  18. package/lib/cjs/components/context/OCLCAJobsClientContext.js +26 -0
  19. package/lib/cjs/components/context/OCLCAJobsClientContext.js.map +1 -0
  20. package/lib/cjs/components/context/ReportsClientContext.d.ts +15 -0
  21. package/lib/cjs/components/context/ReportsClientContext.js +28 -0
  22. package/lib/cjs/components/context/ReportsClientContext.js.map +1 -0
  23. package/lib/cjs/one-click-lca-widget.d.ts +2 -0
  24. package/lib/cjs/one-click-lca-widget.js +1 -0
  25. package/lib/cjs/one-click-lca-widget.js.map +1 -1
  26. package/lib/cjs/widgets/OneClickLCAWidget.d.ts +3 -0
  27. package/lib/cjs/widgets/OneClickLCAWidget.js +3 -2
  28. package/lib/cjs/widgets/OneClickLCAWidget.js.map +1 -1
  29. package/lib/esm/components/ExportModal.d.ts +4 -0
  30. package/lib/esm/components/ExportModal.js +14 -8
  31. package/lib/esm/components/ExportModal.js.map +1 -1
  32. package/lib/esm/components/OneClickLCA.d.ts +2 -1
  33. package/lib/esm/components/OneClickLCA.js +13 -5
  34. package/lib/esm/components/OneClickLCA.js.map +1 -1
  35. package/lib/esm/components/OneClickLCAProps.d.ts +24 -0
  36. package/lib/esm/components/OneClickLCAProps.js +6 -0
  37. package/lib/esm/components/OneClickLCAProps.js.map +1 -0
  38. package/lib/esm/components/Reports.d.ts +4 -2
  39. package/lib/esm/components/Reports.js +8 -6
  40. package/lib/esm/components/Reports.js.map +1 -1
  41. package/lib/esm/components/api/OCLCAApiHelper.d.ts +9 -0
  42. package/lib/esm/components/api/OCLCAApiHelper.js +21 -0
  43. package/lib/esm/components/api/OCLCAApiHelper.js.map +1 -0
  44. package/lib/esm/components/context/OCLCAJobsClientContext.d.ts +15 -0
  45. package/lib/esm/components/context/OCLCAJobsClientContext.js +21 -0
  46. package/lib/esm/components/context/OCLCAJobsClientContext.js.map +1 -0
  47. package/lib/esm/components/context/ReportsClientContext.d.ts +15 -0
  48. package/lib/esm/components/context/ReportsClientContext.js +23 -0
  49. package/lib/esm/components/context/ReportsClientContext.js.map +1 -0
  50. package/lib/esm/one-click-lca-widget.d.ts +2 -0
  51. package/lib/esm/one-click-lca-widget.js +1 -0
  52. package/lib/esm/one-click-lca-widget.js.map +1 -1
  53. package/lib/esm/widgets/OneClickLCAWidget.d.ts +3 -0
  54. package/lib/esm/widgets/OneClickLCAWidget.js +3 -2
  55. package/lib/esm/widgets/OneClickLCAWidget.js.map +1 -1
  56. 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 application must have allowed scopes `insights:read` and `insights:write`, found under the Reporting & Insights category.
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 oneClickLCAClientApi = (0, react_1.useMemo)(() => new insights_client_1.OCLCAJobsClient(), []);
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 oneClickLCAClientApi.getOCLCAJobStatus(token, job?.id);
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, oneClickLCAClientApi]);
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 oneClickLCAClientApi.createJob(accessToken, {
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, oneClickLCAClientApi]);
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 oneClickLCAClientApi.getOCLCAAccessToken(email, password);
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, oneClickLCAClientApi]);
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
- declare const OneClickLCA: () => JSX.Element;
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 __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
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 = __importDefault(require("react"));
11
- const Reports_1 = __importDefault(require("./Reports"));
30
+ const react_1 = __importStar(require("react"));
31
+ const Reports_1 = require("./Reports");
12
32
  require("./Reports.scss");
13
- const OneClickLCA = () => {
14
- return (react_1.default.createElement("div", { className: "oclca-container" },
15
- react_1.default.createElement(Reports_1.default, null)));
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":";;;;;AAAA;;;gGAGgG;AAChG,kDAA0B;AAC1B,wDAAgC;AAChC,0BAAwB;AAExB,MAAM,WAAW,GAAG,GAAG,EAAE;IACvB,OAAO,CACL,uCAAK,SAAS,EAAC,iBAAiB;QAC9B,8BAAC,iBAAO,OAAG,CACP,CACP,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 from \"react\";\nimport Reports from \"./Reports\";\nimport \"./Reports.scss\";\n\nconst OneClickLCA = () => {\n return (\n <div className=\"oclca-container\">\n <Reports />\n </div>\n );\n};\n\nexport default OneClickLCA;\n"]}
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"]}
@@ -1,5 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import "./Reports.scss";
3
- declare const Reports: () => JSX.Element;
4
- export default Reports;
3
+ /**
4
+ * @internal
5
+ */
6
+ export declare const Reports: () => JSX.Element;
5
7
  //# sourceMappingURL=Reports.d.ts.map
@@ -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 reportsClientApi = (0, react_1.useMemo)(() => new insights_client_1.ReportsClient(), []);
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
- reportsClientApi
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, reportsClientApi]);
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.default = Reports;
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":"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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((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 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 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\nexport default Reports;\n"]}
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"]}
@@ -1,3 +1,5 @@
1
1
  /** UI Provider for iTwin Viewer Applications */
2
2
  export * from "./widgets/OneClickLCAWidget";
3
+ export * from "@itwin/insights-client";
4
+ export { OneClickLCAProps } from "./components/OneClickLCAProps";
3
5
  //# sourceMappingURL=one-click-lca-widget.d.ts.map
@@ -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