@itwin/one-click-lca-react 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/lib/cjs/components/ExportModal.d.ts +4 -0
  2. package/lib/cjs/components/ExportModal.js +26 -23
  3. package/lib/cjs/components/ExportModal.js.map +1 -1
  4. package/lib/cjs/components/OneClickLCA.d.ts +2 -1
  5. package/lib/cjs/components/OneClickLCA.js +38 -10
  6. package/lib/cjs/components/OneClickLCA.js.map +1 -1
  7. package/lib/cjs/components/OneClickLCAProps.d.ts +24 -0
  8. package/lib/cjs/components/OneClickLCAProps.js +7 -0
  9. package/lib/cjs/components/OneClickLCAProps.js.map +1 -0
  10. package/lib/cjs/components/Reports.d.ts +4 -2
  11. package/lib/cjs/components/Reports.js +18 -11
  12. package/lib/cjs/components/Reports.js.map +1 -1
  13. package/lib/cjs/components/api/OCLCAApiHelper.d.ts +9 -0
  14. package/lib/cjs/components/api/OCLCAApiHelper.js +25 -0
  15. package/lib/cjs/components/api/OCLCAApiHelper.js.map +1 -0
  16. package/lib/cjs/components/context/OCLCAJobsClientContext.d.ts +15 -0
  17. package/lib/cjs/components/context/OCLCAJobsClientContext.js +26 -0
  18. package/lib/cjs/components/context/OCLCAJobsClientContext.js.map +1 -0
  19. package/lib/cjs/components/context/ReportsClientContext.d.ts +15 -0
  20. package/lib/cjs/components/context/ReportsClientContext.js +28 -0
  21. package/lib/cjs/components/context/ReportsClientContext.js.map +1 -0
  22. package/lib/cjs/components/utils.d.ts +1 -1
  23. package/lib/cjs/components/utils.js +4 -4
  24. package/lib/cjs/components/utils.js.map +1 -1
  25. package/lib/cjs/one-click-lca-widget.d.ts +2 -0
  26. package/lib/cjs/one-click-lca-widget.js +9 -4
  27. package/lib/cjs/one-click-lca-widget.js.map +1 -1
  28. package/lib/cjs/test/ExportModal.test.js +3 -3
  29. package/lib/cjs/test/ExportModal.test.js.map +1 -1
  30. package/lib/cjs/test/WidgetHeader.test.js +3 -3
  31. package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
  32. package/lib/cjs/widgets/OneClickLCAWidget.d.ts +3 -0
  33. package/lib/cjs/widgets/OneClickLCAWidget.js +4 -5
  34. package/lib/cjs/widgets/OneClickLCAWidget.js.map +1 -1
  35. package/lib/esm/components/ExportModal.d.ts +4 -0
  36. package/lib/esm/components/ExportModal.js +25 -26
  37. package/lib/esm/components/ExportModal.js.map +1 -1
  38. package/lib/esm/components/OneClickLCA.d.ts +2 -1
  39. package/lib/esm/components/OneClickLCA.js +16 -8
  40. package/lib/esm/components/OneClickLCA.js.map +1 -1
  41. package/lib/esm/components/OneClickLCAProps.d.ts +24 -0
  42. package/lib/esm/components/OneClickLCAProps.js +6 -0
  43. package/lib/esm/components/OneClickLCAProps.js.map +1 -0
  44. package/lib/esm/components/Reports.d.ts +4 -2
  45. package/lib/esm/components/Reports.js +12 -11
  46. package/lib/esm/components/Reports.js.map +1 -1
  47. package/lib/esm/components/api/OCLCAApiHelper.d.ts +9 -0
  48. package/lib/esm/components/api/OCLCAApiHelper.js +21 -0
  49. package/lib/esm/components/api/OCLCAApiHelper.js.map +1 -0
  50. package/lib/esm/components/context/OCLCAJobsClientContext.d.ts +15 -0
  51. package/lib/esm/components/context/OCLCAJobsClientContext.js +21 -0
  52. package/lib/esm/components/context/OCLCAJobsClientContext.js.map +1 -0
  53. package/lib/esm/components/context/ReportsClientContext.d.ts +15 -0
  54. package/lib/esm/components/context/ReportsClientContext.js +23 -0
  55. package/lib/esm/components/context/ReportsClientContext.js.map +1 -0
  56. package/lib/esm/components/utils.d.ts +1 -1
  57. package/lib/esm/components/utils.js +4 -4
  58. package/lib/esm/components/utils.js.map +1 -1
  59. package/lib/esm/one-click-lca-widget.d.ts +2 -0
  60. package/lib/esm/one-click-lca-widget.js +4 -3
  61. package/lib/esm/one-click-lca-widget.js.map +1 -1
  62. package/lib/esm/test/ExportModal.test.js +3 -3
  63. package/lib/esm/test/ExportModal.test.js.map +1 -1
  64. package/lib/esm/test/WidgetHeader.test.js +3 -3
  65. package/lib/esm/test/WidgetHeader.test.js.map +1 -1
  66. package/lib/esm/widgets/OneClickLCAWidget.d.ts +3 -0
  67. package/lib/esm/widgets/OneClickLCAWidget.js +5 -6
  68. package/lib/esm/widgets/OneClickLCAWidget.js.map +1 -1
  69. package/package.json +29 -24
@@ -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
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -23,9 +27,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
23
27
  };
24
28
  Object.defineProperty(exports, "__esModule", { value: true });
25
29
  /*---------------------------------------------------------------------------------------------
26
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
27
- * See LICENSE.md in the project root for license terms and full copyright notice.
28
- *--------------------------------------------------------------------------------------------*/
30
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
31
+ * See LICENSE.md in the project root for license terms and full copyright notice.
32
+ *--------------------------------------------------------------------------------------------*/
29
33
  require("./ExportModal.scss");
30
34
  const react_1 = __importStar(require("react"));
31
35
  const core_frontend_1 = require("@itwin/core-frontend");
@@ -33,10 +37,16 @@ const itwinui_react_1 = require("@itwin/itwinui-react");
33
37
  const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
34
38
  const insights_client_1 = require("@itwin/insights-client");
35
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
+ */
36
45
  const ExportModal = (props) => {
37
46
  const MILI_SECONDS = 1000;
38
47
  const PIN_INTERVAL = 1000;
39
- 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(), []);
40
50
  const [email, setEmail] = (0, react_1.useState)("");
41
51
  const [password, setPassword] = (0, react_1.useState)("");
42
52
  const [passwordIsVisible, showPassword] = (0, react_1.useState)(false);
@@ -70,7 +80,7 @@ const ExportModal = (props) => {
70
80
  const intervalId = window.setInterval(async () => {
71
81
  const token = (await core_frontend_1.IModelApp.authorizationClient?.getAccessToken()) ?? "";
72
82
  if (job.id && token) {
73
- const currentJobStatus = await oneClickLCAClientApi.getOCLCAJobStatus(token, job?.id);
83
+ const currentJobStatus = await oneClickLCAClient.getOCLCAJobStatus(token, job?.id);
74
84
  if (currentJobStatus.status) {
75
85
  if (currentJobStatus.status === insights_client_1.CarbonUploadState.Succeeded) {
76
86
  setJobLink(!!currentJobStatus?._links?.oneclicklca?.href ? { href: currentJobStatus._links.oneclicklca.href } : undefined);
@@ -84,12 +94,12 @@ const ExportModal = (props) => {
84
94
  }
85
95
  }, PIN_INTERVAL);
86
96
  intervalRef.current = intervalId;
87
- }, [setJobLink, setJobStatus, oneClickLCAClientApi]);
97
+ }, [setJobLink, setJobStatus, oneClickLCAClient]);
88
98
  const runJob = (0, react_1.useCallback)(async (token) => {
89
99
  const accessToken = (await core_frontend_1.IModelApp.authorizationClient?.getAccessToken()) ?? "";
90
100
  if (props.reportId && token) {
91
101
  try {
92
- const jobCreated = await oneClickLCAClientApi.createJob(accessToken, {
102
+ const jobCreated = await oneClickLCAClient.createJob(accessToken, {
93
103
  reportId: props.reportId,
94
104
  token,
95
105
  });
@@ -112,12 +122,12 @@ const ExportModal = (props) => {
112
122
  setJobStatus(insights_client_1.CarbonUploadState.Failed);
113
123
  itwinui_react_1.toaster.negative("Invalid reportId.");
114
124
  }
115
- }, [props, pinStatus, oneClickLCAClientApi]);
125
+ }, [props, pinStatus, oneClickLCAClient]);
116
126
  const signin = (0, react_1.useCallback)(async (e) => {
117
127
  e.preventDefault();
118
128
  startSigningIn(true);
119
129
  try {
120
- const result = await oneClickLCAClientApi.getOCLCAAccessToken(email, password);
130
+ const result = await oclcaApiHelper.getOCLCAAccessToken(email, password);
121
131
  if (result && result.access_token && result.expires_in) {
122
132
  cacheToken({
123
133
  token: result.access_token,
@@ -136,14 +146,7 @@ const ExportModal = (props) => {
136
146
  console.error(err);
137
147
  }
138
148
  startSigningIn(false);
139
- }, [
140
- email,
141
- password,
142
- resetSignin,
143
- cacheToken,
144
- showSigninError,
145
- oneClickLCAClientApi,
146
- ]);
149
+ }, [email, password, resetSignin, cacheToken, showSigninError, oclcaApiHelper]);
147
150
  const onClose = (0, react_1.useCallback)(() => {
148
151
  resetSignin();
149
152
  setJobStatus(undefined);
@@ -175,7 +178,8 @@ const ExportModal = (props) => {
175
178
  default:
176
179
  return (react_1.default.createElement("div", { className: "oclca-progress-radial-container" },
177
180
  react_1.default.createElement(itwinui_react_1.Text, null,
178
- "Invalid Job Status ",
181
+ "Invalid Job Status",
182
+ " ",
179
183
  react_1.default.createElement("span", { role: "img", "aria-label": "sad" }, "\uD83D\uDE14"))));
180
184
  }
181
185
  }, []);
@@ -190,8 +194,7 @@ const ExportModal = (props) => {
190
194
  }
191
195
  }, [props.isOpen, isSignedIn, cache, runJob]);
192
196
  (0, react_1.useEffect)(() => {
193
- if (jobStatus === insights_client_1.CarbonUploadState.Succeeded ||
194
- jobStatus === insights_client_1.CarbonUploadState.Failed) {
197
+ if (jobStatus === insights_client_1.CarbonUploadState.Succeeded || jobStatus === insights_client_1.CarbonUploadState.Failed) {
195
198
  if (intervalRef.current) {
196
199
  window.clearInterval(intervalRef.current);
197
200
  }
@@ -216,9 +219,9 @@ const ExportModal = (props) => {
216
219
  react_1.default.createElement("div", { className: "oclca-signin-input" },
217
220
  react_1.default.createElement(itwinui_react_1.LabeledInput, { label: "Email", value: email, onChange: (v) => setEmail(v.target.value), type: "email", status: emailError ? "negative" : undefined, message: emailError ? "Invalid email address." : "", required: true })),
218
221
  react_1.default.createElement("div", { className: "oclca-signin-input" },
219
- react_1.default.createElement(itwinui_react_1.LabeledInput, { label: "Password", value: password, onChange: (e) => setPassword(e.target.value), type: passwordIsVisible ? "text" : "password", svgIcon: passwordIsVisible ? (react_1.default.createElement(itwinui_icons_react_1.SvgVisibilityHide, { onClick: () => showPassword(!passwordIsVisible) })) : (react_1.default.createElement(itwinui_icons_react_1.SvgVisibilityShow, null)), iconDisplayStyle: "inline", required: true })),
222
+ react_1.default.createElement(itwinui_react_1.LabeledInput, { label: "Password", value: password, onChange: (e) => setPassword(e.target.value), type: passwordIsVisible ? "text" : "password", svgIcon: passwordIsVisible ? react_1.default.createElement(itwinui_icons_react_1.SvgVisibilityHide, { onClick: () => showPassword(!passwordIsVisible) }) : react_1.default.createElement(itwinui_icons_react_1.SvgVisibilityShow, null), iconDisplayStyle: "inline", required: true })),
220
223
  react_1.default.createElement("div", { className: "oclca-signin-button-container" },
221
- react_1.default.createElement(itwinui_react_1.Button, { className: "oclca-signin-button", type: "submit", styleType: "cta", disabled: !isValidSignin() }, isSigningIn ? (react_1.default.createElement(itwinui_react_1.ProgressRadial, { className: "oclca-signin-wait", indeterminate: true, size: "small", value: 50 })) : ("Sign In")))))),
224
+ react_1.default.createElement(itwinui_react_1.Button, { className: "oclca-signin-button", type: "submit", styleType: "cta", disabled: !isValidSignin() }, isSigningIn ? react_1.default.createElement(itwinui_react_1.ProgressRadial, { className: "oclca-signin-wait", indeterminate: true, size: "small", value: 50 }) : "Sign In"))))),
222
225
  isSignedIn && !jobStatus && (react_1.default.createElement("div", { className: "oclca-progress-radial-container" },
223
226
  react_1.default.createElement(itwinui_react_1.ProgressRadial, { indeterminate: true, size: "large", value: 50 }))),
224
227
  isSignedIn && jobStatus && getStatusComponent(jobStatus, jobLink?.href)));
@@ -1 +1 @@
1
- {"version":3,"file":"ExportModal.js","sourceRoot":"","sources":["../../../src/components/ExportModal.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport \"./ExportModal.scss\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport {\n Alert,\n Button,\n LabeledInput,\n Modal,\n ProgressLinear,\n ProgressRadial,\n Text,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgVisibilityHide,\n SvgVisibilityShow,\n} from \"@itwin/itwinui-icons-react\";\nimport type { Link, OCLCAJob } from \"@itwin/insights-client\";\nimport { CarbonUploadState, OCLCAJobsClient } from \"@itwin/insights-client\";\nimport logo from \"../../public/logo/oneClickLCALogo.png\";\n\ninterface ExportProps {\n isOpen: boolean;\n close: () => void;\n reportId: string | undefined;\n}\n\ninterface OclcaTokenCache {\n token: string;\n exp: number;\n}\n\nconst ExportModal = (props: ExportProps) => {\n const MILI_SECONDS = 1000;\n const PIN_INTERVAL = 1000;\n const oneClickLCAClientApi = useMemo(() => new OCLCAJobsClient(), []);\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [passwordIsVisible, showPassword] = useState(false);\n const [signinError, showSigninError] = useState(false);\n const [emailError, setEmailError] = useState(false);\n const [cache, cacheToken] = useState<OclcaTokenCache>();\n\n const [jobStatus, setJobStatus] = useState<CarbonUploadState>();\n const [jobLink, setJobLink] = useState<Link | undefined>();\n\n const isValidEmail = useCallback(() => {\n return /\\S+@\\S+\\.\\S+/.test(email);\n }, [email]);\n\n const isValidPassword = useCallback(() => {\n return password !== \"\";\n }, [password]);\n\n const validateSignin = useCallback(() => {\n return cache?.token && cache?.exp > Date.now();\n }, [cache]);\n\n const [isSignedIn, setIsSignedIn] = useState(validateSignin());\n const [isSigningIn, startSigningIn] = useState(false);\n const intervalRef = useRef<number>();\n\n const isValidSignin = useCallback(() => {\n return isValidEmail() && isValidPassword();\n }, [isValidEmail, isValidPassword]);\n\n const resetSignin = useCallback(() => {\n setEmail(\"\");\n setPassword(\"\");\n showPassword(false);\n showSigninError(false);\n }, [setEmail, setPassword, showPassword, showSigninError]);\n\n const pinStatus = useCallback(\n (job: OCLCAJob) => {\n const intervalId = window.setInterval(async () => {\n const token =\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n if (job.id && token) {\n const currentJobStatus =\n await oneClickLCAClientApi.getOCLCAJobStatus(token, job?.id);\n if (currentJobStatus.status) {\n if (\n currentJobStatus.status === CarbonUploadState.Succeeded\n ) {\n setJobLink(!!currentJobStatus?._links?.oneclicklca?.href ? { href: currentJobStatus._links.oneclicklca.href } : undefined);\n }\n setJobStatus(currentJobStatus.status);\n } else {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Failed to get job status. 😔\");\n }\n }\n }, PIN_INTERVAL);\n intervalRef.current = intervalId;\n },\n [setJobLink, setJobStatus, oneClickLCAClientApi]\n );\n\n const runJob = useCallback(\n async (token: string) => {\n const accessToken =\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n if (props.reportId && token) {\n try {\n const jobCreated = await oneClickLCAClientApi.createJob(\n accessToken,\n {\n reportId: props.reportId,\n token,\n }\n );\n if (jobCreated.id) {\n pinStatus(jobCreated);\n } else {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Failed to create one click lca job. 😔\");\n }\n } catch (e) {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"You do not have the required permissions. Please contact the project administrator.\");\n /* eslint-disable no-console */\n console.error(e);\n }\n } else {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Invalid reportId.\");\n }\n },\n [props, pinStatus, oneClickLCAClientApi]\n );\n\n const signin = useCallback(\n async (e) => {\n e.preventDefault();\n startSigningIn(true);\n try {\n const result = await oneClickLCAClientApi.getOCLCAAccessToken(\n email,\n password\n );\n if (result && result.access_token && result.expires_in) {\n cacheToken({\n token: result.access_token,\n exp: Date.now() + result.expires_in * MILI_SECONDS,\n });\n resetSignin();\n setIsSignedIn(true);\n } else {\n showSigninError(true);\n }\n } catch (err) {\n toaster.negative(\"Failed to sign in One Click LCA.\");\n /* eslint-disable no-console */\n console.error(err);\n }\n startSigningIn(false);\n },\n [\n email,\n password,\n resetSignin,\n cacheToken,\n showSigninError,\n oneClickLCAClientApi,\n ]\n );\n\n const onClose = useCallback(() => {\n resetSignin();\n setJobStatus(undefined);\n setJobLink(undefined);\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current);\n }\n props.close();\n }, [props, resetSignin]);\n\n const getStatusComponent = useCallback(\n (status: CarbonUploadState, link: string | undefined) => {\n switch (status) {\n case CarbonUploadState.Queued:\n return (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial indeterminate size=\"small\" value={50} />\n <Text variant=\"leading\" className=\"oclca-status-text\">\n Export queued\n </Text>\n </div>\n );\n case CarbonUploadState.Running:\n return (\n <div className=\"oclca-progress-linear-container\">\n <ProgressLinear indeterminate />\n <Text variant=\"leading\" className=\"oclca-status-text\">\n Export running\n </Text>\n </div>\n );\n case CarbonUploadState.Succeeded:\n return (\n link && (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial status=\"positive\" size=\"small\" value={50} />\n <a\n className=\"oclca-report-button\"\n href={link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <Button styleType=\"cta\">Open in One Click LCA</Button>\n </a>\n </div>\n )\n );\n case CarbonUploadState.Failed:\n return (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial status=\"negative\" size=\"small\" value={100} />\n <Text variant=\"leading\" className=\"oclca-status-text\">\n Export failed\n </Text>\n </div>\n );\n default:\n return (\n <div className=\"oclca-progress-radial-container\">\n <Text>Invalid Job Status <span role=\"img\" aria-label=\"sad\">😔</span></Text>\n </div>\n );\n }\n },\n []\n );\n\n useEffect(() => {\n if (props.isOpen && isSignedIn && cache?.token) {\n runJob(cache.token).catch((err) => {\n setJobStatus(CarbonUploadState.Failed);\n toaster.negative(\"Error occurs while running the job. 😔\");\n /* eslint-disable no-console */\n console.error(err);\n });\n }\n }, [props.isOpen, isSignedIn, cache, runJob]);\n\n useEffect(() => {\n if (\n jobStatus === CarbonUploadState.Succeeded ||\n jobStatus === CarbonUploadState.Failed\n ) {\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current);\n }\n }\n }, [jobStatus]);\n\n useEffect(() => {\n if (email !== \"\") {\n const timeoutId = setTimeout(() => setEmailError(!isValidEmail()), 1000);\n return () => clearTimeout(timeoutId);\n } else {\n setEmailError(false);\n return;\n }\n }, [email, isValidEmail]);\n\n return (\n <Modal\n data-testid=\"export-modal\"\n isOpen={props.isOpen}\n onClose={onClose}\n title={null}\n closeOnExternalClick={false}\n >\n {!isSignedIn && (\n <div className=\"oclca-signin\">\n <img\n className=\"oclca-signin-icon\"\n src={logo}\n alt=\"One Click LCA® software\"\n data-height-percentage=\"80\"\n data-actual-width=\"1200\"\n data-actual-height=\"600\"\n />\n <form onSubmit={signin} className=\"oclca-signin-form\">\n <div className=\"oclca-signin-prompt\">Sign in to One Click LCA.</div>\n {signinError && (\n <Alert type=\"negative\" className=\"oclca-signin-error\">\n Incorrect email or password.\n </Alert>\n )}\n <div className=\"oclca-signin-input\">\n <LabeledInput\n label=\"Email\"\n value={email}\n onChange={(v) => setEmail(v.target.value)}\n type=\"email\"\n status={emailError ? \"negative\" : undefined}\n message={emailError ? \"Invalid email address.\" : \"\"}\n required\n />\n </div>\n <div className=\"oclca-signin-input\">\n <LabeledInput\n label=\"Password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n type={passwordIsVisible ? \"text\" : \"password\"}\n svgIcon={\n passwordIsVisible ? (\n <SvgVisibilityHide\n onClick={() => showPassword(!passwordIsVisible)}\n />\n ) : (\n <SvgVisibilityShow />\n )\n }\n iconDisplayStyle=\"inline\"\n required\n />\n </div>\n\n <div className=\"oclca-signin-button-container\">\n <Button\n className=\"oclca-signin-button\"\n type=\"submit\"\n styleType=\"cta\"\n disabled={!isValidSignin()}\n >\n {isSigningIn ? (\n <ProgressRadial\n className=\"oclca-signin-wait\"\n indeterminate\n size=\"small\"\n value={50}\n />\n ) : (\n \"Sign In\"\n )}\n </Button>\n </div>\n </form>\n </div>\n )}\n {isSignedIn && !jobStatus && (\n <div className=\"oclca-progress-radial-container\">\n <ProgressRadial indeterminate size=\"large\" value={50} />\n </div>\n )}\n {isSignedIn && jobStatus && getStatusComponent(jobStatus, jobLink?.href)}\n </Modal>\n );\n};\n\nexport default ExportModal;\n"]}
1
+ {"version":3,"file":"ExportModal.js","sourceRoot":"","sources":["../../../src/components/ExportModal.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport \"./ExportModal.scss\";\nimport React, { 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
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
8
- * See LICENSE.md in the project root for license terms and full copyright notice.
9
- *--------------------------------------------------------------------------------------------*/
10
- const react_1 = __importDefault(require("react"));
11
- const Reports_1 = __importDefault(require("./Reports"));
27
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
28
+ * See LICENSE.md in the project root for license terms and full copyright notice.
29
+ *--------------------------------------------------------------------------------------------*/
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;;;+FAG+F;AAC/F,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
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -22,22 +26,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
27
  };
24
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Reports = void 0;
25
30
  /*---------------------------------------------------------------------------------------------
26
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
27
- * See LICENSE.md in the project root for license terms and full copyright notice.
28
- *--------------------------------------------------------------------------------------------*/
31
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
32
+ * See LICENSE.md in the project root for license terms and full copyright notice.
33
+ *--------------------------------------------------------------------------------------------*/
29
34
  const react_1 = __importStar(require("react"));
30
35
  const core_react_1 = require("@itwin/core-react");
31
36
  const core_frontend_1 = require("@itwin/core-frontend");
32
37
  const appui_react_1 = require("@itwin/appui-react");
33
38
  const itwinui_react_1 = require("@itwin/itwinui-react");
34
- const insights_client_1 = require("@itwin/insights-client");
35
39
  const utils_1 = require("./utils");
36
40
  const ExportModal_1 = __importDefault(require("./ExportModal"));
37
41
  require("./Reports.scss");
42
+ const ReportsClientContext_1 = require("./context/ReportsClientContext");
43
+ /**
44
+ * @internal
45
+ */
38
46
  const Reports = () => {
39
47
  const projectId = (0, appui_react_1.useActiveIModelConnection)()?.iTwinId;
40
- const reportsClientApi = (0, react_1.useMemo)(() => new insights_client_1.ReportsClient(), []);
48
+ const reportsClient = (0, ReportsClientContext_1.useReportsClient)();
41
49
  const [isLoading, setIsLoading] = (0, react_1.useState)(true);
42
50
  const [reports, setReports] = (0, react_1.useState)([]);
43
51
  const [buttonIsDisabled, disableButton] = (0, react_1.useState)(true);
@@ -63,8 +71,7 @@ const Reports = () => {
63
71
  ], []);
64
72
  const onSearchBoxValueChanged = async (value) => {
65
73
  disableButton(true);
66
- const filterReports = reports.filter((x) => x.displayName &&
67
- x.displayName.toLowerCase().indexOf(value.toLowerCase()) > -1);
74
+ const filterReports = reports.filter((x) => x.displayName && x.displayName.toLowerCase().indexOf(value.toLowerCase()) > -1);
68
75
  setFilteredReports(filterReports);
69
76
  };
70
77
  const tableStateSingleSelectReducer = (newState, action) => {
@@ -94,7 +101,7 @@ const Reports = () => {
94
101
  core_frontend_1.IModelApp.authorizationClient
95
102
  .getAccessToken()
96
103
  .then((token) => {
97
- reportsClientApi
104
+ reportsClient
98
105
  .getReports(token, projectId)
99
106
  .then((data) => {
100
107
  if (data) {
@@ -116,7 +123,7 @@ const Reports = () => {
116
123
  /* eslint-disable no-console */
117
124
  console.error(err);
118
125
  });
119
- }, [projectId, reportsClientApi]);
126
+ }, [projectId, reportsClient]);
120
127
  return (react_1.default.createElement(react_1.default.Fragment, null,
121
128
  react_1.default.createElement(utils_1.WidgetHeader, { title: "Reports" }),
122
129
  react_1.default.createElement("div", { className: "oclca-reports-container" },
@@ -127,5 +134,5 @@ const Reports = () => {
127
134
  react_1.default.createElement(itwinui_react_1.Button, { onClick: () => openModal(true), styleType: "cta", disabled: buttonIsDisabled, className: "oclca-button-center" }, "One Click LCA Export"),
128
135
  react_1.default.createElement(ExportModal_1.default, { isOpen: modalIsOpen, close: () => openModal(false), reportId: selectedReport?.id })));
129
136
  };
130
- exports.default = Reports;
137
+ exports.Reports = Reports;
131
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(\n (x) =>\n x.displayName &&\n x.displayName.toLowerCase().indexOf(value.toLowerCase()) > -1\n );\n setFilteredReports(filterReports);\n };\n\n const tableStateSingleSelectReducer = (newState: any, action: any): any => {\n switch (action.type) {\n case \"toggleRowSelected\": {\n return { ...newState, selectedRowIds: { [action.id]: action.value } };\n }\n default:\n break;\n }\n return newState;\n };\n\n const onReportRowClick = useMemo(\n () => (_: any, row: any) => {\n if (row.original === selectedReport) {\n disableButton(!buttonIsDisabled);\n row.toggleRowSelected();\n } else {\n disableButton(false);\n row.toggleRowSelected(true);\n }\n setSelectedReport(row.original);\n },\n [buttonIsDisabled, selectedReport]\n );\n\n useEffect(() => {\n if (!IModelApp.authorizationClient)\n throw new Error(\n \"AuthorizationClient is not defined. Most likely IModelApp.startup was not called yet.\"\n );\n IModelApp.authorizationClient\n .getAccessToken()\n .then((token: string) => {\n reportsClientApi\n .getReports(token, projectId)\n .then((data) => {\n if (data) {\n const fetchedReports = data ?? [];\n setReports(fetchedReports);\n setFilteredReports(fetchedReports);\n setIsLoading(false);\n }\n })\n .catch((err) => {\n setIsLoading(false);\n toaster.negative(\"You are not authorized to get reports for this projects. Please contact project administrator.\");\n /* eslint-disable no-console */\n console.error(err);\n });\n })\n .catch((err) => {\n toaster.negative(\"You are not authorized to use this system.\");\n /* eslint-disable no-console */\n console.error(err);\n });\n }, [projectId, reportsClientApi]);\n\n return (\n <>\n <WidgetHeader title=\"Reports\" />\n <div className=\"oclca-reports-container\">\n <div className=\"oclca-searchbox-container\">\n <SearchBox\n onValueChanged={onSearchBoxValueChanged}\n placeholder={\"Search reports\"}\n />\n </div>\n <div className=\"oclca-scrollable-table\">\n <Table<Reporting>\n className=\"oclca-reports-table\"\n data={filteredReports}\n density=\"extra-condensed\"\n columns={reportsColumns}\n emptyTableContent=\"No reports available.\"\n isSortable\n onRowClick={onReportRowClick}\n stateReducer={tableStateSingleSelectReducer}\n isLoading={isLoading}\n selectRowOnClick={true}\n selectSubRows={false}\n />\n </div>\n </div>\n <Button\n onClick={() => openModal(true)}\n styleType=\"cta\"\n disabled={buttonIsDisabled}\n className=\"oclca-button-center\"\n >\n One Click LCA Export\n </Button>\n <ExportModal\n isOpen={modalIsOpen}\n close={() => openModal(false)}\n reportId={selectedReport?.id}\n />\n </>\n );\n};\n\nexport default Reports;\n"]}
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"]}