@itwin/reports-config-widget-react 0.0.6 → 0.0.7

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 (77) hide show
  1. package/.rush/temp/package-deps_rebuild.json +12 -12
  2. package/.rush/temp/shrinkwrap-deps.json +4 -2
  3. package/CHANGELOG.json +12 -0
  4. package/CHANGELOG.md +8 -1
  5. package/coverage/clover.xml +103 -102
  6. package/coverage/coverage-final.json +12 -12
  7. package/coverage/lcov-report/index.html +19 -19
  8. package/coverage/lcov-report/src/ReportsConfigWidget.ts.html +2 -2
  9. package/coverage/lcov-report/src/index.html +1 -1
  10. package/coverage/lcov-report/src/test/index.html +1 -1
  11. package/coverage/lcov-report/src/test/test-utils.tsx.html +2 -2
  12. package/coverage/lcov-report/src/widget/ReportsConfigUiProvider.tsx.html +1 -1
  13. package/coverage/lcov-report/src/widget/components/ActionPanel.tsx.html +1 -1
  14. package/coverage/lcov-report/src/widget/components/AddMappingsModal.tsx.html +9 -9
  15. package/coverage/lcov-report/src/widget/components/DeleteModal.tsx.html +4 -4
  16. package/coverage/lcov-report/src/widget/components/Extraction.tsx.html +13 -13
  17. package/coverage/lcov-report/src/widget/components/HorizontalTile.tsx.html +2 -2
  18. package/coverage/lcov-report/src/widget/components/LocalizedTablePaginator.tsx.html +1 -1
  19. package/coverage/lcov-report/src/widget/components/ReportAction.tsx.html +5 -5
  20. package/coverage/lcov-report/src/widget/components/ReportMappings.tsx.html +35 -26
  21. package/coverage/lcov-report/src/widget/components/Reports.tsx.html +34 -34
  22. package/coverage/lcov-report/src/widget/components/ReportsContainer.tsx.html +1 -1
  23. package/coverage/lcov-report/src/widget/components/SearchBar.tsx.html +4 -4
  24. package/coverage/lcov-report/src/widget/components/SelectIModel.tsx.html +1 -1
  25. package/coverage/lcov-report/src/widget/components/index.html +38 -38
  26. package/coverage/lcov-report/src/widget/components/utils.tsx.html +30 -30
  27. package/coverage/lcov-report/src/widget/context/ReportsApiConfigContext.tsx.html +4 -4
  28. package/coverage/lcov-report/src/widget/context/index.html +1 -1
  29. package/coverage/lcov-report/src/widget/hooks/index.html +1 -1
  30. package/coverage/lcov-report/src/widget/hooks/useValidator.ts.html +1 -1
  31. package/coverage/lcov-report/src/widget/index.html +1 -1
  32. package/coverage/lcov.info +238 -317
  33. package/lib/cjs/test/ReportMappings.test.js +42 -31
  34. package/lib/cjs/test/ReportMappings.test.js.map +1 -1
  35. package/lib/cjs/test/Reports.test.js +12 -7
  36. package/lib/cjs/test/Reports.test.js.map +1 -1
  37. package/lib/cjs/test/test-utils.js.map +1 -1
  38. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  39. package/lib/cjs/widget/components/AddMappingsModal.js +5 -6
  40. package/lib/cjs/widget/components/AddMappingsModal.js.map +1 -1
  41. package/lib/cjs/widget/components/Extraction.js +9 -11
  42. package/lib/cjs/widget/components/Extraction.js.map +1 -1
  43. package/lib/cjs/widget/components/ReportAction.js +3 -3
  44. package/lib/cjs/widget/components/ReportAction.js.map +1 -1
  45. package/lib/cjs/widget/components/ReportMappings.d.ts.map +1 -1
  46. package/lib/cjs/widget/components/ReportMappings.js +23 -27
  47. package/lib/cjs/widget/components/ReportMappings.js.map +1 -1
  48. package/lib/cjs/widget/components/Reports.js +6 -6
  49. package/lib/cjs/widget/components/Reports.js.map +1 -1
  50. package/lib/esm/test/ReportMappings.test.js +42 -31
  51. package/lib/esm/test/ReportMappings.test.js.map +1 -1
  52. package/lib/esm/test/Reports.test.js +12 -7
  53. package/lib/esm/test/Reports.test.js.map +1 -1
  54. package/lib/esm/test/test-utils.js.map +1 -1
  55. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  56. package/lib/esm/widget/components/AddMappingsModal.js +6 -7
  57. package/lib/esm/widget/components/AddMappingsModal.js.map +1 -1
  58. package/lib/esm/widget/components/Extraction.js +10 -12
  59. package/lib/esm/widget/components/Extraction.js.map +1 -1
  60. package/lib/esm/widget/components/ReportAction.js +4 -4
  61. package/lib/esm/widget/components/ReportAction.js.map +1 -1
  62. package/lib/esm/widget/components/ReportMappings.d.ts.map +1 -1
  63. package/lib/esm/widget/components/ReportMappings.js +24 -28
  64. package/lib/esm/widget/components/ReportMappings.js.map +1 -1
  65. package/lib/esm/widget/components/Reports.js +7 -7
  66. package/lib/esm/widget/components/Reports.js.map +1 -1
  67. package/package.json +2 -2
  68. package/reports-config-widget-react.build.error.log +3 -3
  69. package/reports-config-widget-react.build.log +11 -11
  70. package/src/test/ReportMappings.test.tsx +44 -24
  71. package/src/test/Reports.test.tsx +18 -13
  72. package/src/test/test-utils.tsx +1 -1
  73. package/src/widget/components/AddMappingsModal.tsx +6 -6
  74. package/src/widget/components/Extraction.tsx +10 -10
  75. package/src/widget/components/ReportAction.tsx +4 -4
  76. package/src/widget/components/ReportMappings.tsx +21 -18
  77. package/src/widget/components/Reports.tsx +6 -6
@@ -4,7 +4,7 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { Modal, Table, tableFilters } from "@itwin/itwinui-react";
6
6
  import React, { useEffect, useMemo, useState } from "react";
7
- import { REPORTING_BASE_PATH, ReportingClient } from "@itwin/insights-client";
7
+ import { MappingsClient, REPORTING_BASE_PATH, ReportsClient } from "@itwin/insights-client";
8
8
  import ActionPanel from "./ActionPanel";
9
9
  import "./AddMappingsModal.scss";
10
10
  import { LocalizedTablePaginator } from "./LocalizedTablePaginator";
@@ -15,9 +15,9 @@ import { ReportsConfigWidget } from "../../ReportsConfigWidget";
15
15
  const fetchMappings = async (setMappings, iModelId, setIsLoading, apiContext) => {
16
16
  try {
17
17
  setIsLoading(true);
18
- const reportingClientApi = new ReportingClient(generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl));
18
+ const mappingsClientApi = new MappingsClient(generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl));
19
19
  const accessToken = await apiContext.getAccessToken();
20
- const mappings = await reportingClientApi.getMappings(accessToken, iModelId);
20
+ const mappings = await mappingsClientApi.getMappings(accessToken, iModelId);
21
21
  setMappings(mappings);
22
22
  }
23
23
  catch (error) {
@@ -58,17 +58,16 @@ const AddMappingsModal = ({ reportId, existingMappings, show, returnFn, }) => {
58
58
  },
59
59
  ], []);
60
60
  const onSave = async () => {
61
- var _a;
62
61
  try {
63
62
  if (!selectedIModelId)
64
63
  return;
65
64
  setIsLoading(true);
66
- const reportingClientApi = new ReportingClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
65
+ const reportsClientApi = new ReportsClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
67
66
  const accessToken = await apiConfig.getAccessToken();
68
67
  for (const mapping of selectedMappings) {
69
- await reportingClientApi.createReportMapping(accessToken, reportId, {
68
+ await reportsClientApi.createReportMapping(accessToken, reportId, {
70
69
  imodelId: selectedIModelId,
71
- mappingId: (_a = mapping.id) !== null && _a !== void 0 ? _a : "",
70
+ mappingId: mapping.id,
72
71
  });
73
72
  }
74
73
  await returnFn();
@@ -1 +1 @@
1
- {"version":3,"file":"AddMappingsModal.js","sourceRoot":"","sources":["../../../../src/widget/components/AddMappingsModal.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 { Modal, Table, tableFilters } from \"@itwin/itwinui-react\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport type { Mapping } from \"@itwin/insights-client\";\nimport { REPORTING_BASE_PATH, ReportingClient } from \"@itwin/insights-client\";\nimport ActionPanel from \"./ActionPanel\";\nimport \"./AddMappingsModal.scss\";\nimport { LocalizedTablePaginator } from \"./LocalizedTablePaginator\";\nimport type { ReportMappingAndMapping } from \"./ReportMappings\";\nimport type { ReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { SelectIModel } from \"./SelectIModel\";\nimport type { CreateTypeFromInterface } from \"./utils\";\nimport { generateUrl, handleError } from \"./utils\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\n\nexport type MappingType = CreateTypeFromInterface<Mapping>;\n\nconst fetchMappings = async (\n setMappings: React.Dispatch<React.SetStateAction<Mapping[]>>,\n iModelId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n apiContext: ReportsApiConfig\n) => {\n try {\n setIsLoading(true);\n const reportingClientApi = new ReportingClient(\n generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl)\n );\n const accessToken = await apiContext.getAccessToken();\n const mappings = await reportingClientApi.getMappings(\n accessToken,\n iModelId\n );\n setMappings(mappings);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\ninterface AddMappingsModalProps {\n reportId: string;\n existingMappings: ReportMappingAndMapping[];\n show: boolean;\n returnFn: () => Promise<void>;\n}\n\nconst AddMappingsModal = ({\n reportId,\n existingMappings,\n show,\n returnFn,\n}: AddMappingsModalProps) => {\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [selectedMappings, setSelectedMappings] = useState<Mapping[]>([]);\n const [selectedIModelId, setSelectediModelId] = useState<string>(\"\");\n const [mappings, setMappings] = useState<Mapping[]>([]);\n const apiConfig = useReportsApiConfig();\n\n useEffect(() => {\n if (selectedIModelId) {\n void fetchMappings(\n setMappings,\n selectedIModelId,\n setIsLoading,\n apiConfig\n );\n }\n }, [apiConfig, selectedIModelId, setIsLoading]);\n\n const mappingsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"mappingName\",\n Header: ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:MappingName\"\n ),\n accessor: \"mappingName\",\n Filter: tableFilters.TextFilter(),\n },\n {\n id: \"description\",\n Header: ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Description\"\n ),\n accessor: \"description\",\n Filter: tableFilters.TextFilter(),\n },\n ],\n },\n ],\n []\n );\n\n const onSave = async () => {\n try {\n if (!selectedIModelId) return;\n setIsLoading(true);\n const reportingClientApi = new ReportingClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n for (const mapping of selectedMappings) {\n await reportingClientApi.createReportMapping(accessToken, reportId, {\n imodelId: selectedIModelId,\n mappingId: mapping.id ?? \"\",\n });\n }\n\n await returnFn();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Modal\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:AddMappings\"\n )}\n isOpen={show}\n isDismissible={!isLoading}\n onClose={async () => {\n await returnFn();\n }}\n style={{ display: \"flex\", flexDirection: \"column\", maxHeight: \"77vh\" }}\n >\n <div className=\"add-mappings-container\">\n <SelectIModel\n selectedIModelId={selectedIModelId}\n setSelectedIModelId={setSelectediModelId}\n />\n <Table<MappingType>\n data={isLoading ? [] : mappings}\n columns={mappingsColumns}\n className=\"add-mappings-table\"\n emptyTableContent={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:NoMappingsAvailable\"\n )}\n isSortable\n isSelectable\n isLoading={isLoading}\n isRowDisabled={(rowData) =>\n existingMappings.some((v) => v.mappingId === rowData.id)\n }\n onSelect={(selectData: Mapping[] | undefined) => {\n selectData && setSelectedMappings(selectData);\n }}\n paginatorRenderer={LocalizedTablePaginator}\n />\n </div>\n <ActionPanel\n actionLabel={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Add\"\n )}\n onAction={onSave}\n onCancel={returnFn}\n isSavingDisabled={selectedMappings.length === 0}\n isLoading={isLoading}\n />\n </Modal>\n );\n};\n\nexport default AddMappingsModal;\n"]}
1
+ {"version":3,"file":"AddMappingsModal.js","sourceRoot":"","sources":["../../../../src/widget/components/AddMappingsModal.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 { Modal, Table, tableFilters } from \"@itwin/itwinui-react\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport type { Mapping } from \"@itwin/insights-client\";\nimport { MappingsClient, REPORTING_BASE_PATH, ReportsClient } from \"@itwin/insights-client\";\nimport ActionPanel from \"./ActionPanel\";\nimport \"./AddMappingsModal.scss\";\nimport { LocalizedTablePaginator } from \"./LocalizedTablePaginator\";\nimport type { ReportMappingAndMapping } from \"./ReportMappings\";\nimport type { ReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { SelectIModel } from \"./SelectIModel\";\nimport type { CreateTypeFromInterface } from \"./utils\";\nimport { generateUrl, handleError } from \"./utils\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\n\nexport type MappingType = CreateTypeFromInterface<Mapping>;\n\nconst fetchMappings = async (\n setMappings: React.Dispatch<React.SetStateAction<Mapping[]>>,\n iModelId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n apiContext: ReportsApiConfig\n) => {\n try {\n setIsLoading(true);\n const mappingsClientApi = new MappingsClient(\n generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl)\n );\n const accessToken = await apiContext.getAccessToken();\n const mappings = await mappingsClientApi.getMappings(\n accessToken,\n iModelId\n );\n setMappings(mappings);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\ninterface AddMappingsModalProps {\n reportId: string;\n existingMappings: ReportMappingAndMapping[];\n show: boolean;\n returnFn: () => Promise<void>;\n}\n\nconst AddMappingsModal = ({\n reportId,\n existingMappings,\n show,\n returnFn,\n}: AddMappingsModalProps) => {\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [selectedMappings, setSelectedMappings] = useState<Mapping[]>([]);\n const [selectedIModelId, setSelectediModelId] = useState<string>(\"\");\n const [mappings, setMappings] = useState<Mapping[]>([]);\n const apiConfig = useReportsApiConfig();\n\n useEffect(() => {\n if (selectedIModelId) {\n void fetchMappings(\n setMappings,\n selectedIModelId,\n setIsLoading,\n apiConfig\n );\n }\n }, [apiConfig, selectedIModelId, setIsLoading]);\n\n const mappingsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"mappingName\",\n Header: ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:MappingName\"\n ),\n accessor: \"mappingName\",\n Filter: tableFilters.TextFilter(),\n },\n {\n id: \"description\",\n Header: ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Description\"\n ),\n accessor: \"description\",\n Filter: tableFilters.TextFilter(),\n },\n ],\n },\n ],\n []\n );\n\n const onSave = async () => {\n try {\n if (!selectedIModelId) return;\n setIsLoading(true);\n const reportsClientApi = new ReportsClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n for (const mapping of selectedMappings) {\n await reportsClientApi.createReportMapping(accessToken, reportId, {\n imodelId: selectedIModelId,\n mappingId: mapping.id,\n });\n }\n\n await returnFn();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Modal\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:AddMappings\"\n )}\n isOpen={show}\n isDismissible={!isLoading}\n onClose={async () => {\n await returnFn();\n }}\n style={{ display: \"flex\", flexDirection: \"column\", maxHeight: \"77vh\" }}\n >\n <div className=\"add-mappings-container\">\n <SelectIModel\n selectedIModelId={selectedIModelId}\n setSelectedIModelId={setSelectediModelId}\n />\n <Table<MappingType>\n data={isLoading ? [] : mappings}\n columns={mappingsColumns}\n className=\"add-mappings-table\"\n emptyTableContent={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:NoMappingsAvailable\"\n )}\n isSortable\n isSelectable\n isLoading={isLoading}\n isRowDisabled={(rowData) =>\n existingMappings.some((v) => v.mappingId === rowData.id)\n }\n onSelect={(selectData: Mapping[] | undefined) => {\n selectData && setSelectedMappings(selectData);\n }}\n paginatorRenderer={LocalizedTablePaginator}\n />\n </div>\n <ActionPanel\n actionLabel={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Add\"\n )}\n onAction={onSave}\n onCancel={returnFn}\n isSavingDisabled={selectedMappings.length === 0}\n isLoading={isLoading}\n />\n </Modal>\n );\n};\n\nexport default AddMappingsModal;\n"]}
@@ -1,7 +1,7 @@
1
1
  import { ComboBox, Label, ProgressRadial, StatusMessage, } from "@itwin/itwinui-react";
2
2
  import * as React from "react";
3
3
  import { useEffect, useMemo, useRef, useState } from "react";
4
- import { REPORTING_BASE_PATH, ReportingClient } from "@itwin/insights-client";
4
+ import { ExtractionClient, REPORTING_BASE_PATH } from "@itwin/insights-client";
5
5
  import { generateUrl, handleError, SkeletonBlock } from "./utils";
6
6
  import "./Extraction.scss";
7
7
  import { SvgStatusError, SvgStatusPending, SvgStatusPendingHollow, SvgStatusSuccess, } from "@itwin/itwinui-icons-color-react";
@@ -77,14 +77,13 @@ export const Extraction = ({ iModels, setExtractingIModelId, extractionState, se
77
77
  const [currentIModelId, setCurrentIModelId] = useState();
78
78
  const apiConfig = useReportsApiConfig();
79
79
  const runExtraction = async (iModelId) => {
80
- var _a, _b;
81
80
  try {
82
81
  setExtractionState(ExtractionStates.Starting);
83
82
  setExtractingIModelId(iModelId);
84
- const reportingClientApi = new ReportingClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
83
+ const extractionClientApi = new ExtractionClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
85
84
  const accessToken = await apiConfig.getAccessToken();
86
- const response = await reportingClientApi.runExtraction(accessToken, iModelId);
87
- jobId.current = (_b = (_a = response.run) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : "";
85
+ const response = await extractionClientApi.runExtraction(accessToken, iModelId);
86
+ jobId.current = response.id;
88
87
  setIsRunning(true);
89
88
  setExtractionState(ExtractionStates.FetchingUpdate);
90
89
  }
@@ -98,22 +97,21 @@ export const Extraction = ({ iModels, setExtractingIModelId, extractionState, se
98
97
  useEffect(() => {
99
98
  if (!intervalId.current && isRunning) {
100
99
  const newIntervalId = window.setInterval(async () => {
101
- var _a, _b, _c, _d;
102
- const reportingClientApi = new ReportingClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
100
+ const extractionClientApi = new ExtractionClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
103
101
  const accessToken = await apiConfig.getAccessToken();
104
- const response = await reportingClientApi.getExtractionStatus(accessToken, jobId.current);
105
- if (((_a = response.status) === null || _a === void 0 ? void 0 : _a.state) === "Queued") {
102
+ const response = await extractionClientApi.getExtractionStatus(accessToken, jobId.current);
103
+ if (response.state === "Queued") {
106
104
  setExtractionState(ExtractionStates.Queued);
107
105
  }
108
- else if (((_b = response.status) === null || _b === void 0 ? void 0 : _b.state) === "Running") {
106
+ else if (response.state === "Running") {
109
107
  setExtractionState(ExtractionStates.Running);
110
108
  }
111
- else if (((_c = response.status) === null || _c === void 0 ? void 0 : _c.state) === "Succeeded") {
109
+ else if (response.state === "Succeeded") {
112
110
  setExtractionState(ExtractionStates.Succeeded);
113
111
  setIsRunning(false);
114
112
  setCurrentIModelId(undefined);
115
113
  }
116
- else if (((_d = response.status) === null || _d === void 0 ? void 0 : _d.state) === "Failed") {
114
+ else if (response.state === "Failed") {
117
115
  setExtractionState(ExtractionStates.Failed);
118
116
  setIsRunning(false);
119
117
  setCurrentIModelId(undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"Extraction.js","sourceRoot":"","sources":["../../../../src/widget/components/Extraction.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 type { SelectOption } from \"@itwin/itwinui-react\";\nimport {\n ComboBox,\n Label,\n ProgressRadial,\n StatusMessage,\n} from \"@itwin/itwinui-react\";\nimport * as React from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { REPORTING_BASE_PATH, ReportingClient } from \"@itwin/insights-client\";\nimport { generateUrl, handleError, SkeletonBlock } from \"./utils\";\nimport \"./Extraction.scss\";\nimport {\n SvgStatusError,\n SvgStatusPending,\n SvgStatusPendingHollow,\n SvgStatusSuccess,\n} from \"@itwin/itwinui-icons-color-react\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\n\nexport const REFRESH_DELAY = 2000;\n\nexport enum ExtractionStates {\n None,\n Starting,\n FetchingUpdate,\n Queued,\n Running,\n Succeeded,\n Failed,\n}\ninterface ExtractionStatusProps {\n state: ExtractionStates;\n setExtractionState?: React.Dispatch<React.SetStateAction<ExtractionStates>>;\n children?: React.ReactNode;\n}\n\nexport const ExtractionStatus = ({\n state,\n children,\n setExtractionState,\n}: ExtractionStatusProps) => {\n const [fadeOut, setFadeOut] = useState<boolean>(false);\n\n const onAnimationEnd = () => {\n if (setExtractionState) {\n setExtractionState(ExtractionStates.None);\n setFadeOut(false);\n }\n };\n\n useEffect(() => {\n let timer: number;\n switch (state) {\n case ExtractionStates.Succeeded:\n case ExtractionStates.Failed:\n timer = window.setTimeout(() => setFadeOut(true), 5000);\n }\n return () => clearTimeout(timer);\n }, [state, setExtractionState]);\n\n switch (state) {\n case ExtractionStates.Starting:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Starting\"\n )}\n className=\"extraction-status\"\n >\n <div className=\"status-icon\">\n <SvgStatusPendingHollow />\n </div>\n </div>\n );\n case ExtractionStates.FetchingUpdate:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Loading\"\n )}\n className=\"extraction-status\"\n >\n <ProgressRadial size=\"x-small\" indeterminate />\n </div>\n );\n case ExtractionStates.Queued:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Queued\"\n )}\n className=\"extraction-status\"\n >\n <div className=\"status-icon\">\n <SvgStatusPending />\n </div>\n </div>\n );\n case ExtractionStates.Running:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Running\"\n )}\n className=\"extraction-status\"\n >\n <ProgressRadial size=\"x-small\" indeterminate />\n </div>\n );\n case ExtractionStates.Succeeded:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Success\"\n )}\n className=\"extraction-status\"\n >\n <div\n className={`status-icon`}\n style={{\n animationName: fadeOut ? \"rcw-fade-out\" : \"\",\n animationDelay: \"5s\",\n animationDuration: \"1s\",\n }}\n onAnimationEnd={onAnimationEnd}\n >\n <SvgStatusSuccess />\n </div>\n </div>\n );\n case ExtractionStates.Failed:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Failed\"\n )}\n className=\"extraction-status\"\n >\n <div\n className={`status-icon`}\n style={{\n animationName: fadeOut ? \"rcw-fade-out\" : \"\",\n animationDelay: \"5s\",\n animationDuration: \"1s\",\n }}\n onAnimationEnd={onAnimationEnd}\n >\n <SvgStatusError />\n </div>\n </div>\n );\n default:\n return <>{children}</>;\n }\n};\n\ninterface ExtractionProps {\n iModels: Map<string, string>;\n setExtractingIModelId: React.Dispatch<React.SetStateAction<string>>;\n extractionState: ExtractionStates;\n setExtractionState: React.Dispatch<React.SetStateAction<ExtractionStates>>;\n isLoading: boolean;\n}\n\nexport const Extraction = ({\n iModels,\n setExtractingIModelId,\n extractionState,\n setExtractionState,\n isLoading,\n}: ExtractionProps) => {\n const jobId = useRef<string>(\"\");\n const intervalId = useRef<number>();\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const [currentIModelId, setCurrentIModelId] = useState<string>();\n const apiConfig = useReportsApiConfig();\n\n const runExtraction = async (iModelId: string) => {\n try {\n setExtractionState(ExtractionStates.Starting);\n setExtractingIModelId(iModelId);\n const reportingClientApi = new ReportingClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n const response = await reportingClientApi.runExtraction(\n accessToken,\n iModelId\n );\n jobId.current = response.run?.id ?? \"\";\n setIsRunning(true);\n setExtractionState(ExtractionStates.FetchingUpdate);\n } catch (error: any) {\n handleError(error.status);\n setExtractionState(ExtractionStates.Failed);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n }\n };\n\n useEffect(() => {\n if (!intervalId.current && isRunning) {\n const newIntervalId = window.setInterval(async () => {\n const reportingClientApi = new ReportingClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n const response = await reportingClientApi.getExtractionStatus(\n accessToken,\n jobId.current\n );\n if (response.status?.state === \"Queued\") {\n setExtractionState(ExtractionStates.Queued);\n } else if (response.status?.state === \"Running\") {\n setExtractionState(ExtractionStates.Running);\n } else if (response.status?.state === \"Succeeded\") {\n setExtractionState(ExtractionStates.Succeeded);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n } else if (response.status?.state === \"Failed\") {\n setExtractionState(ExtractionStates.Failed);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n }\n }, REFRESH_DELAY);\n intervalId.current = newIntervalId;\n } else if (intervalId && !isRunning) {\n window.clearInterval(intervalId.current);\n intervalId.current = undefined;\n }\n return () => window.clearInterval(intervalId.current);\n }, [apiConfig, isRunning, jobId, setExtractionState]);\n\n const iModelOptions = useMemo(() => {\n const newIModelOptions: SelectOption<string>[] = [];\n\n for (const [iModelId, iModelName] of iModels.entries()) {\n newIModelOptions.push({\n label: iModelName,\n value: iModelId,\n key: iModelId,\n disabled: extractionState !== ExtractionStates.None,\n });\n }\n\n return newIModelOptions;\n }, [iModels, extractionState]);\n\n return (\n <div className=\"extraction-container\">\n <div className=\"extraction-combo-box\" data-testid=\"extraction-combo-box\">\n <Label htmlFor=\"combo-input\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateDataset\"\n )}\n </Label>\n {isLoading ? (\n <SkeletonBlock />\n ) : (\n <ComboBox\n options={iModelOptions}\n value={currentIModelId}\n onChange={async (value) => {\n setCurrentIModelId(value);\n value && await runExtraction(value);\n }}\n inputProps={{\n id: \"combo-input\",\n placeholder: ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:SelectIModel\"\n ),\n }}\n message={\n extractionState !== ExtractionStates.None && (\n <StatusMessage>\n <div className=\"extraction-status-container\">\n <ExtractionStatus\n state={extractionState}\n setExtractionState={setExtractionState}\n />\n {(() => {\n switch (extractionState) {\n case ExtractionStates.Succeeded: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Success\"\n );\n }\n case ExtractionStates.Failed: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Failed\"\n );\n }\n default: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateInProgress\"\n );\n }\n }\n })()}\n </div>\n </StatusMessage>\n )\n }\n />\n )}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"Extraction.js","sourceRoot":"","sources":["../../../../src/widget/components/Extraction.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 type { SelectOption } from \"@itwin/itwinui-react\";\nimport {\n ComboBox,\n Label,\n ProgressRadial,\n StatusMessage,\n} from \"@itwin/itwinui-react\";\nimport * as React from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { ExtractionClient, REPORTING_BASE_PATH } from \"@itwin/insights-client\";\nimport { generateUrl, handleError, SkeletonBlock } from \"./utils\";\nimport \"./Extraction.scss\";\nimport {\n SvgStatusError,\n SvgStatusPending,\n SvgStatusPendingHollow,\n SvgStatusSuccess,\n} from \"@itwin/itwinui-icons-color-react\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\n\nexport const REFRESH_DELAY = 2000;\n\nexport enum ExtractionStates {\n None,\n Starting,\n FetchingUpdate,\n Queued,\n Running,\n Succeeded,\n Failed,\n}\ninterface ExtractionStatusProps {\n state: ExtractionStates;\n setExtractionState?: React.Dispatch<React.SetStateAction<ExtractionStates>>;\n children?: React.ReactNode;\n}\n\nexport const ExtractionStatus = ({\n state,\n children,\n setExtractionState,\n}: ExtractionStatusProps) => {\n const [fadeOut, setFadeOut] = useState<boolean>(false);\n\n const onAnimationEnd = () => {\n if (setExtractionState) {\n setExtractionState(ExtractionStates.None);\n setFadeOut(false);\n }\n };\n\n useEffect(() => {\n let timer: number;\n switch (state) {\n case ExtractionStates.Succeeded:\n case ExtractionStates.Failed:\n timer = window.setTimeout(() => setFadeOut(true), 5000);\n }\n return () => clearTimeout(timer);\n }, [state, setExtractionState]);\n\n switch (state) {\n case ExtractionStates.Starting:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Starting\"\n )}\n className=\"extraction-status\"\n >\n <div className=\"status-icon\">\n <SvgStatusPendingHollow />\n </div>\n </div>\n );\n case ExtractionStates.FetchingUpdate:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Loading\"\n )}\n className=\"extraction-status\"\n >\n <ProgressRadial size=\"x-small\" indeterminate />\n </div>\n );\n case ExtractionStates.Queued:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Queued\"\n )}\n className=\"extraction-status\"\n >\n <div className=\"status-icon\">\n <SvgStatusPending />\n </div>\n </div>\n );\n case ExtractionStates.Running:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Running\"\n )}\n className=\"extraction-status\"\n >\n <ProgressRadial size=\"x-small\" indeterminate />\n </div>\n );\n case ExtractionStates.Succeeded:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Success\"\n )}\n className=\"extraction-status\"\n >\n <div\n className={`status-icon`}\n style={{\n animationName: fadeOut ? \"rcw-fade-out\" : \"\",\n animationDelay: \"5s\",\n animationDuration: \"1s\",\n }}\n onAnimationEnd={onAnimationEnd}\n >\n <SvgStatusSuccess />\n </div>\n </div>\n );\n case ExtractionStates.Failed:\n return (\n <div\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Failed\"\n )}\n className=\"extraction-status\"\n >\n <div\n className={`status-icon`}\n style={{\n animationName: fadeOut ? \"rcw-fade-out\" : \"\",\n animationDelay: \"5s\",\n animationDuration: \"1s\",\n }}\n onAnimationEnd={onAnimationEnd}\n >\n <SvgStatusError />\n </div>\n </div>\n );\n default:\n return <>{children}</>;\n }\n};\n\ninterface ExtractionProps {\n iModels: Map<string, string>;\n setExtractingIModelId: React.Dispatch<React.SetStateAction<string>>;\n extractionState: ExtractionStates;\n setExtractionState: React.Dispatch<React.SetStateAction<ExtractionStates>>;\n isLoading: boolean;\n}\n\nexport const Extraction = ({\n iModels,\n setExtractingIModelId,\n extractionState,\n setExtractionState,\n isLoading,\n}: ExtractionProps) => {\n const jobId = useRef<string>(\"\");\n const intervalId = useRef<number>();\n const [isRunning, setIsRunning] = useState<boolean>(false);\n const [currentIModelId, setCurrentIModelId] = useState<string>();\n const apiConfig = useReportsApiConfig();\n\n const runExtraction = async (iModelId: string) => {\n try {\n setExtractionState(ExtractionStates.Starting);\n setExtractingIModelId(iModelId);\n const extractionClientApi = new ExtractionClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n const response = await extractionClientApi.runExtraction(\n accessToken,\n iModelId\n );\n jobId.current = response.id;\n setIsRunning(true);\n setExtractionState(ExtractionStates.FetchingUpdate);\n } catch (error: any) {\n handleError(error.status);\n setExtractionState(ExtractionStates.Failed);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n }\n };\n\n useEffect(() => {\n if (!intervalId.current && isRunning) {\n const newIntervalId = window.setInterval(async () => {\n const extractionClientApi = new ExtractionClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n const response = await extractionClientApi.getExtractionStatus(\n accessToken,\n jobId.current\n );\n if (response.state === \"Queued\") {\n setExtractionState(ExtractionStates.Queued);\n } else if (response.state === \"Running\") {\n setExtractionState(ExtractionStates.Running);\n } else if (response.state === \"Succeeded\") {\n setExtractionState(ExtractionStates.Succeeded);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n } else if (response.state === \"Failed\") {\n setExtractionState(ExtractionStates.Failed);\n setIsRunning(false);\n setCurrentIModelId(undefined);\n }\n }, REFRESH_DELAY);\n intervalId.current = newIntervalId;\n } else if (intervalId && !isRunning) {\n window.clearInterval(intervalId.current);\n intervalId.current = undefined;\n }\n return () => window.clearInterval(intervalId.current);\n }, [apiConfig, isRunning, jobId, setExtractionState]);\n\n const iModelOptions = useMemo(() => {\n const newIModelOptions: SelectOption<string>[] = [];\n\n for (const [iModelId, iModelName] of iModels.entries()) {\n newIModelOptions.push({\n label: iModelName,\n value: iModelId,\n key: iModelId,\n disabled: extractionState !== ExtractionStates.None,\n });\n }\n\n return newIModelOptions;\n }, [iModels, extractionState]);\n\n return (\n <div className=\"extraction-container\">\n <div className=\"extraction-combo-box\" data-testid=\"extraction-combo-box\">\n <Label htmlFor=\"combo-input\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateDataset\"\n )}\n </Label>\n {isLoading ? (\n <SkeletonBlock />\n ) : (\n <ComboBox\n options={iModelOptions}\n value={currentIModelId}\n onChange={async (value) => {\n setCurrentIModelId(value);\n value && await runExtraction(value);\n }}\n inputProps={{\n id: \"combo-input\",\n placeholder: ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:SelectIModel\"\n ),\n }}\n message={\n extractionState !== ExtractionStates.None && (\n <StatusMessage>\n <div className=\"extraction-status-container\">\n <ExtractionStatus\n state={extractionState}\n setExtractionState={setExtractionState}\n />\n {(() => {\n switch (extractionState) {\n case ExtractionStates.Succeeded: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Success\"\n );\n }\n case ExtractionStates.Failed: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Failed\"\n );\n }\n default: {\n return ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:UpdateInProgress\"\n );\n }\n }\n })()}\n </div>\n </StatusMessage>\n )\n }\n />\n )}\n </div>\n </div>\n );\n};\n"]}
@@ -8,7 +8,7 @@ import ActionPanel from "./ActionPanel";
8
8
  import useValidator, { NAME_REQUIREMENTS } from "../hooks/useValidator";
9
9
  import { generateUrl, handleError, handleInputChange, WidgetHeader, } from "./utils";
10
10
  import "./ReportAction.scss";
11
- import { REPORTING_BASE_PATH, ReportingClient } from "@itwin/insights-client";
11
+ import { REPORTING_BASE_PATH, ReportsClient } from "@itwin/insights-client";
12
12
  import { useReportsApiConfig } from "../context/ReportsApiConfigContext";
13
13
  import { ReportsConfigWidget } from "../../ReportsConfigWidget";
14
14
  const ReportAction = ({ iTwinId, report, returnFn }) => {
@@ -28,14 +28,14 @@ const ReportAction = ({ iTwinId, report, returnFn }) => {
28
28
  return;
29
29
  }
30
30
  setIsLoading(true);
31
- const reportingClientApi = new ReportingClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
31
+ const reportsClientApi = new ReportsClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
32
32
  const accessToken = await apiConfig.getAccessToken();
33
33
  report
34
- ? await reportingClientApi.updateReport(accessToken, (_a = report.id) !== null && _a !== void 0 ? _a : "", {
34
+ ? await reportsClientApi.updateReport(accessToken, (_a = report.id) !== null && _a !== void 0 ? _a : "", {
35
35
  displayName: values.name,
36
36
  description: values.description,
37
37
  })
38
- : await reportingClientApi.createReport(accessToken, {
38
+ : await reportsClientApi.createReport(accessToken, {
39
39
  displayName: values.name,
40
40
  description: values.description,
41
41
  projectId: iTwinId,
@@ -1 +1 @@
1
- {"version":3,"file":"ReportAction.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportAction.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 { Fieldset, LabeledInput, Small } from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport {\n generateUrl,\n handleError,\n handleInputChange,\n WidgetHeader,\n} from \"./utils\";\nimport \"./ReportAction.scss\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { REPORTING_BASE_PATH, ReportingClient } from \"@itwin/insights-client\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\n\ninterface ReportActionProps {\n iTwinId: string;\n report?: Report;\n returnFn: () => Promise<void>;\n}\n\nconst ReportAction = ({ iTwinId, report, returnFn }: ReportActionProps) => {\n const apiConfig = useReportsApiConfig();\n const [values, setValues] = useState({\n name: report?.displayName ?? \"\",\n description: report?.description ?? \"\",\n });\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const onSave = async () => {\n try {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n setIsLoading(true);\n const reportingClientApi = new ReportingClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n report\n ? await reportingClientApi.updateReport(accessToken, report.id ?? \"\", {\n displayName: values.name,\n description: values.description,\n })\n : await reportingClientApi.createReport(accessToken, {\n displayName: values.name,\n description: values.description,\n projectId: iTwinId,\n });\n await returnFn();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <WidgetHeader\n title={\n report\n ? ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:ModifyReport\"\n )\n : ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:AddReport\"\n )\n }\n returnFn={returnFn}\n />\n <div className=\"rcw-details-form-container\">\n <Fieldset\n legend={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:ReportDetails\"\n )}\n className=\"details-form\"\n >\n <Small className=\"field-legend\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:MandatoryFields\"\n )}\n </Small>\n <LabeledInput\n id=\"name\"\n name=\"name\"\n label={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Name\"\n )}\n value={values.name}\n required\n disabled={isLoading}\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", values.name, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", values.name, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledInput\n id=\"description\"\n name=\"description\"\n label={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Description\"\n )}\n value={values.description}\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n }}\n disabled={isLoading}\n />\n </Fieldset>\n </div>\n <ActionPanel\n actionLabel={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Add\"\n )}\n onAction={onSave}\n onCancel={returnFn}\n isSavingDisabled={!values.name}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default ReportAction;\n"]}
1
+ {"version":3,"file":"ReportAction.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportAction.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,YAAY,EAAE,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EACL,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAQhE,MAAM,YAAY,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAqB,EAAE,EAAE;;IACxE,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;QACnC,IAAI,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,mCAAI,EAAE;QAC/B,WAAW,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,mCAAI,EAAE;KACvC,CAAC,CAAC;IACH,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,YAAY,EAAE,CAAC;IAC1D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;;QACxB,IAAI;YACF,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;gBACzB,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO;aACR;YACD,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,gBAAgB,GAAG,IAAI,aAAa,CACxC,WAAW,CAAC,mBAAmB,EAAE,SAAS,CAAC,OAAO,CAAC,CACpD,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,cAAc,EAAE,CAAC;YACrD,MAAM;gBACJ,CAAC,CAAC,MAAM,gBAAgB,CAAC,YAAY,CAAC,WAAW,EAAE,MAAA,MAAM,CAAC,EAAE,mCAAI,EAAE,EAAE;oBAClE,WAAW,EAAE,MAAM,CAAC,IAAI;oBACxB,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC,CAAC;gBACF,CAAC,CAAC,MAAM,gBAAgB,CAAC,YAAY,CAAC,WAAW,EAAE;oBACjD,WAAW,EAAE,MAAM,CAAC,IAAI;oBACxB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,SAAS,EAAE,OAAO;iBACnB,CAAC,CAAC;YACL,MAAM,QAAQ,EAAE,CAAC;SAClB;QAAC,OAAO,KAAU,EAAE;YACnB,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;gBAAS;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;IAEF,OAAO,CACL;QACE,oBAAC,YAAY,IACX,KAAK,EACH,MAAM;gBACJ,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CACnD,kCAAkC,CACnC;gBACD,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CACnD,+BAA+B,CAChC,EAEL,QAAQ,EAAE,QAAQ,GAClB;QACF,6BAAK,SAAS,EAAC,4BAA4B;YACzC,oBAAC,QAAQ,IACP,MAAM,EAAE,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CACzD,mCAAmC,CACpC,EACD,SAAS,EAAC,cAAc;gBAExB,oBAAC,KAAK,IAAC,SAAS,EAAC,cAAc,IAC5B,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAClD,qCAAqC,CACtC,CACK;gBACR,oBAAC,YAAY,IACX,EAAE,EAAC,MAAM,EACT,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CACxD,0BAA0B,CAC3B,EACD,KAAK,EAAE,MAAM,CAAC,IAAI,EAClB,QAAQ,QACR,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;wBAC5C,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC,EACD,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAClE,MAAM,EACJ,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC;wBACvD,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,SAAS,EAEf,MAAM,EAAE,GAAG,EAAE;wBACX,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC,EACD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;wBAC5C,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC,GACD;gBACF,oBAAC,YAAY,IACX,EAAE,EAAC,aAAa,EAChB,IAAI,EAAC,aAAa,EAClB,KAAK,EAAE,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CACxD,iCAAiC,CAClC,EACD,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;oBAC9C,CAAC,EACD,QAAQ,EAAE,SAAS,GACnB,CACO,CACP;QACN,oBAAC,WAAW,IACV,WAAW,EAAE,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAC9D,yBAAyB,CAC1B,EACD,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,CAAC,MAAM,CAAC,IAAI,EAC9B,SAAS,EAAE,SAAS,GACpB,CACD,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,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 { Fieldset, LabeledInput, Small } from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport {\n generateUrl,\n handleError,\n handleInputChange,\n WidgetHeader,\n} from \"./utils\";\nimport \"./ReportAction.scss\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { REPORTING_BASE_PATH, ReportsClient } from \"@itwin/insights-client\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\n\ninterface ReportActionProps {\n iTwinId: string;\n report?: Report;\n returnFn: () => Promise<void>;\n}\n\nconst ReportAction = ({ iTwinId, report, returnFn }: ReportActionProps) => {\n const apiConfig = useReportsApiConfig();\n const [values, setValues] = useState({\n name: report?.displayName ?? \"\",\n description: report?.description ?? \"\",\n });\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const onSave = async () => {\n try {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n setIsLoading(true);\n const reportsClientApi = new ReportsClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n report\n ? await reportsClientApi.updateReport(accessToken, report.id ?? \"\", {\n displayName: values.name,\n description: values.description,\n })\n : await reportsClientApi.createReport(accessToken, {\n displayName: values.name,\n description: values.description,\n projectId: iTwinId,\n });\n await returnFn();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <WidgetHeader\n title={\n report\n ? ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:ModifyReport\"\n )\n : ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:AddReport\"\n )\n }\n returnFn={returnFn}\n />\n <div className=\"rcw-details-form-container\">\n <Fieldset\n legend={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:ReportDetails\"\n )}\n className=\"details-form\"\n >\n <Small className=\"field-legend\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:MandatoryFields\"\n )}\n </Small>\n <LabeledInput\n id=\"name\"\n name=\"name\"\n label={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Name\"\n )}\n value={values.name}\n required\n disabled={isLoading}\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", values.name, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", values.name, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledInput\n id=\"description\"\n name=\"description\"\n label={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Description\"\n )}\n value={values.description}\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n }}\n disabled={isLoading}\n />\n </Fieldset>\n </div>\n <ActionPanel\n actionLabel={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Add\"\n )}\n onAction={onSave}\n onCancel={returnFn}\n isSavingDisabled={!values.name}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default ReportAction;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ReportMappings.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportMappings.tsx"],"names":[],"mappings":";AAqBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAQvD,OAAO,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAgBpE,oBAAY,iBAAiB,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;AAEvE,oBAAY,uBAAuB,GAAG,iBAAiB,GAAG;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAuEF,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,eAAO,MAAM,cAAc,uBAAwB,mBAAmB,gBA4NrE,CAAC"}
1
+ {"version":3,"file":"ReportMappings.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportMappings.tsx"],"names":[],"mappings":";AAqBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAQvD,OAAO,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAgBpE,oBAAY,iBAAiB,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;AAEvE,oBAAY,uBAAuB,GAAG,iBAAiB,GAAG;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA0EF,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,eAAO,MAAM,cAAc,uBAAwB,mBAAmB,gBA4NrE,CAAC"}
@@ -8,7 +8,7 @@ import React, { useCallback, useEffect, useMemo, useState } from "react";
8
8
  import { EmptyMessage, generateUrl, handleError, LoadingOverlay, WidgetHeader, } from "./utils";
9
9
  import "./ReportMappings.scss";
10
10
  import DeleteModal from "./DeleteModal";
11
- import { REPORTING_BASE_PATH, ReportingClient } from "@itwin/insights-client";
11
+ import { MappingsClient, REPORTING_BASE_PATH, ReportsClient } from "@itwin/insights-client";
12
12
  import AddMappingsModal from "./AddMappingsModal";
13
13
  import { Constants, IModelsClient } from "@itwin/imodels-client-management";
14
14
  import { AccessTokenAdapter } from "@itwin/imodels-access-frontend";
@@ -26,22 +26,23 @@ const fetchReportMappings = async (setReportMappings, reportId, setIsLoading, ap
26
26
  var _a;
27
27
  try {
28
28
  setIsLoading(true);
29
- const reportingClientApi = new ReportingClient(generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl));
29
+ const reportsClientApi = new ReportsClient(generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl));
30
+ const mappingsClientApi = new MappingsClient(generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl));
30
31
  const accessToken = await apiContext.getAccessToken();
31
- const reportMappings = await reportingClientApi.getReportMappings(accessToken, reportId);
32
+ const reportMappings = await reportsClientApi.getReportMappings(accessToken, reportId);
32
33
  const iModelClientOptions = {
33
34
  api: { baseUrl: generateUrl(Constants.api.baseUrl, apiContext.baseUrl) },
34
35
  };
35
36
  const iModelsClient = new IModelsClient(iModelClientOptions);
36
37
  const authorization = AccessTokenAdapter.toAuthorizationCallback(accessToken);
37
38
  const iModelNames = new Map();
38
- const reportMappingsAndMapping = await Promise.all((_a = reportMappings === null || reportMappings === void 0 ? void 0 : reportMappings.map(async (reportMapping) => {
39
- var _a, _b, _c, _d, _e, _f, _g;
40
- const iModelId = (_a = reportMapping.imodelId) !== null && _a !== void 0 ? _a : "";
39
+ const reportMappingsAndMapping = await Promise.all((_a = reportMappings.map(async (reportMapping) => {
40
+ var _a, _b;
41
+ const iModelId = reportMapping.imodelId;
41
42
  let iModelName = "";
42
- const mapping = await reportingClientApi.getMapping(accessToken, (_b = reportMapping.mappingId) !== null && _b !== void 0 ? _b : "", iModelId);
43
+ const mapping = await mappingsClientApi.getMapping(accessToken, iModelId, reportMapping.mappingId);
43
44
  if (iModelNames.has(iModelId)) {
44
- iModelName = (_c = iModelNames.get(iModelId)) !== null && _c !== void 0 ? _c : "";
45
+ iModelName = (_a = iModelNames.get(iModelId)) !== null && _a !== void 0 ? _a : "";
45
46
  }
46
47
  else {
47
48
  const getSingleParams = {
@@ -55,8 +56,8 @@ const fetchReportMappings = async (setReportMappings, reportId, setIsLoading, ap
55
56
  const reportMappingAndMapping = {
56
57
  ...reportMapping,
57
58
  iModelName,
58
- mappingName: (_e = (_d = mapping.mapping) === null || _d === void 0 ? void 0 : _d.mappingName) !== null && _e !== void 0 ? _e : "",
59
- mappingDescription: (_g = (_f = mapping.mapping) === null || _f === void 0 ? void 0 : _f.description) !== null && _g !== void 0 ? _g : "",
59
+ mappingName: mapping.mappingName,
60
+ mappingDescription: (_b = mapping.description) !== null && _b !== void 0 ? _b : "",
60
61
  };
61
62
  return reportMappingAndMapping;
62
63
  })) !== null && _a !== void 0 ? _a : []);
@@ -70,7 +71,7 @@ const fetchReportMappings = async (setReportMappings, reportId, setIsLoading, ap
70
71
  }
71
72
  };
72
73
  export const ReportMappings = ({ report, goBack }) => {
73
- var _a, _b, _c;
74
+ var _a;
74
75
  const apiConfig = useReportsApiConfig();
75
76
  const [reportMappingsView, setReportMappingsView] = useState(ReportMappingsView.REPORTMAPPINGS);
76
77
  const [selectedReportMapping, setSelectedReportMapping] = useState(undefined);
@@ -81,31 +82,26 @@ export const ReportMappings = ({ report, goBack }) => {
81
82
  const [searchValue, setSearchValue] = useState("");
82
83
  const [reportMappings, setReportMappings] = useState([]);
83
84
  useEffect(() => {
84
- var _a;
85
- void fetchReportMappings(setReportMappings, (_a = report.id) !== null && _a !== void 0 ? _a : "", setIsLoading, apiConfig);
85
+ void fetchReportMappings(setReportMappings, report.id, setIsLoading, apiConfig);
86
86
  }, [apiConfig, report.id, setIsLoading]);
87
87
  const refresh = useCallback(async () => {
88
- var _a;
89
88
  setReportMappingsView(ReportMappingsView.REPORTMAPPINGS);
90
- await fetchReportMappings(setReportMappings, (_a = report.id) !== null && _a !== void 0 ? _a : "", setIsLoading, apiConfig);
89
+ await fetchReportMappings(setReportMappings, report.id, setIsLoading, apiConfig);
91
90
  }, [apiConfig, report.id, setReportMappings]);
92
91
  const addMapping = () => {
93
92
  setReportMappingsView(ReportMappingsView.ADDING);
94
93
  };
95
- const uniqueIModels = useMemo(() => new Map(reportMappings.map((mapping) => {
96
- var _a;
97
- return [
98
- (_a = mapping.imodelId) !== null && _a !== void 0 ? _a : "",
99
- mapping.iModelName,
100
- ];
101
- })), [reportMappings]);
94
+ const uniqueIModels = useMemo(() => new Map(reportMappings.map((mapping) => [
95
+ mapping.imodelId,
96
+ mapping.iModelName,
97
+ ])), [reportMappings]);
102
98
  const odataFeedUrl = `${generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)}/odata/${report.id}`;
103
99
  const filteredReportMappings = useMemo(() => reportMappings.filter((x) => [x.iModelName, x.mappingName, x.mappingDescription]
104
100
  .join(" ")
105
101
  .toLowerCase()
106
102
  .includes(searchValue.toLowerCase())), [reportMappings, searchValue]);
107
103
  return (React.createElement(React.Fragment, null,
108
- React.createElement(WidgetHeader, { title: (_a = report.displayName) !== null && _a !== void 0 ? _a : "", returnFn: goBack }),
104
+ React.createElement(WidgetHeader, { title: report.displayName, returnFn: goBack }),
109
105
  React.createElement("div", { className: "report-mapping-misc" },
110
106
  React.createElement(LabeledInput, { label: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:ODataFeedURL"), className: "odata-url-input", readOnly: true, value: odataFeedUrl, svgIcon: React.createElement(IconButton, { title: ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Copy"), styleType: "borderless", onClick: async (_) => {
111
107
  await navigator.clipboard.writeText(odataFeedUrl);
@@ -137,12 +133,12 @@ export const ReportMappings = ({ report, goBack }) => {
137
133
  width: "16px",
138
134
  height: "16px",
139
135
  } })))) })))))),
140
- React.createElement(AddMappingsModal, { show: reportMappingsView === ReportMappingsView.ADDING, reportId: (_b = report.id) !== null && _b !== void 0 ? _b : "", existingMappings: reportMappings, returnFn: refresh }),
141
- React.createElement(DeleteModal, { entityName: (_c = selectedReportMapping === null || selectedReportMapping === void 0 ? void 0 : selectedReportMapping.mappingName) !== null && _c !== void 0 ? _c : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
142
- var _a, _b;
143
- const reportingClientApi = new ReportingClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
136
+ React.createElement(AddMappingsModal, { show: reportMappingsView === ReportMappingsView.ADDING, reportId: report.id, existingMappings: reportMappings, returnFn: refresh }),
137
+ React.createElement(DeleteModal, { entityName: (_a = selectedReportMapping === null || selectedReportMapping === void 0 ? void 0 : selectedReportMapping.mappingName) !== null && _a !== void 0 ? _a : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
138
+ var _a;
139
+ const reportsClientApi = new ReportsClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
144
140
  const accessToken = await apiConfig.getAccessToken();
145
- await reportingClientApi.deleteReportMapping(accessToken, (_a = report.id) !== null && _a !== void 0 ? _a : "", (_b = selectedReportMapping === null || selectedReportMapping === void 0 ? void 0 : selectedReportMapping.mappingId) !== null && _b !== void 0 ? _b : "");
141
+ await reportsClientApi.deleteReportMapping(accessToken, report.id, (_a = selectedReportMapping === null || selectedReportMapping === void 0 ? void 0 : selectedReportMapping.mappingId) !== null && _a !== void 0 ? _a : "");
146
142
  }, refresh: refresh })));
147
143
  };
148
144
  //# sourceMappingURL=ReportMappings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReportMappings.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportMappings.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 {\n SvgAdd,\n SvgCopy,\n SvgDelete,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n LabeledInput,\n MenuItem,\n Surface,\n Text,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"./utils\";\nimport {\n EmptyMessage,\n generateUrl,\n handleError,\n LoadingOverlay,\n WidgetHeader,\n} from \"./utils\";\nimport \"./ReportMappings.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport type { Report, ReportMapping } from \"@itwin/insights-client\";\nimport { REPORTING_BASE_PATH, ReportingClient } from \"@itwin/insights-client\";\nimport AddMappingsModal from \"./AddMappingsModal\";\nimport type {\n GetSingleIModelParams,\n IModelsClientOptions,\n} from \"@itwin/imodels-client-management\";\nimport { Constants, IModelsClient } from \"@itwin/imodels-client-management\";\nimport { AccessTokenAdapter } from \"@itwin/imodels-access-frontend\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport { Extraction, ExtractionStates, ExtractionStatus } from \"./Extraction\";\nimport { SearchBar } from \"./SearchBar\";\nimport type { ReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\n\nexport type ReportMappingType = CreateTypeFromInterface<ReportMapping>;\n\nexport type ReportMappingAndMapping = ReportMappingType & {\n mappingName: string;\n mappingDescription: string;\n iModelName: string;\n};\n\nenum ReportMappingsView {\n REPORTMAPPINGS = \"reportmappings\",\n ADDING = \"adding\",\n}\n\nconst fetchReportMappings = async (\n setReportMappings: React.Dispatch<\n React.SetStateAction<ReportMappingAndMapping[]>\n >,\n reportId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n apiContext: ReportsApiConfig\n) => {\n try {\n setIsLoading(true);\n const reportingClientApi = new ReportingClient(\n generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl)\n );\n const accessToken = await apiContext.getAccessToken();\n const reportMappings = await reportingClientApi.getReportMappings(\n accessToken,\n reportId\n );\n const iModelClientOptions: IModelsClientOptions = {\n api: { baseUrl: generateUrl(Constants.api.baseUrl, apiContext.baseUrl) },\n };\n\n const iModelsClient: IModelsClient = new IModelsClient(iModelClientOptions);\n const authorization =\n AccessTokenAdapter.toAuthorizationCallback(accessToken);\n const iModelNames = new Map<string, string>();\n const reportMappingsAndMapping = await Promise.all(\n reportMappings?.map(async (reportMapping) => {\n const iModelId = reportMapping.imodelId ?? \"\";\n let iModelName = \"\";\n const mapping = await reportingClientApi.getMapping(\n accessToken,\n reportMapping.mappingId ?? \"\",\n iModelId\n );\n if (iModelNames.has(iModelId)) {\n iModelName = iModelNames.get(iModelId) ?? \"\";\n } else {\n const getSingleParams: GetSingleIModelParams = {\n authorization,\n iModelId,\n };\n const iModel = await iModelsClient.iModels.getSingle(getSingleParams);\n iModelName = iModel.displayName;\n iModelNames.set(iModelId, iModelName);\n }\n const reportMappingAndMapping: ReportMappingAndMapping = {\n ...reportMapping,\n iModelName,\n mappingName: mapping.mapping?.mappingName ?? \"\",\n mappingDescription: mapping.mapping?.description ?? \"\",\n };\n return reportMappingAndMapping;\n }) ?? []\n );\n\n setReportMappings(reportMappingsAndMapping);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\ninterface ReportMappingsProps {\n report: Report;\n goBack: () => Promise<void>;\n}\n\nexport const ReportMappings = ({ report, goBack }: ReportMappingsProps) => {\n const apiConfig = useReportsApiConfig();\n const [reportMappingsView, setReportMappingsView] =\n useState<ReportMappingsView>(ReportMappingsView.REPORTMAPPINGS);\n const [selectedReportMapping, setSelectedReportMapping] = useState<\n ReportMappingAndMapping | undefined\n >(undefined);\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n\n const [extractionState, setExtractionState] = useState<ExtractionStates>(\n ExtractionStates.None\n );\n const [runningIModelId, setRunningIModelId] = useState<string>(\"\");\n const [searchValue, setSearchValue] = useState<string>(\"\");\n const [reportMappings, setReportMappings] = useState<\n ReportMappingAndMapping[]\n >([]);\n\n useEffect(() => {\n void fetchReportMappings(\n setReportMappings,\n report.id ?? \"\",\n setIsLoading,\n apiConfig\n );\n }, [apiConfig, report.id, setIsLoading]);\n\n const refresh = useCallback(async () => {\n setReportMappingsView(ReportMappingsView.REPORTMAPPINGS);\n await fetchReportMappings(\n setReportMappings,\n report.id ?? \"\",\n setIsLoading,\n apiConfig\n );\n }, [apiConfig, report.id, setReportMappings]);\n\n const addMapping = () => {\n setReportMappingsView(ReportMappingsView.ADDING);\n };\n\n const uniqueIModels = useMemo(\n () =>\n new Map(\n reportMappings.map((mapping) => [\n mapping.imodelId ?? \"\",\n mapping.iModelName,\n ])\n ),\n [reportMappings]\n );\n\n const odataFeedUrl = `${generateUrl(\n REPORTING_BASE_PATH,\n apiConfig.baseUrl\n )}/odata/${report.id}`;\n\n const filteredReportMappings = useMemo(\n () =>\n reportMappings.filter((x) =>\n [x.iModelName, x.mappingName, x.mappingDescription]\n .join(\" \")\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ),\n [reportMappings, searchValue]\n );\n\n return (\n <>\n <WidgetHeader title={report.displayName ?? \"\"} returnFn={goBack} />\n <div className=\"report-mapping-misc\">\n <LabeledInput\n label={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:ODataFeedURL\"\n )}\n className=\"odata-url-input\"\n readOnly={true}\n value={odataFeedUrl}\n svgIcon={\n <IconButton\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Copy\"\n )}\n styleType=\"borderless\"\n onClick={async (_) => {\n await navigator.clipboard.writeText(odataFeedUrl);\n toaster.positive(\n ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:CopiedToClipboard\"\n )\n );\n }}\n >\n <SvgCopy />\n </IconButton>\n }\n iconDisplayStyle=\"inline\"\n />\n <Extraction\n iModels={uniqueIModels}\n extractionState={extractionState}\n setExtractionState={setExtractionState}\n setExtractingIModelId={setRunningIModelId}\n isLoading={isLoading}\n />\n </div>\n <Surface className=\"report-mappings-container\">\n <div className=\"toolbar\">\n <Button\n startIcon={<SvgAdd />}\n onClick={() => addMapping()}\n styleType=\"high-visibility\"\n >\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:AddMapping\"\n )}\n </Button>\n <div className=\"search-bar-container\" data-testid=\"search-bar\">\n <SearchBar\n searchValue={searchValue}\n setSearchValue={setSearchValue}\n disabled={isLoading}\n />\n </div>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : reportMappings.length === 0 ? (\n <EmptyMessage>\n <>\n <Text>\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:NoReportMappings\"\n )}\n </Text>\n <div>\n <Button onClick={() => addMapping()} styleType=\"cta\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:LetsAddSomeMappingsCTA\"\n )}\n </Button>\n </div>\n </>\n </EmptyMessage>\n ) : (\n <div className=\"mapping-list\">\n {filteredReportMappings.map((mapping) => (\n <HorizontalTile\n key={mapping.mappingId}\n title={mapping.mappingName}\n subText={mapping.iModelName}\n titleTooltip={mapping.mappingDescription}\n button={\n <ExtractionStatus\n state={\n mapping.imodelId === runningIModelId\n ? extractionState\n : ExtractionStates.None\n }\n >\n <DropdownMenu\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => {\n setSelectedReportMapping(mapping);\n setShowDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Remove\"\n )}\n </MenuItem>,\n ]}\n >\n <IconButton styleType=\"borderless\">\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n </ExtractionStatus>\n }\n />\n ))}\n </div>\n )}\n </Surface>\n <AddMappingsModal\n show={reportMappingsView === ReportMappingsView.ADDING}\n reportId={report.id ?? \"\"}\n existingMappings={reportMappings}\n returnFn={refresh}\n />\n <DeleteModal\n entityName={selectedReportMapping?.mappingName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n const reportingClientApi = new ReportingClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n await reportingClientApi.deleteReportMapping(\n accessToken,\n report.id ?? \"\",\n selectedReportMapping?.mappingId ?? \"\"\n );\n }}\n refresh={refresh}\n />\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"ReportMappings.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportMappings.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 {\n SvgAdd,\n SvgCopy,\n SvgDelete,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n LabeledInput,\n MenuItem,\n Surface,\n Text,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"./utils\";\nimport {\n EmptyMessage,\n generateUrl,\n handleError,\n LoadingOverlay,\n WidgetHeader,\n} from \"./utils\";\nimport \"./ReportMappings.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport type { Report, ReportMapping } from \"@itwin/insights-client\";\nimport { MappingsClient, REPORTING_BASE_PATH, ReportsClient } from \"@itwin/insights-client\";\nimport AddMappingsModal from \"./AddMappingsModal\";\nimport type {\n GetSingleIModelParams,\n IModelsClientOptions,\n} from \"@itwin/imodels-client-management\";\nimport { Constants, IModelsClient } from \"@itwin/imodels-client-management\";\nimport { AccessTokenAdapter } from \"@itwin/imodels-access-frontend\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport { Extraction, ExtractionStates, ExtractionStatus } from \"./Extraction\";\nimport { SearchBar } from \"./SearchBar\";\nimport type { ReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { useReportsApiConfig } from \"../context/ReportsApiConfigContext\";\nimport { ReportsConfigWidget } from \"../../ReportsConfigWidget\";\n\nexport type ReportMappingType = CreateTypeFromInterface<ReportMapping>;\n\nexport type ReportMappingAndMapping = ReportMappingType & {\n mappingName: string;\n mappingDescription: string;\n iModelName: string;\n};\n\nenum ReportMappingsView {\n REPORTMAPPINGS = \"reportmappings\",\n ADDING = \"adding\",\n}\n\nconst fetchReportMappings = async (\n setReportMappings: React.Dispatch<\n React.SetStateAction<ReportMappingAndMapping[]>\n >,\n reportId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n apiContext: ReportsApiConfig\n) => {\n try {\n setIsLoading(true);\n const reportsClientApi = new ReportsClient(\n generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl)\n );\n const mappingsClientApi = new MappingsClient(\n generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl)\n );\n const accessToken = await apiContext.getAccessToken();\n const reportMappings = await reportsClientApi.getReportMappings(\n accessToken,\n reportId\n );\n const iModelClientOptions: IModelsClientOptions = {\n api: { baseUrl: generateUrl(Constants.api.baseUrl, apiContext.baseUrl) },\n };\n\n const iModelsClient: IModelsClient = new IModelsClient(iModelClientOptions);\n const authorization =\n AccessTokenAdapter.toAuthorizationCallback(accessToken);\n const iModelNames = new Map<string, string>();\n const reportMappingsAndMapping = await Promise.all(\n reportMappings.map(async (reportMapping) => {\n const iModelId = reportMapping.imodelId;\n let iModelName = \"\";\n const mapping = await mappingsClientApi.getMapping(\n accessToken,\n iModelId,\n reportMapping.mappingId\n );\n if (iModelNames.has(iModelId)) {\n iModelName = iModelNames.get(iModelId) ?? \"\";\n } else {\n const getSingleParams: GetSingleIModelParams = {\n authorization,\n iModelId,\n };\n const iModel = await iModelsClient.iModels.getSingle(getSingleParams);\n iModelName = iModel.displayName;\n iModelNames.set(iModelId, iModelName);\n }\n const reportMappingAndMapping: ReportMappingAndMapping = {\n ...reportMapping,\n iModelName,\n mappingName: mapping.mappingName,\n mappingDescription: mapping.description ?? \"\",\n };\n return reportMappingAndMapping;\n }) ?? []\n );\n\n setReportMappings(reportMappingsAndMapping);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\ninterface ReportMappingsProps {\n report: Report;\n goBack: () => Promise<void>;\n}\n\nexport const ReportMappings = ({ report, goBack }: ReportMappingsProps) => {\n const apiConfig = useReportsApiConfig();\n const [reportMappingsView, setReportMappingsView] =\n useState<ReportMappingsView>(ReportMappingsView.REPORTMAPPINGS);\n const [selectedReportMapping, setSelectedReportMapping] = useState<\n ReportMappingAndMapping | undefined\n >(undefined);\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n\n const [extractionState, setExtractionState] = useState<ExtractionStates>(\n ExtractionStates.None\n );\n const [runningIModelId, setRunningIModelId] = useState<string>(\"\");\n const [searchValue, setSearchValue] = useState<string>(\"\");\n const [reportMappings, setReportMappings] = useState<\n ReportMappingAndMapping[]\n >([]);\n\n useEffect(() => {\n void fetchReportMappings(\n setReportMappings,\n report.id,\n setIsLoading,\n apiConfig\n );\n }, [apiConfig, report.id, setIsLoading]);\n\n const refresh = useCallback(async () => {\n setReportMappingsView(ReportMappingsView.REPORTMAPPINGS);\n await fetchReportMappings(\n setReportMappings,\n report.id,\n setIsLoading,\n apiConfig\n );\n }, [apiConfig, report.id, setReportMappings]);\n\n const addMapping = () => {\n setReportMappingsView(ReportMappingsView.ADDING);\n };\n\n const uniqueIModels = useMemo(\n () =>\n new Map(\n reportMappings.map((mapping) => [\n mapping.imodelId,\n mapping.iModelName,\n ])\n ),\n [reportMappings]\n );\n\n const odataFeedUrl = `${generateUrl(\n REPORTING_BASE_PATH,\n apiConfig.baseUrl\n )}/odata/${report.id}`;\n\n const filteredReportMappings = useMemo(\n () =>\n reportMappings.filter((x) =>\n [x.iModelName, x.mappingName, x.mappingDescription]\n .join(\" \")\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ),\n [reportMappings, searchValue]\n );\n\n return (\n <>\n <WidgetHeader title={report.displayName} returnFn={goBack} />\n <div className=\"report-mapping-misc\">\n <LabeledInput\n label={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:ODataFeedURL\"\n )}\n className=\"odata-url-input\"\n readOnly={true}\n value={odataFeedUrl}\n svgIcon={\n <IconButton\n title={ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Copy\"\n )}\n styleType=\"borderless\"\n onClick={async (_) => {\n await navigator.clipboard.writeText(odataFeedUrl);\n toaster.positive(\n ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:CopiedToClipboard\"\n )\n );\n }}\n >\n <SvgCopy />\n </IconButton>\n }\n iconDisplayStyle=\"inline\"\n />\n <Extraction\n iModels={uniqueIModels}\n extractionState={extractionState}\n setExtractionState={setExtractionState}\n setExtractingIModelId={setRunningIModelId}\n isLoading={isLoading}\n />\n </div>\n <Surface className=\"report-mappings-container\">\n <div className=\"toolbar\">\n <Button\n startIcon={<SvgAdd />}\n onClick={() => addMapping()}\n styleType=\"high-visibility\"\n >\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:AddMapping\"\n )}\n </Button>\n <div className=\"search-bar-container\" data-testid=\"search-bar\">\n <SearchBar\n searchValue={searchValue}\n setSearchValue={setSearchValue}\n disabled={isLoading}\n />\n </div>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : reportMappings.length === 0 ? (\n <EmptyMessage>\n <>\n <Text>\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:NoReportMappings\"\n )}\n </Text>\n <div>\n <Button onClick={() => addMapping()} styleType=\"cta\">\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:LetsAddSomeMappingsCTA\"\n )}\n </Button>\n </div>\n </>\n </EmptyMessage>\n ) : (\n <div className=\"mapping-list\">\n {filteredReportMappings.map((mapping) => (\n <HorizontalTile\n key={mapping.mappingId}\n title={mapping.mappingName}\n subText={mapping.iModelName}\n titleTooltip={mapping.mappingDescription}\n button={\n <ExtractionStatus\n state={\n mapping.imodelId === runningIModelId\n ? extractionState\n : ExtractionStates.None\n }\n >\n <DropdownMenu\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => {\n setSelectedReportMapping(mapping);\n setShowDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n {ReportsConfigWidget.localization.getLocalizedString(\n \"ReportsConfigWidget:Remove\"\n )}\n </MenuItem>,\n ]}\n >\n <IconButton styleType=\"borderless\">\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n </ExtractionStatus>\n }\n />\n ))}\n </div>\n )}\n </Surface>\n <AddMappingsModal\n show={reportMappingsView === ReportMappingsView.ADDING}\n reportId={report.id}\n existingMappings={reportMappings}\n returnFn={refresh}\n />\n <DeleteModal\n entityName={selectedReportMapping?.mappingName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n const reportsClientApi = new ReportsClient(\n generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl)\n );\n const accessToken = await apiConfig.getAccessToken();\n await reportsClientApi.deleteReportMapping(\n accessToken,\n report.id,\n selectedReportMapping?.mappingId ?? \"\"\n );\n }}\n refresh={refresh}\n />\n </>\n );\n};\n"]}
@@ -8,7 +8,7 @@ import React, { useCallback, useEffect, useMemo, useState } from "react";
8
8
  import { EmptyMessage, generateUrl, handleError, LoadingOverlay, WidgetHeader, } from "./utils";
9
9
  import "./Reports.scss";
10
10
  import DeleteModal from "./DeleteModal";
11
- import { REPORTING_BASE_PATH, ReportingClient } from "@itwin/insights-client";
11
+ import { REPORTING_BASE_PATH, ReportsClient } from "@itwin/insights-client";
12
12
  import ReportAction from "./ReportAction";
13
13
  import { ReportMappings } from "./ReportMappings";
14
14
  import { HorizontalTile } from "./HorizontalTile";
@@ -28,9 +28,9 @@ const fetchReports = async (setReports, iTwinId, setIsLoading, apiContext) => {
28
28
  if (!iTwinId)
29
29
  return;
30
30
  setIsLoading(true);
31
- const reportingClientApi = new ReportingClient(generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl));
31
+ const reportsClientApi = new ReportsClient(generateUrl(REPORTING_BASE_PATH, apiContext.baseUrl));
32
32
  const accessToken = await apiContext.getAccessToken();
33
- const reports = await reportingClientApi.getReports(accessToken, iTwinId);
33
+ const reports = await reportsClientApi.getReports(accessToken, iTwinId);
34
34
  setReports(reports !== null && reports !== void 0 ? reports : []);
35
35
  }
36
36
  catch (error) {
@@ -85,8 +85,8 @@ export const Reports = () => {
85
85
  ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:NoReports"),
86
86
  React.createElement("div", null,
87
87
  React.createElement(Button, { onClick: () => addReport(), styleType: "cta" }, ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:CreateOneReportCTA")))))) : (React.createElement("div", { className: "reports-list" }, filteredReports.map((report) => {
88
- var _a, _b, _c;
89
- return (React.createElement(HorizontalTile, { key: report.id, title: (_a = report.displayName) !== null && _a !== void 0 ? _a : "", subText: (_b = report.description) !== null && _b !== void 0 ? _b : "", subtextToolTip: (_c = report.description) !== null && _c !== void 0 ? _c : "", titleTooltip: report.displayName, onClickTitle: () => {
88
+ var _a, _b;
89
+ return (React.createElement(HorizontalTile, { key: report.id, title: report.displayName, subText: (_a = report.description) !== null && _a !== void 0 ? _a : "", subtextToolTip: (_b = report.description) !== null && _b !== void 0 ? _b : "", titleTooltip: report.displayName, onClickTitle: () => {
90
90
  setSelectedReport(report);
91
91
  setReportsView(ReportsView.REPORTSMAPPING);
92
92
  }, button: React.createElement(DropdownMenu, { menuItems: (close) => [
@@ -108,9 +108,9 @@ export const Reports = () => {
108
108
  })))),
109
109
  React.createElement(DeleteModal, { entityName: (_c = selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.displayName) !== null && _c !== void 0 ? _c : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
110
110
  var _a;
111
- const reportingClientApi = new ReportingClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
111
+ const reportsClientApi = new ReportsClient(generateUrl(REPORTING_BASE_PATH, apiConfig.baseUrl));
112
112
  const accessToken = await apiConfig.getAccessToken();
113
- await reportingClientApi.deleteReport(accessToken, (_a = selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.id) !== null && _a !== void 0 ? _a : "");
113
+ await reportsClientApi.deleteReport(accessToken, (_a = selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.id) !== null && _a !== void 0 ? _a : "");
114
114
  }, refresh: refresh })));
115
115
  }
116
116
  };