@itwin/reports-config-widget-react 0.0.4 → 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 +8 -3
  3. package/CHANGELOG.json +36 -0
  4. package/CHANGELOG.md +22 -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 +5 -4
  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
@@ -39,9 +39,9 @@ const ReportsConfigWidget_1 = require("../../ReportsConfigWidget");
39
39
  const fetchMappings = async (setMappings, iModelId, setIsLoading, apiContext) => {
40
40
  try {
41
41
  setIsLoading(true);
42
- const reportingClientApi = new insights_client_1.ReportingClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiContext.baseUrl));
42
+ const mappingsClientApi = new insights_client_1.MappingsClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiContext.baseUrl));
43
43
  const accessToken = await apiContext.getAccessToken();
44
- const mappings = await reportingClientApi.getMappings(accessToken, iModelId);
44
+ const mappings = await mappingsClientApi.getMappings(accessToken, iModelId);
45
45
  setMappings(mappings);
46
46
  }
47
47
  catch (error) {
@@ -82,17 +82,16 @@ const AddMappingsModal = ({ reportId, existingMappings, show, returnFn, }) => {
82
82
  },
83
83
  ], []);
84
84
  const onSave = async () => {
85
- var _a;
86
85
  try {
87
86
  if (!selectedIModelId)
88
87
  return;
89
88
  setIsLoading(true);
90
- const reportingClientApi = new insights_client_1.ReportingClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
89
+ const reportsClientApi = new insights_client_1.ReportsClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
91
90
  const accessToken = await apiConfig.getAccessToken();
92
91
  for (const mapping of selectedMappings) {
93
- await reportingClientApi.createReportMapping(accessToken, reportId, {
92
+ await reportsClientApi.createReportMapping(accessToken, reportId, {
94
93
  imodelId: selectedIModelId,
95
- mappingId: (_a = mapping.id) !== null && _a !== void 0 ? _a : "",
94
+ mappingId: mapping.id,
96
95
  });
97
96
  }
98
97
  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":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,wDAAkE;AAClE,+CAA4D;AAE5D,4DAA4F;AAC5F,gEAAwC;AACxC,mCAAiC;AACjC,uEAAoE;AAGpE,gFAAyE;AACzE,iDAA8C;AAE9C,mCAAmD;AACnD,mEAAgE;AAIhE,MAAM,aAAa,GAAG,KAAK,EACzB,WAA4D,EAC5D,QAAgB,EAChB,YAA2D,EAC3D,UAA4B,EAC5B,EAAE;IACF,IAAI;QACF,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,iBAAiB,GAAG,IAAI,gCAAc,CAC1C,mBAAW,CAAC,qCAAmB,EAAE,UAAU,CAAC,OAAO,CAAC,CACrD,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAClD,WAAW,EACX,QAAQ,CACT,CAAC;QACF,WAAW,CAAC,QAAQ,CAAC,CAAC;KACvB;IAAC,OAAO,KAAU,EAAE;QACnB,mBAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B;YAAS;QACR,YAAY,CAAC,KAAK,CAAC,CAAC;KACrB;AACH,CAAC,CAAC;AASF,MAAM,gBAAgB,GAAG,CAAC,EACxB,QAAQ,EACR,gBAAgB,EAChB,IAAI,EACJ,QAAQ,GACc,EAAE,EAAE;IAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAU,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,gBAAQ,CAAY,EAAE,CAAC,CAAC;IACxE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,gBAAQ,CAAS,EAAE,CAAC,CAAC;IACrE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,gBAAQ,CAAY,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,6CAAmB,EAAE,CAAC;IAExC,iBAAS,CAAC,GAAG,EAAE;QACb,IAAI,gBAAgB,EAAE;YACpB,KAAK,aAAa,CAChB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,SAAS,CACV,CAAC;SACH;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;IAEhD,MAAM,eAAe,GAAG,eAAO,CAC7B,GAAG,EAAE,CAAC;QACJ;YACE,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACP;oBACE,EAAE,EAAE,aAAa;oBACjB,MAAM,EAAE,yCAAmB,CAAC,YAAY,CAAC,kBAAkB,CACzD,iCAAiC,CAClC;oBACD,QAAQ,EAAE,aAAa;oBACvB,MAAM,EAAE,4BAAY,CAAC,UAAU,EAAE;iBAClC;gBACD;oBACE,EAAE,EAAE,aAAa;oBACjB,MAAM,EAAE,yCAAmB,CAAC,YAAY,CAAC,kBAAkB,CACzD,iCAAiC,CAClC;oBACD,QAAQ,EAAE,aAAa;oBACvB,MAAM,EAAE,4BAAY,CAAC,UAAU,EAAE;iBAClC;aACF;SACF;KACF,EACD,EAAE,CACH,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,IAAI;YACF,IAAI,CAAC,gBAAgB;gBAAE,OAAO;YAC9B,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,gBAAgB,GAAG,IAAI,+BAAa,CACxC,mBAAW,CAAC,qCAAmB,EAAE,SAAS,CAAC,OAAO,CAAC,CACpD,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,cAAc,EAAE,CAAC;YACrD,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE;gBACtC,MAAM,gBAAgB,CAAC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,EAAE;oBAChE,QAAQ,EAAE,gBAAgB;oBAC1B,SAAS,EAAE,OAAO,CAAC,EAAE;iBACtB,CAAC,CAAC;aACJ;YAED,MAAM,QAAQ,EAAE,CAAC;SAClB;QAAC,OAAO,KAAU,EAAE;YACnB,mBAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;gBAAS;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;IAEF,OAAO,CACL,8BAAC,qBAAK,IACJ,KAAK,EAAE,yCAAmB,CAAC,YAAY,CAAC,kBAAkB,CACxD,iCAAiC,CAClC,EACD,MAAM,EAAE,IAAI,EACZ,aAAa,EAAE,CAAC,SAAS,EACzB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,QAAQ,EAAE,CAAC;QACnB,CAAC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE;QAEtE,uCAAK,SAAS,EAAC,wBAAwB;YACrC,8BAAC,2BAAY,IACX,gBAAgB,EAAE,gBAAgB,EAClC,mBAAmB,EAAE,mBAAmB,GACxC;YACF,8BAAC,qBAAK,IACJ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAC/B,OAAO,EAAE,eAAe,EACxB,SAAS,EAAC,oBAAoB,EAC9B,iBAAiB,EAAE,yCAAmB,CAAC,YAAY,CAAC,kBAAkB,CACpE,yCAAyC,CAC1C,EACD,UAAU,QACV,YAAY,QACZ,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CACzB,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,CAAC,EAE1D,QAAQ,EAAE,CAAC,UAAiC,EAAE,EAAE;oBAC9C,UAAU,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBAChD,CAAC,EACD,iBAAiB,EAAE,iDAAuB,GAC1C,CACE;QACN,8BAAC,qBAAW,IACV,WAAW,EAAE,yCAAmB,CAAC,YAAY,CAAC,kBAAkB,CAC9D,yBAAyB,CAC1B,EACD,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAC/C,SAAS,EAAE,SAAS,GACpB,CACI,CACT,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,gBAAgB,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 { 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"]}
@@ -100,14 +100,13 @@ const Extraction = ({ iModels, setExtractingIModelId, extractionState, setExtrac
100
100
  const [currentIModelId, setCurrentIModelId] = react_1.useState();
101
101
  const apiConfig = ReportsApiConfigContext_1.useReportsApiConfig();
102
102
  const runExtraction = async (iModelId) => {
103
- var _a, _b;
104
103
  try {
105
104
  setExtractionState(ExtractionStates.Starting);
106
105
  setExtractingIModelId(iModelId);
107
- const reportingClientApi = new insights_client_1.ReportingClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
106
+ const extractionClientApi = new insights_client_1.ExtractionClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
108
107
  const accessToken = await apiConfig.getAccessToken();
109
- const response = await reportingClientApi.runExtraction(accessToken, iModelId);
110
- jobId.current = (_b = (_a = response.run) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : "";
108
+ const response = await extractionClientApi.runExtraction(accessToken, iModelId);
109
+ jobId.current = response.id;
111
110
  setIsRunning(true);
112
111
  setExtractionState(ExtractionStates.FetchingUpdate);
113
112
  }
@@ -121,22 +120,21 @@ const Extraction = ({ iModels, setExtractingIModelId, extractionState, setExtrac
121
120
  react_1.useEffect(() => {
122
121
  if (!intervalId.current && isRunning) {
123
122
  const newIntervalId = window.setInterval(async () => {
124
- var _a, _b, _c, _d;
125
- const reportingClientApi = new insights_client_1.ReportingClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
123
+ const extractionClientApi = new insights_client_1.ExtractionClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
126
124
  const accessToken = await apiConfig.getAccessToken();
127
- const response = await reportingClientApi.getExtractionStatus(accessToken, jobId.current);
128
- if (((_a = response.status) === null || _a === void 0 ? void 0 : _a.state) === "Queued") {
125
+ const response = await extractionClientApi.getExtractionStatus(accessToken, jobId.current);
126
+ if (response.state === "Queued") {
129
127
  setExtractionState(ExtractionStates.Queued);
130
128
  }
131
- else if (((_b = response.status) === null || _b === void 0 ? void 0 : _b.state) === "Running") {
129
+ else if (response.state === "Running") {
132
130
  setExtractionState(ExtractionStates.Running);
133
131
  }
134
- else if (((_c = response.status) === null || _c === void 0 ? void 0 : _c.state) === "Succeeded") {
132
+ else if (response.state === "Succeeded") {
135
133
  setExtractionState(ExtractionStates.Succeeded);
136
134
  setIsRunning(false);
137
135
  setCurrentIModelId(undefined);
138
136
  }
139
- else if (((_d = response.status) === null || _d === void 0 ? void 0 : _d.state) === "Failed") {
137
+ else if (response.state === "Failed") {
140
138
  setExtractionState(ExtractionStates.Failed);
141
139
  setIsRunning(false);
142
140
  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"]}
@@ -52,14 +52,14 @@ const ReportAction = ({ iTwinId, report, returnFn }) => {
52
52
  return;
53
53
  }
54
54
  setIsLoading(true);
55
- const reportingClientApi = new insights_client_1.ReportingClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
55
+ const reportsClientApi = new insights_client_1.ReportsClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
56
56
  const accessToken = await apiConfig.getAccessToken();
57
57
  report
58
- ? await reportingClientApi.updateReport(accessToken, (_a = report.id) !== null && _a !== void 0 ? _a : "", {
58
+ ? await reportsClientApi.updateReport(accessToken, (_a = report.id) !== null && _a !== void 0 ? _a : "", {
59
59
  displayName: values.name,
60
60
  description: values.description,
61
61
  })
62
- : await reportingClientApi.createReport(accessToken, {
62
+ : await reportsClientApi.createReport(accessToken, {
63
63
  displayName: values.name,
64
64
  description: values.description,
65
65
  projectId: iTwinId,
@@ -1 +1 @@
1
- {"version":3,"file":"ReportAction.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportAction.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,wDAAqE;AACrE,+CAAwC;AACxC,gEAAwC;AACxC,sEAAwE;AACxE,mCAKiB;AACjB,+BAA6B;AAE7B,4DAA8E;AAC9E,gFAAyE;AACzE,mEAAgE;AAQhE,MAAM,YAAY,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAqB,EAAE,EAAE;;IACxE,MAAM,SAAS,GAAG,6CAAmB,EAAE,CAAC;IACxC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,gBAAQ,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,sBAAY,EAAE,CAAC;IAC1D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,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,kBAAkB,GAAG,IAAI,iCAAe,CAC5C,mBAAW,CAAC,qCAAmB,EAAE,SAAS,CAAC,OAAO,CAAC,CACpD,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,cAAc,EAAE,CAAC;YACrD,MAAM;gBACJ,CAAC,CAAC,MAAM,kBAAkB,CAAC,YAAY,CAAC,WAAW,EAAE,MAAA,MAAM,CAAC,EAAE,mCAAI,EAAE,EAAE;oBACpE,WAAW,EAAE,MAAM,CAAC,IAAI;oBACxB,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC,CAAC;gBACF,CAAC,CAAC,MAAM,kBAAkB,CAAC,YAAY,CAAC,WAAW,EAAE;oBACnD,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,mBAAW,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,8BAAC,oBAAY,IACX,KAAK,EACH,MAAM;gBACJ,CAAC,CAAC,yCAAmB,CAAC,YAAY,CAAC,kBAAkB,CACnD,kCAAkC,CACnC;gBACD,CAAC,CAAC,yCAAmB,CAAC,YAAY,CAAC,kBAAkB,CACnD,+BAA+B,CAChC,EAEL,QAAQ,EAAE,QAAQ,GAClB;QACF,uCAAK,SAAS,EAAC,4BAA4B;YACzC,8BAAC,wBAAQ,IACP,MAAM,EAAE,yCAAmB,CAAC,YAAY,CAAC,kBAAkB,CACzD,mCAAmC,CACpC,EACD,SAAS,EAAC,cAAc;gBAExB,8BAAC,qBAAK,IAAC,SAAS,EAAC,cAAc,IAC5B,yCAAmB,CAAC,YAAY,CAAC,kBAAkB,CAClD,qCAAqC,CACtC,CACK;gBACR,8BAAC,4BAAY,IACX,EAAE,EAAC,MAAM,EACT,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,yCAAmB,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,yBAAiB,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,gCAAiB,CAAC,EAClE,MAAM,EACJ,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,gCAAiB,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,yBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;wBAC5C,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC,GACD;gBACF,8BAAC,4BAAY,IACX,EAAE,EAAC,aAAa,EAChB,IAAI,EAAC,aAAa,EAClB,KAAK,EAAE,yCAAmB,CAAC,YAAY,CAAC,kBAAkB,CACxD,iCAAiC,CAClC,EACD,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,yBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;oBAC9C,CAAC,EACD,QAAQ,EAAE,SAAS,GACnB,CACO,CACP;QACN,8BAAC,qBAAW,IACV,WAAW,EAAE,yCAAmB,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,kBAAe,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, 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":"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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, 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"}
@@ -51,22 +51,23 @@ const fetchReportMappings = async (setReportMappings, reportId, setIsLoading, ap
51
51
  var _a;
52
52
  try {
53
53
  setIsLoading(true);
54
- const reportingClientApi = new insights_client_1.ReportingClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiContext.baseUrl));
54
+ const reportsClientApi = new insights_client_1.ReportsClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiContext.baseUrl));
55
+ const mappingsClientApi = new insights_client_1.MappingsClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiContext.baseUrl));
55
56
  const accessToken = await apiContext.getAccessToken();
56
- const reportMappings = await reportingClientApi.getReportMappings(accessToken, reportId);
57
+ const reportMappings = await reportsClientApi.getReportMappings(accessToken, reportId);
57
58
  const iModelClientOptions = {
58
59
  api: { baseUrl: utils_1.generateUrl(imodels_client_management_1.Constants.api.baseUrl, apiContext.baseUrl) },
59
60
  };
60
61
  const iModelsClient = new imodels_client_management_1.IModelsClient(iModelClientOptions);
61
62
  const authorization = imodels_access_frontend_1.AccessTokenAdapter.toAuthorizationCallback(accessToken);
62
63
  const iModelNames = new Map();
63
- const reportMappingsAndMapping = await Promise.all((_a = reportMappings === null || reportMappings === void 0 ? void 0 : reportMappings.map(async (reportMapping) => {
64
- var _a, _b, _c, _d, _e, _f, _g;
65
- const iModelId = (_a = reportMapping.imodelId) !== null && _a !== void 0 ? _a : "";
64
+ const reportMappingsAndMapping = await Promise.all((_a = reportMappings.map(async (reportMapping) => {
65
+ var _a, _b;
66
+ const iModelId = reportMapping.imodelId;
66
67
  let iModelName = "";
67
- const mapping = await reportingClientApi.getMapping(accessToken, (_b = reportMapping.mappingId) !== null && _b !== void 0 ? _b : "", iModelId);
68
+ const mapping = await mappingsClientApi.getMapping(accessToken, iModelId, reportMapping.mappingId);
68
69
  if (iModelNames.has(iModelId)) {
69
- iModelName = (_c = iModelNames.get(iModelId)) !== null && _c !== void 0 ? _c : "";
70
+ iModelName = (_a = iModelNames.get(iModelId)) !== null && _a !== void 0 ? _a : "";
70
71
  }
71
72
  else {
72
73
  const getSingleParams = {
@@ -80,8 +81,8 @@ const fetchReportMappings = async (setReportMappings, reportId, setIsLoading, ap
80
81
  const reportMappingAndMapping = {
81
82
  ...reportMapping,
82
83
  iModelName,
83
- mappingName: (_e = (_d = mapping.mapping) === null || _d === void 0 ? void 0 : _d.mappingName) !== null && _e !== void 0 ? _e : "",
84
- mappingDescription: (_g = (_f = mapping.mapping) === null || _f === void 0 ? void 0 : _f.description) !== null && _g !== void 0 ? _g : "",
84
+ mappingName: mapping.mappingName,
85
+ mappingDescription: (_b = mapping.description) !== null && _b !== void 0 ? _b : "",
85
86
  };
86
87
  return reportMappingAndMapping;
87
88
  })) !== null && _a !== void 0 ? _a : []);
@@ -95,7 +96,7 @@ const fetchReportMappings = async (setReportMappings, reportId, setIsLoading, ap
95
96
  }
96
97
  };
97
98
  const ReportMappings = ({ report, goBack }) => {
98
- var _a, _b, _c;
99
+ var _a;
99
100
  const apiConfig = ReportsApiConfigContext_1.useReportsApiConfig();
100
101
  const [reportMappingsView, setReportMappingsView] = react_1.useState(ReportMappingsView.REPORTMAPPINGS);
101
102
  const [selectedReportMapping, setSelectedReportMapping] = react_1.useState(undefined);
@@ -106,31 +107,26 @@ const ReportMappings = ({ report, goBack }) => {
106
107
  const [searchValue, setSearchValue] = react_1.useState("");
107
108
  const [reportMappings, setReportMappings] = react_1.useState([]);
108
109
  react_1.useEffect(() => {
109
- var _a;
110
- void fetchReportMappings(setReportMappings, (_a = report.id) !== null && _a !== void 0 ? _a : "", setIsLoading, apiConfig);
110
+ void fetchReportMappings(setReportMappings, report.id, setIsLoading, apiConfig);
111
111
  }, [apiConfig, report.id, setIsLoading]);
112
112
  const refresh = react_1.useCallback(async () => {
113
- var _a;
114
113
  setReportMappingsView(ReportMappingsView.REPORTMAPPINGS);
115
- await fetchReportMappings(setReportMappings, (_a = report.id) !== null && _a !== void 0 ? _a : "", setIsLoading, apiConfig);
114
+ await fetchReportMappings(setReportMappings, report.id, setIsLoading, apiConfig);
116
115
  }, [apiConfig, report.id, setReportMappings]);
117
116
  const addMapping = () => {
118
117
  setReportMappingsView(ReportMappingsView.ADDING);
119
118
  };
120
- const uniqueIModels = react_1.useMemo(() => new Map(reportMappings.map((mapping) => {
121
- var _a;
122
- return [
123
- (_a = mapping.imodelId) !== null && _a !== void 0 ? _a : "",
124
- mapping.iModelName,
125
- ];
126
- })), [reportMappings]);
119
+ const uniqueIModels = react_1.useMemo(() => new Map(reportMappings.map((mapping) => [
120
+ mapping.imodelId,
121
+ mapping.iModelName,
122
+ ])), [reportMappings]);
127
123
  const odataFeedUrl = `${utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl)}/odata/${report.id}`;
128
124
  const filteredReportMappings = react_1.useMemo(() => reportMappings.filter((x) => [x.iModelName, x.mappingName, x.mappingDescription]
129
125
  .join(" ")
130
126
  .toLowerCase()
131
127
  .includes(searchValue.toLowerCase())), [reportMappings, searchValue]);
132
128
  return (react_1.default.createElement(react_1.default.Fragment, null,
133
- react_1.default.createElement(utils_1.WidgetHeader, { title: (_a = report.displayName) !== null && _a !== void 0 ? _a : "", returnFn: goBack }),
129
+ react_1.default.createElement(utils_1.WidgetHeader, { title: report.displayName, returnFn: goBack }),
134
130
  react_1.default.createElement("div", { className: "report-mapping-misc" },
135
131
  react_1.default.createElement(itwinui_react_1.LabeledInput, { label: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:ODataFeedURL"), className: "odata-url-input", readOnly: true, value: odataFeedUrl, svgIcon: react_1.default.createElement(itwinui_react_1.IconButton, { title: ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:Copy"), styleType: "borderless", onClick: async (_) => {
136
132
  await navigator.clipboard.writeText(odataFeedUrl);
@@ -162,12 +158,12 @@ const ReportMappings = ({ report, goBack }) => {
162
158
  width: "16px",
163
159
  height: "16px",
164
160
  } })))) })))))),
165
- react_1.default.createElement(AddMappingsModal_1.default, { show: reportMappingsView === ReportMappingsView.ADDING, reportId: (_b = report.id) !== null && _b !== void 0 ? _b : "", existingMappings: reportMappings, returnFn: refresh }),
166
- react_1.default.createElement(DeleteModal_1.default, { entityName: (_c = selectedReportMapping === null || selectedReportMapping === void 0 ? void 0 : selectedReportMapping.mappingName) !== null && _c !== void 0 ? _c : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
167
- var _a, _b;
168
- const reportingClientApi = new insights_client_1.ReportingClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
161
+ react_1.default.createElement(AddMappingsModal_1.default, { show: reportMappingsView === ReportMappingsView.ADDING, reportId: report.id, existingMappings: reportMappings, returnFn: refresh }),
162
+ react_1.default.createElement(DeleteModal_1.default, { entityName: (_a = selectedReportMapping === null || selectedReportMapping === void 0 ? void 0 : selectedReportMapping.mappingName) !== null && _a !== void 0 ? _a : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
163
+ var _a;
164
+ const reportsClientApi = new insights_client_1.ReportsClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
169
165
  const accessToken = await apiConfig.getAccessToken();
170
- 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 : "");
166
+ await reportsClientApi.deleteReportMapping(accessToken, report.id, (_a = selectedReportMapping === null || selectedReportMapping === void 0 ? void 0 : selectedReportMapping.mappingId) !== null && _a !== void 0 ? _a : "");
171
167
  }, refresh: refresh })));
172
168
  };
173
169
  exports.ReportMappings = ReportMappings;
@@ -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"]}
@@ -53,9 +53,9 @@ const fetchReports = async (setReports, iTwinId, setIsLoading, apiContext) => {
53
53
  if (!iTwinId)
54
54
  return;
55
55
  setIsLoading(true);
56
- const reportingClientApi = new insights_client_1.ReportingClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiContext.baseUrl));
56
+ const reportsClientApi = new insights_client_1.ReportsClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiContext.baseUrl));
57
57
  const accessToken = await apiContext.getAccessToken();
58
- const reports = await reportingClientApi.getReports(accessToken, iTwinId);
58
+ const reports = await reportsClientApi.getReports(accessToken, iTwinId);
59
59
  setReports(reports !== null && reports !== void 0 ? reports : []);
60
60
  }
61
61
  catch (error) {
@@ -110,8 +110,8 @@ const Reports = () => {
110
110
  ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:NoReports"),
111
111
  react_1.default.createElement("div", null,
112
112
  react_1.default.createElement(itwinui_react_1.Button, { onClick: () => addReport(), styleType: "cta" }, ReportsConfigWidget_1.ReportsConfigWidget.localization.getLocalizedString("ReportsConfigWidget:CreateOneReportCTA")))))) : (react_1.default.createElement("div", { className: "reports-list" }, filteredReports.map((report) => {
113
- var _a, _b, _c;
114
- return (react_1.default.createElement(HorizontalTile_1.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: () => {
113
+ var _a, _b;
114
+ return (react_1.default.createElement(HorizontalTile_1.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: () => {
115
115
  setSelectedReport(report);
116
116
  setReportsView(ReportsView.REPORTSMAPPING);
117
117
  }, button: react_1.default.createElement(itwinui_react_1.DropdownMenu, { menuItems: (close) => [
@@ -133,9 +133,9 @@ const Reports = () => {
133
133
  })))),
134
134
  react_1.default.createElement(DeleteModal_1.default, { entityName: (_c = selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.displayName) !== null && _c !== void 0 ? _c : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
135
135
  var _a;
136
- const reportingClientApi = new insights_client_1.ReportingClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
136
+ const reportsClientApi = new insights_client_1.ReportsClient(utils_1.generateUrl(insights_client_1.REPORTING_BASE_PATH, apiConfig.baseUrl));
137
137
  const accessToken = await apiConfig.getAccessToken();
138
- await reportingClientApi.deleteReport(accessToken, (_a = selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.id) !== null && _a !== void 0 ? _a : "");
138
+ await reportsClientApi.deleteReport(accessToken, (_a = selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.id) !== null && _a !== void 0 ? _a : "");
139
139
  }, refresh: refresh })));
140
140
  }
141
141
  };