@itwin/grouping-mapping-widget 0.18.1 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/lib/cjs/formula/FormulaFunctionProvider.js +1 -0
  2. package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -1
  3. package/lib/cjs/grouping-mapping-widget.d.ts +3 -1
  4. package/lib/cjs/grouping-mapping-widget.js +7 -3
  5. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  6. package/lib/cjs/test/GroupingMappingCustomUI.test.js +9 -5
  7. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  8. package/lib/cjs/widget/components/ExtractionLogCustomFilter.d.ts +4 -0
  9. package/lib/cjs/widget/components/ExtractionLogCustomFilter.js +42 -0
  10. package/lib/cjs/widget/components/ExtractionLogCustomFilter.js.map +1 -0
  11. package/lib/cjs/widget/components/ExtractionMessageModal.d.ts +11 -0
  12. package/lib/cjs/widget/components/ExtractionMessageModal.js +87 -0
  13. package/lib/cjs/widget/components/ExtractionMessageModal.js.map +1 -0
  14. package/lib/cjs/widget/components/ExtractionMessageModal.scss +19 -0
  15. package/lib/cjs/widget/components/ExtractionStatusIcon.d.ts +8 -0
  16. package/lib/cjs/widget/components/ExtractionStatusIcon.js +21 -0
  17. package/lib/cjs/widget/components/ExtractionStatusIcon.js.map +1 -0
  18. package/lib/cjs/widget/components/GroupItem.d.ts +2 -2
  19. package/lib/cjs/widget/components/GroupItem.js.map +1 -1
  20. package/lib/cjs/widget/components/GroupMenuActions.d.ts +2 -2
  21. package/lib/cjs/widget/components/GroupMenuActions.js.map +1 -1
  22. package/lib/cjs/widget/components/GroupingMappingContext.d.ts +5 -1
  23. package/lib/cjs/widget/components/GroupingMappingContext.js +10 -3
  24. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
  25. package/lib/cjs/widget/components/Groups.d.ts +16 -0
  26. package/lib/cjs/widget/components/Groups.js +46 -0
  27. package/lib/cjs/widget/components/Groups.js.map +1 -0
  28. package/lib/cjs/widget/components/GroupsView.d.ts +31 -0
  29. package/lib/cjs/widget/components/GroupsView.js +37 -0
  30. package/lib/cjs/widget/components/GroupsView.js.map +1 -0
  31. package/lib/{esm/widget/components/Grouping.scss → cjs/widget/components/GroupsView.scss} +4 -8
  32. package/lib/cjs/widget/components/GroupsVisualization.d.ts +2 -2
  33. package/lib/cjs/widget/components/GroupsVisualization.js +21 -23
  34. package/lib/cjs/widget/components/GroupsVisualization.js.map +1 -1
  35. package/lib/cjs/widget/components/Mappings.js +2 -2
  36. package/lib/cjs/widget/components/Mappings.js.map +1 -1
  37. package/lib/cjs/widget/components/MappingsView.d.ts +7 -1
  38. package/lib/cjs/widget/components/MappingsView.js +12 -3
  39. package/lib/cjs/widget/components/MappingsView.js.map +1 -1
  40. package/lib/cjs/widget/components/StatusIcon.d.ts +1 -0
  41. package/lib/cjs/widget/components/StatusIcon.js +4 -3
  42. package/lib/cjs/widget/components/StatusIcon.js.map +1 -1
  43. package/lib/cjs/widget/components/context/ExtractionClientContext.d.ts +8 -0
  44. package/lib/cjs/widget/components/context/ExtractionClientContext.js +33 -0
  45. package/lib/cjs/widget/components/context/ExtractionClientContext.js.map +1 -0
  46. package/lib/cjs/widget/components/hooks/useGroupsOperations.d.ts +20 -0
  47. package/lib/cjs/widget/components/hooks/useGroupsOperations.js +67 -0
  48. package/lib/cjs/widget/components/hooks/useGroupsOperations.js.map +1 -0
  49. package/lib/cjs/widget/components/hooks/useMappingsOperations.d.ts +14 -0
  50. package/lib/cjs/widget/components/hooks/useMappingsOperations.js +59 -1
  51. package/lib/cjs/widget/components/hooks/useMappingsOperations.js.map +1 -1
  52. package/lib/cjs/widget/components/utils.d.ts +1 -0
  53. package/lib/cjs/widget/components/utils.js +6 -1
  54. package/lib/cjs/widget/components/utils.js.map +1 -1
  55. package/lib/cjs/widget/components/viewerUtils.js +2 -5
  56. package/lib/cjs/widget/components/viewerUtils.js.map +1 -1
  57. package/lib/esm/formula/FormulaFunctionProvider.js +1 -0
  58. package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -1
  59. package/lib/esm/grouping-mapping-widget.d.ts +3 -1
  60. package/lib/esm/grouping-mapping-widget.js +3 -1
  61. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  62. package/lib/esm/test/GroupingMappingCustomUI.test.js +10 -6
  63. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  64. package/lib/esm/widget/components/ExtractionLogCustomFilter.d.ts +4 -0
  65. package/lib/esm/widget/components/ExtractionLogCustomFilter.js +19 -0
  66. package/lib/esm/widget/components/ExtractionLogCustomFilter.js.map +1 -0
  67. package/lib/esm/widget/components/ExtractionMessageModal.d.ts +11 -0
  68. package/lib/esm/widget/components/ExtractionMessageModal.js +64 -0
  69. package/lib/esm/widget/components/ExtractionMessageModal.js.map +1 -0
  70. package/lib/esm/widget/components/ExtractionMessageModal.scss +19 -0
  71. package/lib/esm/widget/components/ExtractionStatusIcon.d.ts +8 -0
  72. package/lib/esm/widget/components/ExtractionStatusIcon.js +14 -0
  73. package/lib/esm/widget/components/ExtractionStatusIcon.js.map +1 -0
  74. package/lib/esm/widget/components/GroupItem.d.ts +2 -2
  75. package/lib/esm/widget/components/GroupItem.js.map +1 -1
  76. package/lib/esm/widget/components/GroupMenuActions.d.ts +2 -2
  77. package/lib/esm/widget/components/GroupMenuActions.js.map +1 -1
  78. package/lib/esm/widget/components/GroupingMappingContext.d.ts +5 -1
  79. package/lib/esm/widget/components/GroupingMappingContext.js +10 -3
  80. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
  81. package/lib/esm/widget/components/Groups.d.ts +16 -0
  82. package/lib/esm/widget/components/Groups.js +23 -0
  83. package/lib/esm/widget/components/Groups.js.map +1 -0
  84. package/lib/esm/widget/components/GroupsView.d.ts +31 -0
  85. package/lib/esm/widget/components/GroupsView.js +30 -0
  86. package/lib/esm/widget/components/GroupsView.js.map +1 -0
  87. package/lib/{cjs/widget/components/Grouping.scss → esm/widget/components/GroupsView.scss} +4 -8
  88. package/lib/esm/widget/components/GroupsVisualization.d.ts +2 -2
  89. package/lib/esm/widget/components/GroupsVisualization.js +22 -24
  90. package/lib/esm/widget/components/GroupsVisualization.js.map +1 -1
  91. package/lib/esm/widget/components/Mappings.js +2 -2
  92. package/lib/esm/widget/components/Mappings.js.map +1 -1
  93. package/lib/esm/widget/components/MappingsView.d.ts +7 -1
  94. package/lib/esm/widget/components/MappingsView.js +12 -3
  95. package/lib/esm/widget/components/MappingsView.js.map +1 -1
  96. package/lib/esm/widget/components/StatusIcon.d.ts +1 -0
  97. package/lib/esm/widget/components/StatusIcon.js +5 -4
  98. package/lib/esm/widget/components/StatusIcon.js.map +1 -1
  99. package/lib/esm/widget/components/context/ExtractionClientContext.d.ts +8 -0
  100. package/lib/esm/widget/components/context/ExtractionClientContext.js +27 -0
  101. package/lib/esm/widget/components/context/ExtractionClientContext.js.map +1 -0
  102. package/lib/esm/widget/components/hooks/useGroupsOperations.d.ts +20 -0
  103. package/lib/esm/widget/components/hooks/useGroupsOperations.js +63 -0
  104. package/lib/esm/widget/components/hooks/useGroupsOperations.js.map +1 -0
  105. package/lib/esm/widget/components/hooks/useMappingsOperations.d.ts +14 -0
  106. package/lib/esm/widget/components/hooks/useMappingsOperations.js +59 -1
  107. package/lib/esm/widget/components/hooks/useMappingsOperations.js.map +1 -1
  108. package/lib/esm/widget/components/utils.d.ts +1 -0
  109. package/lib/esm/widget/components/utils.js +4 -0
  110. package/lib/esm/widget/components/utils.js.map +1 -1
  111. package/lib/esm/widget/components/viewerUtils.js +3 -6
  112. package/lib/esm/widget/components/viewerUtils.js.map +1 -1
  113. package/package.json +1 -1
  114. package/lib/cjs/widget/components/Grouping.d.ts +0 -22
  115. package/lib/cjs/widget/components/Grouping.js +0 -96
  116. package/lib/cjs/widget/components/Grouping.js.map +0 -1
  117. package/lib/esm/widget/components/Grouping.d.ts +0 -22
  118. package/lib/esm/widget/components/Grouping.js +0 -70
  119. package/lib/esm/widget/components/Grouping.js.map +0 -1
@@ -33,13 +33,13 @@ const itwinui_react_1 = require("@itwin/itwinui-react");
33
33
  const Mappings = (props) => {
34
34
  const groupingMappingApiConfig = (0, GroupingApiConfigContext_1.useGroupingMappingApiConfig)();
35
35
  const mappingClient = (0, MappingClientContext_1.useMappingClient)();
36
- const { mappings, isLoading, refresh, toggleExtraction, onDelete, setShowImportModal, showImportModal, setShowDeleteModal, showDeleteModal, isTogglingExtraction, errorMessage, setErrorMessage, } = (0, useMappingsOperations_1.useMappingsOperations)({ ...groupingMappingApiConfig, mappingClient });
36
+ const { mappings, isLoading, extractionIconData, showExtractionMessageModal, extractionMessageData, setShowExtractionMessageModal, refresh, toggleExtraction, onDelete, setShowImportModal, showImportModal, setShowDeleteModal, showDeleteModal, isTogglingExtraction, errorMessage, setErrorMessage, } = (0, useMappingsOperations_1.useMappingsOperations)({ ...groupingMappingApiConfig, mappingClient });
37
37
  const renderAlert = (0, react_1.useCallback)(() => {
38
38
  if (!errorMessage)
39
39
  return;
40
40
  return (react_1.default.createElement(itwinui_react_1.Alert, { type: "negative", onClose: () => setErrorMessage(undefined) }, errorMessage));
41
41
  }, [errorMessage, setErrorMessage]);
42
- return (react_1.default.createElement(MappingsView_1.MappingsView, { mappings: mappings, isLoading: isLoading, onRefresh: refresh, onToggleExtraction: toggleExtraction, onDelete: onDelete, showImportModal: showImportModal, setShowImportModal: setShowImportModal, showDeleteModal: showDeleteModal, setShowDeleteModal: setShowDeleteModal, isTogglingExtraction: isTogglingExtraction, alert: renderAlert(), ...props }));
42
+ return (react_1.default.createElement(MappingsView_1.MappingsView, { mappings: mappings, isLoading: isLoading, extractionIconData: extractionIconData, showExtractionMessageModal: showExtractionMessageModal, extractionMessageData: extractionMessageData, setShowExtractionMessageModal: setShowExtractionMessageModal, onRefresh: refresh, onToggleExtraction: toggleExtraction, onDelete: onDelete, showImportModal: showImportModal, setShowImportModal: setShowImportModal, showDeleteModal: showDeleteModal, setShowDeleteModal: setShowDeleteModal, isTogglingExtraction: isTogglingExtraction, alert: renderAlert(), ...props }));
43
43
  };
44
44
  exports.Mappings = Mappings;
45
45
  //# sourceMappingURL=Mappings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Mappings.js","sourceRoot":"","sources":["../../../../src/widget/components/Mappings.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,+CAA2C;AAC3C,yEAAkE;AAElE,iFAAiF;AAGjF,iDAA8C;AAC9C,yEAAsE;AACtE,wDAA6C;AAWtC,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAE,EAAE;IAC/C,MAAM,wBAAwB,GAAG,IAAA,sDAA2B,GAAE,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAA,uCAAgB,GAAE,CAAC;IACzC,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,eAAe,GAChB,GAAG,IAAA,6CAAqB,EAAC,EAAE,GAAG,wBAAwB,EAAE,aAAa,EAAE,CAAC,CAAC;IAE1E,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACnC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,OAAO,CACL,8BAAC,qBAAK,IAAC,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,IAC7D,YAAY,CACP,CACT,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;IAEpC,OAAO,CACL,8BAAC,2BAAY,IACX,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,OAAO,EAClB,kBAAkB,EAAE,gBAAgB,EACpC,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,oBAAoB,EAAE,oBAAoB,EAC1C,KAAK,EAAE,WAAW,EAAE,KAChB,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC;AA3CW,QAAA,QAAQ,YA2CnB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React, { useCallback } from \"react\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport type { Mapping } from \"@itwin/insights-client\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport type { mappingViewDefaultDisplayStrings } from \"./MappingsView\";\nimport { MappingsView } from \"./MappingsView\";\nimport { useMappingsOperations } from \"./hooks/useMappingsOperations\";\nimport { Alert } from \"@itwin/itwinui-react\";\n\nexport type IMappingTyped = CreateTypeFromInterface<Mapping>;\n\nexport interface MappingsProps {\n onClickAddMapping?: () => void;\n onClickMappingTitle?: (mapping: Mapping) => void;\n onClickMappingModify?: (mapping: Mapping) => void;\n displayStrings?: Partial<typeof mappingViewDefaultDisplayStrings>;\n}\n\nexport const Mappings = (props: MappingsProps) => {\n const groupingMappingApiConfig = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const {\n mappings,\n isLoading,\n refresh,\n toggleExtraction,\n onDelete,\n setShowImportModal,\n showImportModal,\n setShowDeleteModal,\n showDeleteModal,\n isTogglingExtraction,\n errorMessage,\n setErrorMessage,\n } = useMappingsOperations({ ...groupingMappingApiConfig, mappingClient });\n\n const renderAlert = useCallback(() => {\n if (!errorMessage) return;\n return (\n <Alert type=\"negative\" onClose={() => setErrorMessage(undefined)}>\n {errorMessage}\n </Alert>\n );\n }, [errorMessage, setErrorMessage]);\n\n return (\n <MappingsView\n mappings={mappings}\n isLoading={isLoading}\n onRefresh={refresh}\n onToggleExtraction={toggleExtraction}\n onDelete={onDelete}\n showImportModal={showImportModal}\n setShowImportModal={setShowImportModal}\n showDeleteModal={showDeleteModal}\n setShowDeleteModal={setShowDeleteModal}\n isTogglingExtraction={isTogglingExtraction}\n alert={renderAlert()}\n {...props}\n />\n );\n};\n"]}
1
+ {"version":3,"file":"Mappings.js","sourceRoot":"","sources":["../../../../src/widget/components/Mappings.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,+CAA2C;AAC3C,yEAAkE;AAElE,iFAAiF;AAGjF,iDAA8C;AAC9C,yEAAsE;AACtE,wDAA6C;AAWtC,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAE,EAAE;IAC/C,MAAM,wBAAwB,GAAG,IAAA,sDAA2B,GAAE,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAA,uCAAgB,GAAE,CAAC;IACzC,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,EAC7B,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,eAAe,GAChB,GAAG,IAAA,6CAAqB,EAAC,EAAE,GAAG,wBAAwB,EAAE,aAAa,EAAE,CAAC,CAAC;IAE1E,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACnC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,OAAO,CACL,8BAAC,qBAAK,IAAC,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,IAC7D,YAAY,CACP,CACT,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;IAEpC,OAAO,CACL,8BAAC,2BAAY,IACX,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,0BAA0B,EAAE,0BAA0B,EACtD,qBAAqB,EAAE,qBAAqB,EAC5C,6BAA6B,EAAE,6BAA6B,EAC5D,SAAS,EAAE,OAAO,EAClB,kBAAkB,EAAE,gBAAgB,EACpC,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,oBAAoB,EAAE,oBAAoB,EAC1C,KAAK,EAAE,WAAW,EAAE,KAChB,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC;AAnDW,QAAA,QAAQ,YAmDnB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React, { useCallback } from \"react\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport type { Mapping } from \"@itwin/insights-client\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport type { mappingViewDefaultDisplayStrings } from \"./MappingsView\";\nimport { MappingsView } from \"./MappingsView\";\nimport { useMappingsOperations } from \"./hooks/useMappingsOperations\";\nimport { Alert } from \"@itwin/itwinui-react\";\n\nexport type IMappingTyped = CreateTypeFromInterface<Mapping>;\n\nexport interface MappingsProps {\n onClickAddMapping?: () => void;\n onClickMappingTitle?: (mapping: Mapping) => void;\n onClickMappingModify?: (mapping: Mapping) => void;\n displayStrings?: Partial<typeof mappingViewDefaultDisplayStrings>;\n}\n\nexport const Mappings = (props: MappingsProps) => {\n const groupingMappingApiConfig = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const {\n mappings,\n isLoading,\n extractionIconData,\n showExtractionMessageModal,\n extractionMessageData,\n setShowExtractionMessageModal,\n refresh,\n toggleExtraction,\n onDelete,\n setShowImportModal,\n showImportModal,\n setShowDeleteModal,\n showDeleteModal,\n isTogglingExtraction,\n errorMessage,\n setErrorMessage,\n } = useMappingsOperations({ ...groupingMappingApiConfig, mappingClient });\n\n const renderAlert = useCallback(() => {\n if (!errorMessage) return;\n return (\n <Alert type=\"negative\" onClose={() => setErrorMessage(undefined)}>\n {errorMessage}\n </Alert>\n );\n }, [errorMessage, setErrorMessage]);\n\n return (\n <MappingsView\n mappings={mappings}\n isLoading={isLoading}\n extractionIconData={extractionIconData}\n showExtractionMessageModal={showExtractionMessageModal}\n extractionMessageData={extractionMessageData}\n setShowExtractionMessageModal={setShowExtractionMessageModal}\n onRefresh={refresh}\n onToggleExtraction={toggleExtraction}\n onDelete={onDelete}\n showImportModal={showImportModal}\n setShowImportModal={setShowImportModal}\n showDeleteModal={showDeleteModal}\n setShowDeleteModal={setShowDeleteModal}\n isTogglingExtraction={isTogglingExtraction}\n alert={renderAlert()}\n {...props}\n />\n );\n};\n"]}
@@ -2,6 +2,8 @@ import React from "react";
2
2
  import type { Alert } from "@itwin/itwinui-react";
3
3
  import "./MappingsView.scss";
4
4
  import type { Mapping } from "@itwin/insights-client";
5
+ import type { ExtractionMessageData } from "./hooks/useMappingsOperations";
6
+ import type { ExtractionIconData } from "./hooks/useMappingsOperations";
5
7
  export declare const mappingViewDefaultDisplayStrings: {
6
8
  mappings: string;
7
9
  iTwins: string;
@@ -15,6 +17,10 @@ export declare const mappingViewDefaultDisplayStrings: {
15
17
  export interface MappingsViewProps {
16
18
  mappings: Mapping[];
17
19
  isLoading: boolean;
20
+ extractionIconData: ExtractionIconData;
21
+ showExtractionMessageModal: boolean;
22
+ extractionMessageData: ExtractionMessageData[];
23
+ setShowExtractionMessageModal: (show: boolean) => void;
18
24
  isTogglingExtraction: boolean;
19
25
  onRefresh: () => Promise<void>;
20
26
  onToggleExtraction: (mapping: Mapping) => Promise<void>;
@@ -29,5 +35,5 @@ export interface MappingsViewProps {
29
35
  onClickMappingModify?: (mapping: Mapping) => void;
30
36
  alert?: React.ReactElement<typeof Alert>;
31
37
  }
32
- export declare const MappingsView: ({ mappings, isLoading, isTogglingExtraction, onRefresh, onToggleExtraction, onDelete, showDeleteModal, setShowDeleteModal, displayStrings: userDisplayStrings, showImportModal, setShowImportModal, onClickAddMapping, onClickMappingTitle, onClickMappingModify, alert, }: MappingsViewProps) => JSX.Element;
38
+ export declare const MappingsView: ({ mappings, isLoading, extractionIconData, showExtractionMessageModal, extractionMessageData, setShowExtractionMessageModal, isTogglingExtraction, onRefresh, onToggleExtraction, onDelete, showDeleteModal, setShowDeleteModal, displayStrings: userDisplayStrings, showImportModal, setShowImportModal, onClickAddMapping, onClickMappingTitle, onClickMappingModify, alert, }: MappingsViewProps) => JSX.Element;
33
39
  //# sourceMappingURL=MappingsView.d.ts.map
@@ -18,6 +18,8 @@ const MappingImportWizardModal_1 = require("./MappingImportWizardModal");
18
18
  const HorizontalTile_1 = require("./HorizontalTile");
19
19
  const BlockingOverlay_1 = require("./BlockingOverlay");
20
20
  const MappingViewActionGroup_1 = require("./MappingViewActionGroup");
21
+ const ExtractionStatusIcon_1 = require("./ExtractionStatusIcon");
22
+ const ExtractionMessageModal_1 = require("./ExtractionMessageModal");
21
23
  exports.mappingViewDefaultDisplayStrings = {
22
24
  mappings: "Mappings",
23
25
  iTwins: "iTwins",
@@ -28,7 +30,7 @@ exports.mappingViewDefaultDisplayStrings = {
28
30
  iModelName: "Name",
29
31
  iModelDescription: "Description",
30
32
  };
31
- const MappingsView = ({ mappings, isLoading, isTogglingExtraction, onRefresh, onToggleExtraction, onDelete, showDeleteModal, setShowDeleteModal, displayStrings: userDisplayStrings, showImportModal, setShowImportModal, onClickAddMapping, onClickMappingTitle, onClickMappingModify, alert, }) => {
33
+ const MappingsView = ({ mappings, isLoading, extractionIconData, showExtractionMessageModal, extractionMessageData, setShowExtractionMessageModal, isTogglingExtraction, onRefresh, onToggleExtraction, onDelete, showDeleteModal, setShowDeleteModal, displayStrings: userDisplayStrings, showImportModal, setShowImportModal, onClickAddMapping, onClickMappingTitle, onClickMappingModify, alert, }) => {
32
34
  const displayStrings = react_1.default.useMemo(() => ({ ...exports.mappingViewDefaultDisplayStrings, ...userDisplayStrings }), [userDisplayStrings]);
33
35
  return (react_1.default.createElement(react_1.default.Fragment, null,
34
36
  react_1.default.createElement(BlockingOverlay_1.BlockingOverlay, { isVisible: isTogglingExtraction }),
@@ -39,11 +41,18 @@ const MappingsView = ({ mappings, isLoading, isTogglingExtraction, onRefresh, on
39
41
  react_1.default.createElement(itwinui_react_1.Button, { startIcon: react_1.default.createElement(itwinui_icons_react_1.SvgAdd, null), onClick: onClickAddMapping, styleType: "high-visibility", title: "New Mapping" }, "New"),
40
42
  showImportModal !== undefined && setShowImportModal && react_1.default.createElement(itwinui_react_1.IconButton, { title: `Import ${displayStrings.mappings}`, onClick: () => setShowImportModal(true) },
41
43
  react_1.default.createElement(itwinui_icons_react_1.SvgImport, null))),
42
- react_1.default.createElement(itwinui_react_1.IconButton, { title: "Refresh", onClick: onRefresh, disabled: isLoading, styleType: 'borderless' },
43
- react_1.default.createElement(itwinui_icons_react_1.SvgRefresh, null))),
44
+ react_1.default.createElement("div", { className: "gmw-button-spacing" },
45
+ react_1.default.createElement(ExtractionStatusIcon_1.ExtractionStatusIcon, { iconStatus: extractionIconData.iconStatus, onClick: () => {
46
+ if (extractionIconData.iconStatus === "negative") {
47
+ setShowExtractionMessageModal(true);
48
+ }
49
+ }, iconMessage: extractionIconData.iconMessage }),
50
+ react_1.default.createElement(itwinui_react_1.IconButton, { title: "Refresh", onClick: onRefresh, disabled: isLoading, styleType: 'borderless' },
51
+ react_1.default.createElement(itwinui_icons_react_1.SvgRefresh, null)))),
44
52
  alert,
45
53
  react_1.default.createElement("div", { className: 'gmw-mappings-border' }),
46
54
  isLoading ? (react_1.default.createElement(utils_1.LoadingOverlay, null)) : mappings.length === 0 ? (react_1.default.createElement(utils_1.EmptyMessage, { message: `No ${displayStrings.mappings} available.` })) : (react_1.default.createElement("div", { className: "gmw-mappings-list" }, mappings.map((mapping) => (react_1.default.createElement(HorizontalTile_1.HorizontalTile, { key: mapping.id, title: mapping.mappingName ? mapping.mappingName : "Untitled", subText: mapping.description ?? "", subtextToolTip: mapping.description ?? "", titleTooltip: mapping.mappingName, onClickTitle: onClickMappingTitle ? () => onClickMappingTitle(mapping) : undefined, actionGroup: react_1.default.createElement(MappingViewActionGroup_1.MappingUIActionGroup, { mapping: mapping, onToggleExtraction: onToggleExtraction, onRefresh: onRefresh, onClickMappingModify: onClickMappingModify, setShowDeleteModal: setShowDeleteModal }) })))))),
55
+ react_1.default.createElement(ExtractionMessageModal_1.ExtractionMessageModal, { isOpen: showExtractionMessageModal, onClose: () => setShowExtractionMessageModal(false), extractionMessageData: extractionMessageData, timestamp: extractionMessageData.length === 0 ? "" : extractionMessageData[0].date }),
47
56
  showDeleteModal &&
48
57
  react_1.default.createElement(DeleteModal_1.default, { entityName: showDeleteModal?.mappingName, onClose: () => setShowDeleteModal(undefined), onDelete: async () => {
49
58
  await onDelete(showDeleteModal);
@@ -1 +1 @@
1
- {"version":3,"file":"MappingsView.js","sourceRoot":"","sources":["../../../../src/widget/components/MappingsView.tsx"],"names":[],"mappings":";;;;;;AAAA;;;+FAG+F;AAC/F,kDAA0B;AAI1B,wDAG8B;AAC9B,oEAIoC;AACpC,mCAGiB;AACjB,+BAA6B;AAC7B,gEAAwC;AACxC,yEAAsE;AACtE,qDAAkD;AAElD,uDAAoD;AACpD,qEAAgE;AAEnD,QAAA,gCAAgC,GAAG;IAC9C,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,MAAM;IACjB,WAAW,EAAE,QAAQ;IACrB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,MAAM;IAClB,iBAAiB,EAAE,aAAa;CACjC,CAAC;AAoBK,MAAM,YAAY,GAAG,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,oBAAoB,EACpB,SAAS,EACT,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,cAAc,EAAE,kBAAkB,EAClC,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,GACa,EAAE,EAAE;IACtB,MAAM,cAAc,GAAG,eAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,wCAAgC,EAAE,GAAG,kBAAkB,EAAE,CAAC,EACtE,CAAC,kBAAkB,CAAC,CACrB,CAAC;IAEF,OAAO,CACL;QACE,8BAAC,iCAAe,IAAC,SAAS,EAAE,oBAAoB,GAAI;QACpD,uCAAK,SAAS,EAAC,6BAA6B;YAC1C,uCAAK,SAAS,EAAC,mBAAmB;gBAChC,uCAAK,SAAS,EAAC,oBAAoB;oBAChC,iBAAiB;wBAChB,8BAAC,sBAAM,IACL,SAAS,EAAE,8BAAC,4BAAM,OAAG,EACrB,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAC,iBAAiB,EAC3B,KAAK,EAAC,aAAa,UAGZ;oBAEV,eAAe,KAAK,SAAS,IAAI,kBAAkB,IAAI,8BAAC,0BAAU,IACjE,KAAK,EAAE,UAAU,cAAc,CAAC,QAAQ,EAAE,EAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;wBAEvC,8BAAC,+BAAS,OAAG,CACF,CAET;gBACN,8BAAC,0BAAU,IACT,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAC,YAAY;oBAEtB,8BAAC,gCAAU,OAAG,CACH,CACT;YACL,KAAK;YACN,uCAAK,SAAS,EAAC,qBAAqB,GAAG;YACtC,SAAS,CAAC,CAAC,CAAC,CACX,8BAAC,sBAAc,OAAG,CACnB,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1B,8BAAC,oBAAY,IAAC,OAAO,EAAE,MAAM,cAAc,CAAC,QAAQ,aAAa,GAAI,CACtE,CAAC,CAAC,CAAC,CACF,uCAAK,SAAS,EAAC,mBAAmB,IAC/B,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,8BAAC,+BAAc,IACb,GAAG,EAAE,OAAO,CAAC,EAAE,EACf,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,EAC7D,OAAO,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,EAClC,cAAc,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,EACzC,YAAY,EAAE,OAAO,CAAC,WAAW,EACjC,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAClF,WAAW,EACT,8BAAC,6CAAoB,IACnB,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,kBAAkB,EACtC,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,oBAAoB,EAC1C,kBAAkB,EAAE,kBAAkB,GACtC,GAEJ,CACH,CAAC,CACE,CACP,CACG;QACL,eAAe;YACd,8BAAC,qBAAW,IACV,UAAU,EAAE,eAAe,EAAE,WAAW,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAC5C,QAAQ,EAAE,KAAK,IAAI,EAAE;oBACnB,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAClC,CAAC,EACD,OAAO,EAAE,SAAS,GAClB;QAEH,eAAe,IAAI,kBAAkB,IAAI,8BAAC,mDAAwB,IACjE,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,SAAS,EACnB,cAAc,EAAE,cAAc,GAC9B,CACD,CACJ,CAAC;AACJ,CAAC,CAAC;AAvGW,QAAA,YAAY,gBAuGvB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport type {\n Alert,\n} from \"@itwin/itwinui-react\";\nimport {\n Button,\n IconButton,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgAdd,\n SvgImport,\n SvgRefresh,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n EmptyMessage,\n LoadingOverlay,\n} from \"./utils\";\nimport \"./MappingsView.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport { MappingImportWizardModal } from \"./MappingImportWizardModal\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport type { Mapping } from \"@itwin/insights-client\";\nimport { BlockingOverlay } from \"./BlockingOverlay\";\nimport { MappingUIActionGroup } from \"./MappingViewActionGroup\";\n\nexport const mappingViewDefaultDisplayStrings = {\n mappings: \"Mappings\",\n iTwins: \"iTwins\",\n iTwinNumber: \"Number\",\n iTwinName: \"Name\",\n iTwinStatus: \"Status\",\n iModels: \"iModels\",\n iModelName: \"Name\",\n iModelDescription: \"Description\",\n};\n\nexport interface MappingsViewProps {\n mappings: Mapping[];\n isLoading: boolean;\n isTogglingExtraction: boolean;\n onRefresh: () => Promise<void>;\n onToggleExtraction: (mapping: Mapping) => Promise<void>;\n onDelete: (mapping: Mapping) => Promise<void>;\n showDeleteModal: Mapping | undefined;\n setShowDeleteModal: (mapping?: Mapping) => void;\n displayStrings?: Partial<typeof mappingViewDefaultDisplayStrings>;\n showImportModal?: boolean;\n setShowImportModal?: (show: boolean) => void;\n onClickAddMapping?: () => void;\n onClickMappingTitle?: (mapping: Mapping) => void;\n onClickMappingModify?: (mapping: Mapping) => void;\n alert?: React.ReactElement<typeof Alert>;\n}\n\nexport const MappingsView = ({\n mappings,\n isLoading,\n isTogglingExtraction,\n onRefresh,\n onToggleExtraction,\n onDelete,\n showDeleteModal,\n setShowDeleteModal,\n displayStrings: userDisplayStrings,\n showImportModal,\n setShowImportModal,\n onClickAddMapping,\n onClickMappingTitle,\n onClickMappingModify,\n alert,\n}: MappingsViewProps) => {\n const displayStrings = React.useMemo(\n () => ({ ...mappingViewDefaultDisplayStrings, ...userDisplayStrings }),\n [userDisplayStrings]\n );\n\n return (\n <>\n <BlockingOverlay isVisible={isTogglingExtraction} />\n <div className=\"gmw-mappings-view-container\">\n <div className=\"gmw-table-toolbar\">\n <div className=\"gmw-button-spacing\">\n {onClickAddMapping &&\n <Button\n startIcon={<SvgAdd />}\n onClick={onClickAddMapping}\n styleType=\"high-visibility\"\n title=\"New Mapping\"\n >\n New\n </Button>\n }\n {showImportModal !== undefined && setShowImportModal && <IconButton\n title={`Import ${displayStrings.mappings}`}\n onClick={() => setShowImportModal(true)}\n >\n <SvgImport />\n </IconButton>\n }\n </div>\n <IconButton\n title=\"Refresh\"\n onClick={onRefresh}\n disabled={isLoading}\n styleType='borderless'\n >\n <SvgRefresh />\n </IconButton>\n </div>\n {alert}\n <div className='gmw-mappings-border' />\n {isLoading ? (\n <LoadingOverlay />\n ) : mappings.length === 0 ? (\n <EmptyMessage message={`No ${displayStrings.mappings} available.`} />\n ) : (\n <div className=\"gmw-mappings-list\">\n {mappings.map((mapping) => (\n <HorizontalTile\n key={mapping.id}\n title={mapping.mappingName ? mapping.mappingName : \"Untitled\"}\n subText={mapping.description ?? \"\"}\n subtextToolTip={mapping.description ?? \"\"}\n titleTooltip={mapping.mappingName}\n onClickTitle={onClickMappingTitle ? () => onClickMappingTitle(mapping) : undefined}\n actionGroup={\n <MappingUIActionGroup\n mapping={mapping}\n onToggleExtraction={onToggleExtraction}\n onRefresh={onRefresh}\n onClickMappingModify={onClickMappingModify}\n setShowDeleteModal={setShowDeleteModal}\n />\n }\n />\n ))}\n </div>\n )}\n </div>\n {showDeleteModal &&\n <DeleteModal\n entityName={showDeleteModal?.mappingName}\n onClose={() => setShowDeleteModal(undefined)}\n onDelete={async () => {\n await onDelete(showDeleteModal);\n }}\n refresh={onRefresh}\n />\n }\n {showImportModal && setShowImportModal && <MappingImportWizardModal\n show={showImportModal}\n setShow={setShowImportModal}\n onFinish={onRefresh}\n displayStrings={displayStrings}\n />}\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"MappingsView.js","sourceRoot":"","sources":["../../../../src/widget/components/MappingsView.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport type {\n Alert,\n} from \"@itwin/itwinui-react\";\nimport {\n Button,\n IconButton,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgAdd,\n SvgImport,\n SvgRefresh,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n EmptyMessage,\n LoadingOverlay,\n} from \"./utils\";\nimport \"./MappingsView.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport { MappingImportWizardModal } from \"./MappingImportWizardModal\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport type { Mapping } from \"@itwin/insights-client\";\nimport { BlockingOverlay } from \"./BlockingOverlay\";\nimport { MappingUIActionGroup } from \"./MappingViewActionGroup\";\nimport type { ExtractionMessageData } from \"./hooks/useMappingsOperations\";\nimport type { ExtractionIconData } from \"./hooks/useMappingsOperations\";\nimport { ExtractionStatusIcon } from \"./ExtractionStatusIcon\";\nimport { ExtractionMessageModal } from \"./ExtractionMessageModal\";\n\nexport const mappingViewDefaultDisplayStrings = {\n mappings: \"Mappings\",\n iTwins: \"iTwins\",\n iTwinNumber: \"Number\",\n iTwinName: \"Name\",\n iTwinStatus: \"Status\",\n iModels: \"iModels\",\n iModelName: \"Name\",\n iModelDescription: \"Description\",\n};\n\nexport interface MappingsViewProps {\n mappings: Mapping[];\n isLoading: boolean;\n extractionIconData: ExtractionIconData;\n showExtractionMessageModal: boolean;\n extractionMessageData: ExtractionMessageData[];\n setShowExtractionMessageModal: (show: boolean) => void;\n isTogglingExtraction: boolean;\n onRefresh: () => Promise<void>;\n onToggleExtraction: (mapping: Mapping) => Promise<void>;\n onDelete: (mapping: Mapping) => Promise<void>;\n showDeleteModal: Mapping | undefined;\n setShowDeleteModal: (mapping?: Mapping) => void;\n displayStrings?: Partial<typeof mappingViewDefaultDisplayStrings>;\n showImportModal?: boolean;\n setShowImportModal?: (show: boolean) => void;\n onClickAddMapping?: () => void;\n onClickMappingTitle?: (mapping: Mapping) => void;\n onClickMappingModify?: (mapping: Mapping) => void;\n alert?: React.ReactElement<typeof Alert>;\n}\n\nexport const MappingsView = ({\n mappings,\n isLoading,\n extractionIconData,\n showExtractionMessageModal,\n extractionMessageData,\n setShowExtractionMessageModal,\n isTogglingExtraction,\n onRefresh,\n onToggleExtraction,\n onDelete,\n showDeleteModal,\n setShowDeleteModal,\n displayStrings: userDisplayStrings,\n showImportModal,\n setShowImportModal,\n onClickAddMapping,\n onClickMappingTitle,\n onClickMappingModify,\n alert,\n}: MappingsViewProps) => {\n const displayStrings = React.useMemo(\n () => ({ ...mappingViewDefaultDisplayStrings, ...userDisplayStrings }),\n [userDisplayStrings]\n );\n\n return (\n <>\n <BlockingOverlay isVisible={isTogglingExtraction} />\n <div className=\"gmw-mappings-view-container\">\n <div className=\"gmw-table-toolbar\">\n <div className=\"gmw-button-spacing\">\n {onClickAddMapping &&\n <Button\n startIcon={<SvgAdd />}\n onClick={onClickAddMapping}\n styleType=\"high-visibility\"\n title=\"New Mapping\"\n >\n New\n </Button>\n }\n {showImportModal !== undefined && setShowImportModal && <IconButton\n title={`Import ${displayStrings.mappings}`}\n onClick={() => setShowImportModal(true)}\n >\n <SvgImport />\n </IconButton>\n }\n </div>\n <div className=\"gmw-button-spacing\">\n <ExtractionStatusIcon\n iconStatus={extractionIconData.iconStatus}\n onClick={() => {\n if (extractionIconData.iconStatus === \"negative\") {\n setShowExtractionMessageModal(true);\n }\n }}\n iconMessage={extractionIconData.iconMessage}\n />\n <IconButton\n title=\"Refresh\"\n onClick={onRefresh}\n disabled={isLoading}\n styleType='borderless'\n >\n <SvgRefresh />\n </IconButton>\n </div>\n </div>\n {alert}\n <div className='gmw-mappings-border' />\n {isLoading ? (\n <LoadingOverlay />\n ) : mappings.length === 0 ? (\n <EmptyMessage message={`No ${displayStrings.mappings} available.`} />\n ) : (\n <div className=\"gmw-mappings-list\">\n {mappings.map((mapping) => (\n <HorizontalTile\n key={mapping.id}\n title={mapping.mappingName ? mapping.mappingName : \"Untitled\"}\n subText={mapping.description ?? \"\"}\n subtextToolTip={mapping.description ?? \"\"}\n titleTooltip={mapping.mappingName}\n onClickTitle={onClickMappingTitle ? () => onClickMappingTitle(mapping) : undefined}\n actionGroup={\n <MappingUIActionGroup\n mapping={mapping}\n onToggleExtraction={onToggleExtraction}\n onRefresh={onRefresh}\n onClickMappingModify={onClickMappingModify}\n setShowDeleteModal={setShowDeleteModal}\n />\n }\n />\n ))}\n </div>\n )}\n </div>\n <ExtractionMessageModal\n isOpen={showExtractionMessageModal}\n onClose={() => setShowExtractionMessageModal(false)}\n extractionMessageData={extractionMessageData}\n timestamp={extractionMessageData.length === 0 ? \"\" : extractionMessageData[0].date}\n />\n {showDeleteModal &&\n <DeleteModal\n entityName={showDeleteModal?.mappingName}\n onClose={() => setShowDeleteModal(undefined)}\n onDelete={async () => {\n await onDelete(showDeleteModal);\n }}\n refresh={onRefresh}\n />\n }\n {showImportModal && setShowImportModal && <MappingImportWizardModal\n show={showImportModal}\n setShow={setShowImportModal}\n onFinish={onRefresh}\n displayStrings={displayStrings}\n />}\n </>\n );\n};\n"]}
@@ -5,6 +5,7 @@ declare const StatusIconMap: {
5
5
  readonly error: (props: React.SVGProps<SVGSVGElement>) => any;
6
6
  readonly warning: (props: React.SVGProps<SVGSVGElement>) => any;
7
7
  readonly informational: (props: React.SVGProps<SVGSVGElement>) => any;
8
+ readonly trace: (props: React.SVGProps<SVGSVGElement>) => any;
8
9
  };
9
10
  export declare const StatusIcon: ({ status, className, ...rest }: {
10
11
  status: keyof typeof StatusIconMap;
@@ -5,9 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.StatusIcon = void 0;
7
7
  /*---------------------------------------------------------------------------------------------
8
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
9
- * See LICENSE.md in the project root for license terms and full copyright notice.
10
- *--------------------------------------------------------------------------------------------*/
8
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
9
+ * See LICENSE.md in the project root for license terms and full copyright notice.
10
+ *--------------------------------------------------------------------------------------------*/
11
11
  const react_1 = __importDefault(require("react"));
12
12
  const classnames_1 = __importDefault(require("classnames"));
13
13
  const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
@@ -17,6 +17,7 @@ const StatusIconMap = {
17
17
  error: itwinui_icons_react_1.SvgStatusError,
18
18
  warning: itwinui_icons_react_1.SvgStatusWarning,
19
19
  informational: itwinui_icons_react_1.SvgInfoCircular,
20
+ trace: itwinui_icons_react_1.SvgFlag,
20
21
  };
21
22
  const StatusIcon = ({ status, className, ...rest }) => {
22
23
  const Element = StatusIconMap[status];
@@ -1 +1 @@
1
- {"version":3,"file":"StatusIcon.js","sourceRoot":"","sources":["../../../../src/widget/components/StatusIcon.tsx"],"names":[],"mappings":";;;;;;AAAA;;;gGAGgG;AAChG,kDAA0B;AAC1B,4DAAoC;AACpC,oEAAiH;AACjH,6BAA2B;AAE3B,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,sCAAgB;IACzB,KAAK,EAAE,oCAAc;IACrB,OAAO,EAAE,sCAAgB;IACzB,aAAa,EAAE,qCAAe;CACtB,CAAC;AAEJ,MAAM,UAAU,GAAG,CAAC,EACzB,MAAM,EACN,SAAS,EACT,GAAG,IAAI,EAIR,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,8BAAC,OAAO,IAAC,SAAS,EAAE,IAAA,oBAAU,EAAC,iBAAiB,EAAE,mBAAmB,MAAM,EAAE,EAAE,SAAS,CAAC,KAAM,IAAI,GAAI,CAAC;AACjH,CAAC,CAAC;AAVW,QAAA,UAAU,cAUrB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport classnames from \"classnames\";\nimport { SvgInfoCircular, SvgStatusError, SvgStatusSuccess, SvgStatusWarning } from \"@itwin/itwinui-icons-react\";\nimport \"./StatusIcon.scss\";\n\nconst StatusIconMap = {\n success: SvgStatusSuccess,\n error: SvgStatusError,\n warning: SvgStatusWarning,\n informational: SvgInfoCircular,\n} as const;\n\nexport const StatusIcon = ({\n status,\n className,\n ...rest\n}: {\n status: keyof typeof StatusIconMap;\n className?: string;\n}) => {\n const Element = StatusIconMap[status];\n return <Element className={classnames(\"gmw-status-icon\", `gmw-status-icon-${status}`, className)} {...rest} />;\n};\n"]}
1
+ {"version":3,"file":"StatusIcon.js","sourceRoot":"","sources":["../../../../src/widget/components/StatusIcon.tsx"],"names":[],"mappings":";;;;;;AAAA;;;+FAG+F;AAC/F,kDAA0B;AAC1B,4DAAoC;AACpC,oEAA0H;AAC1H,6BAA2B;AAE3B,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,sCAAgB;IACzB,KAAK,EAAE,oCAAc;IACrB,OAAO,EAAE,sCAAgB;IACzB,aAAa,EAAE,qCAAe;IAC9B,KAAK,EAAE,6BAAO;CACN,CAAC;AAEJ,MAAM,UAAU,GAAG,CAAC,EACzB,MAAM,EACN,SAAS,EACT,GAAG,IAAI,EAIR,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,8BAAC,OAAO,IAAC,SAAS,EAAE,IAAA,oBAAU,EAAC,iBAAiB,EAAE,mBAAmB,MAAM,EAAE,EAAE,SAAS,CAAC,KAAM,IAAI,GAAI,CAAC;AACjH,CAAC,CAAC;AAVW,QAAA,UAAU,cAUrB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport classnames from \"classnames\";\nimport { SvgFlag, SvgInfoCircular, SvgStatusError, SvgStatusSuccess, SvgStatusWarning } from \"@itwin/itwinui-icons-react\";\nimport \"./StatusIcon.scss\";\n\nconst StatusIconMap = {\n success: SvgStatusSuccess,\n error: SvgStatusError,\n warning: SvgStatusWarning,\n informational: SvgInfoCircular,\n trace: SvgFlag,\n} as const;\n\nexport const StatusIcon = ({\n status,\n className,\n ...rest\n}: {\n status: keyof typeof StatusIconMap;\n className?: string;\n}) => {\n const Element = StatusIconMap[status];\n return <Element className={classnames(\"gmw-status-icon\", `gmw-status-icon-${status}`, className)} {...rest} />;\n};\n"]}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import type { IExtractionClient } from "@itwin/insights-client";
3
+ import type { ClientPrefix } from "./GroupingApiConfigContext";
4
+ export declare const createDefaultExtractionClient: (prefix?: ClientPrefix) => IExtractionClient;
5
+ export declare const createExtractionClient: (clientProp: IExtractionClient | ClientPrefix) => IExtractionClient;
6
+ export declare const ExtractionClientContext: import("react").Context<IExtractionClient>;
7
+ export declare const useExtractionClient: () => IExtractionClient;
8
+ //# sourceMappingURL=ExtractionClientContext.d.ts.map
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useExtractionClient = exports.ExtractionClientContext = exports.createExtractionClient = exports.createDefaultExtractionClient = void 0;
4
+ const insights_client_1 = require("@itwin/insights-client");
5
+ const react_1 = require("react");
6
+ const prefixUrl = (baseUrl, prefix) => {
7
+ if (prefix && baseUrl) {
8
+ return baseUrl.replace("api.bentley.com", `${prefix}-api.bentley.com`);
9
+ }
10
+ return baseUrl;
11
+ };
12
+ const createDefaultExtractionClient = (prefix) => {
13
+ const url = prefixUrl(insights_client_1.REPORTING_BASE_PATH, prefix);
14
+ return new insights_client_1.ExtractionClient(url);
15
+ };
16
+ exports.createDefaultExtractionClient = createDefaultExtractionClient;
17
+ const createExtractionClient = (clientProp) => {
18
+ if (undefined === clientProp || typeof clientProp === "string") {
19
+ return (0, exports.createDefaultExtractionClient)(clientProp);
20
+ }
21
+ return clientProp;
22
+ };
23
+ exports.createExtractionClient = createExtractionClient;
24
+ exports.ExtractionClientContext = (0, react_1.createContext)((0, exports.createDefaultExtractionClient)());
25
+ const useExtractionClient = () => {
26
+ const context = (0, react_1.useContext)(exports.ExtractionClientContext);
27
+ if (!context) {
28
+ throw new Error("useExtractionClient should be used within a ExtractionClientContext provider");
29
+ }
30
+ return context;
31
+ };
32
+ exports.useExtractionClient = useExtractionClient;
33
+ //# sourceMappingURL=ExtractionClientContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtractionClientContext.js","sourceRoot":"","sources":["../../../../../src/widget/components/context/ExtractionClientContext.ts"],"names":[],"mappings":";;;AAKA,4DAA+E;AAC/E,iCAAkD;AAGlD,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,MAAe,EAAE,EAAE;IACtD,IAAI,MAAM,IAAI,OAAO,EAAE;QACrB,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,MAAM,kBAAkB,CAAC,CAAC;KACxE;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEK,MAAM,6BAA6B,GAAG,CAAC,MAAqB,EAAqB,EAAE;IACxF,MAAM,GAAG,GAAG,SAAS,CAAC,qCAAmB,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,IAAI,kCAAgB,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC,CAAC;AAHW,QAAA,6BAA6B,iCAGxC;AAEK,MAAM,sBAAsB,GAAG,CAAC,UAA4C,EAAE,EAAE;IACrF,IAAI,SAAS,KAAK,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QAC9D,OAAO,IAAA,qCAA6B,EAAC,UAA0B,CAAC,CAAC;KAClE;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AALW,QAAA,sBAAsB,0BAKjC;AAEW,QAAA,uBAAuB,GAAG,IAAA,qBAAa,EAAoB,IAAA,qCAA6B,GAAE,CAAC,CAAC;AAElG,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,+BAAuB,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;KACH;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AARW,QAAA,mBAAmB,uBAQ9B","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 { IExtractionClient } from \"@itwin/insights-client\";\nimport { ExtractionClient, REPORTING_BASE_PATH } from \"@itwin/insights-client\";\nimport { createContext, useContext } from \"react\";\nimport type { ClientPrefix } from \"./GroupingApiConfigContext\";\n\nconst prefixUrl = (baseUrl?: string, prefix?: string) => {\n if (prefix && baseUrl) {\n return baseUrl.replace(\"api.bentley.com\", `${prefix}-api.bentley.com`);\n }\n return baseUrl;\n};\n\nexport const createDefaultExtractionClient = (prefix?: ClientPrefix): IExtractionClient => {\n const url = prefixUrl(REPORTING_BASE_PATH, prefix);\n return new ExtractionClient(url);\n};\n\nexport const createExtractionClient = (clientProp: IExtractionClient | ClientPrefix) => {\n if (undefined === clientProp || typeof clientProp === \"string\") {\n return createDefaultExtractionClient(clientProp as ClientPrefix);\n }\n return clientProp;\n};\n\nexport const ExtractionClientContext = createContext<IExtractionClient>(createDefaultExtractionClient());\n\nexport const useExtractionClient = () => {\n const context = useContext(ExtractionClientContext);\n if (!context) {\n throw new Error(\n \"useExtractionClient should be used within a ExtractionClientContext provider\"\n );\n }\n return context;\n};\n"]}
@@ -0,0 +1,20 @@
1
+ /// <reference types="react" />
2
+ import type { Group } from "@itwin/insights-client";
3
+ import type { ContextCustomUI, GroupingCustomUI } from "../customUI/GroupingMappingCustomUI";
4
+ export interface GroupsOperationsProps {
5
+ mappingId: string;
6
+ }
7
+ export declare const useGroupsOperations: ({ mappingId, }: GroupsOperationsProps) => {
8
+ groups: Group[];
9
+ isLoading: boolean;
10
+ refresh: () => Promise<void>;
11
+ onDeleteGroup: (group: Group) => Promise<void>;
12
+ setShowDeleteModal: import("react").Dispatch<import("react").SetStateAction<Group | undefined>>;
13
+ showDeleteModal: Group | undefined;
14
+ groupUIs: GroupingCustomUI[];
15
+ contextUIs: ContextCustomUI[];
16
+ numberOfVisualizedGroups: number;
17
+ errorMessage: string | undefined;
18
+ setErrorMessage: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
19
+ };
20
+ //# sourceMappingURL=useGroupsOperations.d.ts.map
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useGroupsOperations = void 0;
4
+ /*---------------------------------------------------------------------------------------------
5
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
+ * See LICENSE.md in the project root for license terms and full copyright notice.
7
+ *--------------------------------------------------------------------------------------------*/
8
+ const react_1 = require("react");
9
+ const GroupingApiConfigContext_1 = require("../context/GroupingApiConfigContext");
10
+ const utils_1 = require("../utils");
11
+ const GroupingMappingCustomUI_1 = require("../customUI/GroupingMappingCustomUI");
12
+ const GroupingMappingCustomUIContext_1 = require("../context/GroupingMappingCustomUIContext");
13
+ const GroupHilitedElementsContext_1 = require("../context/GroupHilitedElementsContext");
14
+ const MappingClientContext_1 = require("../context/MappingClientContext");
15
+ const fetchGroups = async (setGroups, iModelId, mappingId, setIsLoading, getAccessToken, mappingsClient, setErrorMessage) => {
16
+ try {
17
+ setIsLoading(true);
18
+ const accessToken = await getAccessToken();
19
+ const groups = await mappingsClient.getGroups(accessToken, iModelId, mappingId);
20
+ setGroups(groups.sort((a, b) => a.groupName.localeCompare(b.groupName)));
21
+ }
22
+ catch (error) {
23
+ setErrorMessage((0, utils_1.getErrorMessage)(error.status));
24
+ }
25
+ finally {
26
+ setIsLoading(false);
27
+ }
28
+ };
29
+ const useGroupsOperations = ({ mappingId, }) => {
30
+ const { getAccessToken, iModelId } = (0, GroupingApiConfigContext_1.useGroupingMappingApiConfig)();
31
+ const { groups, setGroups, numberOfVisualizedGroups } = (0, GroupHilitedElementsContext_1.useGroupHilitedElementsContext)();
32
+ const mappingClient = (0, MappingClientContext_1.useMappingClient)();
33
+ const groupUIs = (0, GroupingMappingCustomUIContext_1.useGroupingMappingCustomUI)().customUIs.filter((p) => p.type === GroupingMappingCustomUI_1.GroupingMappingCustomUIType.Grouping);
34
+ const contextUIs = (0, GroupingMappingCustomUIContext_1.useGroupingMappingCustomUI)().customUIs.filter((p) => p.type === GroupingMappingCustomUI_1.GroupingMappingCustomUIType.Context);
35
+ const [showDeleteModal, setShowDeleteModal] = (0, react_1.useState)(undefined);
36
+ const [isLoading, setIsLoading] = (0, react_1.useState)(true);
37
+ const [errorMessage, setErrorMessage] = (0, react_1.useState)(undefined);
38
+ (0, react_1.useEffect)(() => {
39
+ const initialize = async () => {
40
+ await fetchGroups(setGroups, iModelId, mappingId, setIsLoading, getAccessToken, mappingClient, setErrorMessage);
41
+ };
42
+ void initialize();
43
+ }, [getAccessToken, mappingClient, iModelId, mappingId, setGroups]);
44
+ const refresh = (0, react_1.useCallback)(async () => {
45
+ await fetchGroups(setGroups, iModelId, mappingId, setIsLoading, getAccessToken, mappingClient, setErrorMessage);
46
+ }, [getAccessToken, mappingClient, iModelId, mappingId, setGroups]);
47
+ const onDeleteGroup = (0, react_1.useCallback)(async (group) => {
48
+ const accessToken = await getAccessToken();
49
+ await mappingClient.deleteGroup(accessToken, iModelId, mappingId, group.id);
50
+ await refresh();
51
+ }, [getAccessToken, iModelId, mappingClient, mappingId, refresh]);
52
+ return {
53
+ groups,
54
+ isLoading,
55
+ refresh,
56
+ onDeleteGroup,
57
+ setShowDeleteModal,
58
+ showDeleteModal,
59
+ groupUIs,
60
+ contextUIs,
61
+ numberOfVisualizedGroups,
62
+ errorMessage,
63
+ setErrorMessage,
64
+ };
65
+ };
66
+ exports.useGroupsOperations = useGroupsOperations;
67
+ //# sourceMappingURL=useGroupsOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGroupsOperations.js","sourceRoot":"","sources":["../../../../../src/widget/components/hooks/useGroupsOperations.ts"],"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 { useCallback, useEffect, useState } from \"react\";\nimport type { Group, IMappingsClient } from \"@itwin/insights-client\";\nimport type { GetAccessTokenFn } from \"../context/GroupingApiConfigContext\";\nimport { useGroupingMappingApiConfig } from \"../context/GroupingApiConfigContext\";\nimport { getErrorMessage } from \"../utils\";\nimport type { ContextCustomUI, GroupingCustomUI } from \"../customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"../customUI/GroupingMappingCustomUI\";\nimport { useGroupingMappingCustomUI } from \"../context/GroupingMappingCustomUIContext\";\nimport { useGroupHilitedElementsContext } from \"../context/GroupHilitedElementsContext\";\nimport { useMappingClient } from \"../context/MappingClientContext\";\n\nconst fetchGroups = async (\n setGroups: (groups: Group[]) => void,\n iModelId: string,\n mappingId: string,\n setIsLoading: (isLoading: boolean) => void,\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient,\n setErrorMessage: (message: string | undefined) => void\n): Promise<void> => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const groups = await mappingsClient.getGroups(\n accessToken,\n iModelId,\n mappingId\n );\n setGroups(groups.sort((a, b) => a.groupName.localeCompare(b.groupName)));\n } catch (error: any) {\n setErrorMessage(getErrorMessage(error.status));\n } finally {\n setIsLoading(false);\n }\n};\n\nexport interface GroupsOperationsProps {\n mappingId: string;\n}\n\nexport const useGroupsOperations = ({\n mappingId,\n}: GroupsOperationsProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const { groups, setGroups, numberOfVisualizedGroups } = useGroupHilitedElementsContext();\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] =\n useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Grouping\n ) as GroupingCustomUI[];\n const contextUIs: ContextCustomUI[] =\n useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Context\n ) as ContextCustomUI[];\n const [showDeleteModal, setShowDeleteModal] = useState<Group | undefined>(\n undefined\n );\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n const initialize = async () => {\n await fetchGroups(\n setGroups,\n iModelId,\n mappingId,\n setIsLoading,\n getAccessToken,\n mappingClient,\n setErrorMessage\n );\n };\n void initialize();\n }, [getAccessToken, mappingClient, iModelId, mappingId, setGroups]);\n\n const refresh = useCallback(async () => {\n await fetchGroups(\n setGroups,\n iModelId,\n mappingId,\n setIsLoading,\n getAccessToken,\n mappingClient,\n setErrorMessage\n );\n }, [getAccessToken, mappingClient, iModelId, mappingId, setGroups]);\n\n const onDeleteGroup = useCallback(async (group: Group) => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteGroup(\n accessToken,\n iModelId,\n mappingId,\n group.id\n );\n await refresh();\n }, [getAccessToken, iModelId, mappingClient, mappingId, refresh]);\n\n return {\n groups,\n isLoading,\n refresh,\n onDeleteGroup,\n setShowDeleteModal,\n showDeleteModal,\n groupUIs,\n contextUIs,\n numberOfVisualizedGroups,\n errorMessage,\n setErrorMessage,\n };\n};\n"]}
@@ -4,9 +4,23 @@ import type { GroupingMappingApiConfig } from "../context/GroupingApiConfigConte
4
4
  export interface MappingsOperationsProps extends GroupingMappingApiConfig {
5
5
  mappingClient: IMappingsClient;
6
6
  }
7
+ export interface ExtractionMessageData {
8
+ date: string;
9
+ category: string;
10
+ level: string;
11
+ message: string;
12
+ }
13
+ export interface ExtractionIconData {
14
+ iconStatus: "negative" | "positive" | "warning";
15
+ iconMessage: string;
16
+ }
7
17
  export declare const useMappingsOperations: ({ iModelId, getAccessToken, mappingClient }: MappingsOperationsProps) => {
8
18
  mappings: Mapping[];
9
19
  isLoading: boolean;
20
+ extractionIconData: ExtractionIconData;
21
+ showExtractionMessageModal: boolean;
22
+ extractionMessageData: ExtractionMessageData[];
23
+ setShowExtractionMessageModal: import("react").Dispatch<import("react").SetStateAction<boolean>>;
10
24
  refresh: () => Promise<void>;
11
25
  toggleExtraction: (mapping: Mapping) => Promise<void>;
12
26
  onDelete: (mapping: Mapping) => Promise<void>;
@@ -7,6 +7,7 @@ exports.useMappingsOperations = void 0;
7
7
  *--------------------------------------------------------------------------------------------*/
8
8
  const react_1 = require("react");
9
9
  const utils_1 = require("../utils");
10
+ const ExtractionClientContext_1 = require("../context/ExtractionClientContext");
10
11
  const fetchMappings = async (setMappings, iModelId, setIsLoading, getAccessToken, mappingsClient, setErrorMessage) => {
11
12
  try {
12
13
  setIsLoading(true);
@@ -21,16 +22,73 @@ const fetchMappings = async (setMappings, iModelId, setIsLoading, getAccessToken
21
22
  setIsLoading(false);
22
23
  }
23
24
  };
25
+ const fetchExtractionStatus = async (iModelId, getAccessToken, extractionClient, setExtractionIconData, setExtractionMessageData) => {
26
+ setExtractionIconData({
27
+ iconStatus: "warning",
28
+ iconMessage: "Extraction status pending.",
29
+ });
30
+ try {
31
+ const accessToken = await getAccessToken();
32
+ const extractions = await extractionClient.getExtractionHistory(accessToken, iModelId, 1);
33
+ if (extractions.length === 0) {
34
+ setExtractionIconData({
35
+ iconStatus: "negative",
36
+ iconMessage: "No extraction found.",
37
+ });
38
+ }
39
+ else {
40
+ const jobId = extractions[0].jobId;
41
+ const status = await extractionClient.getExtractionStatus(accessToken, jobId);
42
+ if (status.containsIssues) {
43
+ setExtractionIconData({
44
+ iconStatus: "negative",
45
+ iconMessage: "Extraction contains issues. Click to view extraction logs.",
46
+ });
47
+ const logs = await extractionClient.getExtractionLogs(accessToken, jobId);
48
+ const filteredLogs = logs.filter((log) => log.message !== null);
49
+ const extractionMessageData = filteredLogs.map((filteredLog) => ({
50
+ date: filteredLog.dateTime,
51
+ category: filteredLog.category,
52
+ level: filteredLog.level,
53
+ message: String(filteredLog.message),
54
+ }));
55
+ setExtractionMessageData(extractionMessageData);
56
+ }
57
+ else {
58
+ setExtractionIconData({
59
+ iconStatus: "positive",
60
+ iconMessage: "Extraction successful.",
61
+ });
62
+ }
63
+ }
64
+ }
65
+ catch (error) {
66
+ setExtractionIconData({
67
+ iconStatus: "negative",
68
+ iconMessage: "Operation failed. Please try again.",
69
+ });
70
+ }
71
+ };
24
72
  const useMappingsOperations = ({ iModelId, getAccessToken, mappingClient }) => {
25
73
  const [showImportModal, setShowImportModal] = (0, react_1.useState)(false);
26
74
  const [showDeleteModal, setShowDeleteModal] = (0, react_1.useState)(undefined);
27
75
  const [isLoading, setIsLoading] = (0, react_1.useState)(true);
28
76
  const [mappings, setMappings] = (0, react_1.useState)([]);
77
+ const extractionClient = (0, ExtractionClientContext_1.useExtractionClient)();
29
78
  const [errorMessage, setErrorMessage] = (0, react_1.useState)(undefined);
30
79
  const [isTogglingExtraction, setIsTogglingExtraction] = (0, react_1.useState)(false);
80
+ const [extractionIconData, setExtractionIconData] = (0, react_1.useState)({
81
+ iconStatus: "warning",
82
+ iconMessage: "",
83
+ });
84
+ const [showExtractionMessageModal, setShowExtractionMessageModal] = (0, react_1.useState)(false);
85
+ const [extractionMessageData, setExtractionMessageData] = (0, react_1.useState)([]);
31
86
  (0, react_1.useEffect)(() => {
32
87
  void fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient, setErrorMessage);
33
88
  }, [getAccessToken, mappingClient, iModelId]);
89
+ (0, react_1.useEffect)(() => {
90
+ void fetchExtractionStatus(iModelId, getAccessToken, extractionClient, setExtractionIconData, setExtractionMessageData);
91
+ }, [iModelId, getAccessToken, extractionClient]);
34
92
  const refresh = (0, react_1.useCallback)(async () => {
35
93
  setMappings([]);
36
94
  await fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient, setErrorMessage);
@@ -56,7 +114,7 @@ const useMappingsOperations = ({ iModelId, getAccessToken, mappingClient }) => {
56
114
  await mappingClient.deleteMapping(accessToken, iModelId, mapping.id);
57
115
  await refresh();
58
116
  };
59
- return { mappings, isLoading, refresh, toggleExtraction, onDelete, setShowImportModal, showImportModal, setShowDeleteModal, showDeleteModal, isTogglingExtraction, errorMessage, setErrorMessage };
117
+ return { mappings, isLoading, extractionIconData, showExtractionMessageModal, extractionMessageData, setShowExtractionMessageModal, refresh, toggleExtraction, onDelete, setShowImportModal, showImportModal, setShowDeleteModal, showDeleteModal, isTogglingExtraction, errorMessage, setErrorMessage };
60
118
  };
61
119
  exports.useMappingsOperations = useMappingsOperations;
62
120
  //# sourceMappingURL=useMappingsOperations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMappingsOperations.js","sourceRoot":"","sources":["../../../../../src/widget/components/hooks/useMappingsOperations.ts"],"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 { useCallback, useEffect, useState } from \"react\";\nimport {\n getErrorMessage,\n} from \"../utils\";\nimport type { IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport type { GroupingMappingApiConfig } from \"../context/GroupingApiConfigContext\";\nimport type { GetAccessTokenFn } from \"../context/GroupingApiConfigContext\";\n\nconst fetchMappings = async (\n setMappings: React.Dispatch<React.SetStateAction<Mapping[]>>,\n iModelId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient,\n setErrorMessage: (message: string | undefined) => void\n) => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const mappings = await mappingsClient.getMappings(accessToken, iModelId);\n setMappings(mappings.sort((a, b) => a.mappingName.localeCompare(b.mappingName)));\n } catch (error: any) {\n setErrorMessage(getErrorMessage(error.status));\n } finally {\n setIsLoading(false);\n }\n};\n\nexport interface MappingsOperationsProps extends GroupingMappingApiConfig {\n mappingClient: IMappingsClient;\n}\n\nexport const useMappingsOperations = ({ iModelId, getAccessToken, mappingClient }: MappingsOperationsProps) => {\n const [showImportModal, setShowImportModal] = useState<boolean | undefined>(false);\n const [showDeleteModal, setShowDeleteModal] = useState<Mapping | undefined>(undefined);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [mappings, setMappings] = useState<Mapping[]>([]);\n const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n const [isTogglingExtraction, setIsTogglingExtraction] = useState<boolean>(false);\n\n useEffect(() => {\n void fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient, setErrorMessage);\n }, [getAccessToken, mappingClient, iModelId]);\n\n const refresh = useCallback(async () => {\n setMappings([]);\n await fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient, setErrorMessage);\n }, [getAccessToken, mappingClient, iModelId]);\n\n const toggleExtraction = useCallback(async (mapping: Mapping) => {\n try {\n setIsTogglingExtraction(true);\n const newState = !mapping.extractionEnabled;\n const accessToken = await getAccessToken();\n await mappingClient.updateMapping(accessToken, iModelId, mapping.id, {\n extractionEnabled: newState,\n });\n } catch (error: any) {\n setErrorMessage(getErrorMessage(error.status));\n } finally {\n setIsTogglingExtraction(false);\n }\n }, [getAccessToken, iModelId, mappingClient]);\n\n const onDelete = async (mapping: Mapping) => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteMapping(accessToken, iModelId, mapping.id);\n await refresh();\n };\n\n return { mappings, isLoading, refresh, toggleExtraction, onDelete, setShowImportModal, showImportModal, setShowDeleteModal, showDeleteModal, isTogglingExtraction, errorMessage, setErrorMessage };\n};\n"]}
1
+ {"version":3,"file":"useMappingsOperations.js","sourceRoot":"","sources":["../../../../../src/widget/components/hooks/useMappingsOperations.ts"],"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 { useCallback, useEffect, useState } from \"react\";\nimport {\n getErrorMessage,\n} from \"../utils\";\nimport type { IExtractionClient, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport type { GroupingMappingApiConfig } from \"../context/GroupingApiConfigContext\";\nimport type { GetAccessTokenFn } from \"../context/GroupingApiConfigContext\";\nimport { useExtractionClient } from \"../context/ExtractionClientContext\";\n\nconst fetchMappings = async (\n setMappings: React.Dispatch<React.SetStateAction<Mapping[]>>,\n iModelId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient,\n setErrorMessage: (message: string | undefined) => void\n) => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const mappings = await mappingsClient.getMappings(accessToken, iModelId);\n setMappings(mappings.sort((a, b) => a.mappingName.localeCompare(b.mappingName)));\n } catch (error: any) {\n setErrorMessage(getErrorMessage(error.status));\n } finally {\n setIsLoading(false);\n }\n};\n\nconst fetchExtractionStatus = async (\n iModelId: string,\n getAccessToken: GetAccessTokenFn,\n extractionClient: IExtractionClient,\n setExtractionIconData: React.Dispatch<React.SetStateAction<ExtractionIconData>>,\n setExtractionMessageData: React.Dispatch<React.SetStateAction<ExtractionMessageData[]>>\n) => {\n setExtractionIconData({\n iconStatus: \"warning\",\n iconMessage: \"Extraction status pending.\",\n });\n try {\n const accessToken = await getAccessToken();\n const extractions = await extractionClient.getExtractionHistory(accessToken, iModelId, 1);\n if(extractions.length === 0){\n setExtractionIconData({\n iconStatus: \"negative\",\n iconMessage: \"No extraction found.\",\n });\n } else {\n const jobId = extractions[0].jobId;\n const status = await extractionClient.getExtractionStatus(accessToken, jobId);\n if (status.containsIssues) {\n setExtractionIconData({\n iconStatus: \"negative\",\n iconMessage: \"Extraction contains issues. Click to view extraction logs.\",\n });\n const logs = await extractionClient.getExtractionLogs(accessToken, jobId);\n const filteredLogs = logs.filter((log) => log.message !== null);\n const extractionMessageData = filteredLogs.map((filteredLog) =>\n (\n {\n date: filteredLog.dateTime,\n category: filteredLog.category,\n level: filteredLog.level,\n message: String(filteredLog.message),\n }\n ));\n setExtractionMessageData(extractionMessageData);\n } else {\n setExtractionIconData({\n iconStatus: \"positive\",\n iconMessage: \"Extraction successful.\",\n });\n }\n }\n } catch (error: any) {\n setExtractionIconData({\n iconStatus: \"negative\",\n iconMessage: \"Operation failed. Please try again.\",\n });\n }\n};\n\nexport interface MappingsOperationsProps extends GroupingMappingApiConfig {\n mappingClient: IMappingsClient;\n}\n\nexport interface ExtractionMessageData {\n date: string;\n category: string;\n level: string;\n message: string;\n}\n\nexport interface ExtractionIconData {\n iconStatus: \"negative\" | \"positive\" | \"warning\";\n iconMessage: string;\n}\n\nexport const useMappingsOperations = ({ iModelId, getAccessToken, mappingClient }: MappingsOperationsProps) => {\n const [showImportModal, setShowImportModal] = useState<boolean | undefined>(false);\n const [showDeleteModal, setShowDeleteModal] = useState<Mapping | undefined>(undefined);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [mappings, setMappings] = useState<Mapping[]>([]);\n const extractionClient = useExtractionClient();\n const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n const [isTogglingExtraction, setIsTogglingExtraction] = useState<boolean>(false);\n const [extractionIconData, setExtractionIconData] = useState<ExtractionIconData>({\n iconStatus: \"warning\",\n iconMessage: \"\",\n });\n const [showExtractionMessageModal, setShowExtractionMessageModal] = useState<boolean>(false);\n const [extractionMessageData, setExtractionMessageData] = useState<ExtractionMessageData[]>([]);\n\n useEffect(() => {\n void fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient, setErrorMessage);\n }, [getAccessToken, mappingClient, iModelId]);\n\n useEffect(() => {\n void fetchExtractionStatus(\n iModelId,\n getAccessToken,\n extractionClient,\n setExtractionIconData,\n setExtractionMessageData\n );\n }, [iModelId, getAccessToken, extractionClient]);\n\n const refresh = useCallback(async () => {\n setMappings([]);\n await fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient, setErrorMessage);\n }, [getAccessToken, mappingClient, iModelId]);\n\n const toggleExtraction = useCallback(async (mapping: Mapping) => {\n try {\n setIsTogglingExtraction(true);\n const newState = !mapping.extractionEnabled;\n const accessToken = await getAccessToken();\n await mappingClient.updateMapping(accessToken, iModelId, mapping.id, {\n extractionEnabled: newState,\n });\n } catch (error: any) {\n setErrorMessage(getErrorMessage(error.status));\n } finally {\n setIsTogglingExtraction(false);\n }\n }, [getAccessToken, iModelId, mappingClient]);\n\n const onDelete = async (mapping: Mapping) => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteMapping(accessToken, iModelId, mapping.id);\n await refresh();\n };\n\n return { mappings, isLoading, extractionIconData, showExtractionMessageModal, extractionMessageData, setShowExtractionMessageModal, refresh, toggleExtraction, onDelete, setShowImportModal, showImportModal, setShowDeleteModal, showDeleteModal, isTogglingExtraction, errorMessage, setErrorMessage };\n};\n"]}
@@ -11,5 +11,6 @@ interface EmptyMessageProps {
11
11
  }
12
12
  export declare const EmptyMessage: ({ message }: EmptyMessageProps) => JSX.Element;
13
13
  export declare const LoadingSpinner: () => JSX.Element;
14
+ export declare const enableExperimentalFeatures: (iModelConnection: IModelConnection) => Promise<void>;
14
15
  export {};
15
16
  //# sourceMappingURL=utils.d.ts.map
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.LoadingSpinner = exports.EmptyMessage = exports.LoadingOverlay = exports.handleError = exports.getErrorMessage = exports.fetchIdsFromQuery = exports.handleInputChange = void 0;
6
+ exports.enableExperimentalFeatures = exports.LoadingSpinner = exports.EmptyMessage = exports.LoadingOverlay = exports.handleError = exports.getErrorMessage = exports.fetchIdsFromQuery = exports.handleInputChange = void 0;
7
7
  /*---------------------------------------------------------------------------------------------
8
8
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
9
9
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -91,4 +91,9 @@ const LoadingSpinner = () => {
91
91
  react_1.default.createElement(itwinui_react_1.ProgressRadial, { size: "small", indeterminate: true })));
92
92
  };
93
93
  exports.LoadingSpinner = LoadingSpinner;
94
+ const enableExperimentalFeatures = async (iModelConnection) => {
95
+ const reader = iModelConnection.createQueryReader("PRAGMA experimental_features_enabled=true");
96
+ await reader.step();
97
+ };
98
+ exports.enableExperimentalFeatures = enableExperimentalFeatures;
94
99
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/widget/components/utils.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 { ProgressRadial, Text, toaster } from \"@itwin/itwinui-react\";\nimport \"./utils.scss\";\nimport React from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\n\nexport const handleInputChange = <T,>(\n e: React.ChangeEvent<HTMLInputElement>,\n values: T,\n setValues: (newValues: T) => void,\n) => {\n const { name, value } = e.target;\n\n setValues({\n ...values,\n [name]: value,\n });\n};\n\nexport const fetchIdsFromQuery = async (\n query: string,\n iModelConnection: IModelConnection,\n) => {\n if (query === \"\") {\n return [];\n }\n const ids: string[] = [];\n const rowIterator = iModelConnection.query(query, undefined, {\n rowFormat: QueryRowFormat.UseJsPropertyNames,\n });\n while (true) {\n const { done, value } = await rowIterator.next();\n if (done) {\n break;\n }\n if (Object.keys(value).includes(\"id\")) {\n ids.push(value.id);\n } else if (Object.keys(value).includes(\"element.id\")) {\n ids.push(value[\"element.id\"]);\n } else if (Object.keys(value).includes(\"eCInstanceId\")) {\n ids.push(value.eCInstanceId);\n }\n }\n return ids;\n};\n\nexport const getErrorMessage = (errorStatus: number): string => {\n switch (errorStatus) {\n case 401:\n return \"You are unauthorized to do this operation.\";\n case 403:\n return \"You don't have permission to access the requested resource.\";\n case 404:\n return \"The requested resource was not found.\";\n case 409:\n return \"This property name is already being used.\";\n case 422:\n return \"Unable to process the request.\";\n case 429:\n return \"Too many requests.\";\n case 500:\n return \"Internal server error.\";\n case 502:\n return \"Bad gateway.\";\n case 503:\n return \"Service unavailable.\";\n default:\n return \"Something went wrong!\";\n }\n};\n\nexport const handleError = (errorStatus: number) => {\n const baseErrorMessage = \"Error!\";\n const specificErrorMessage = getErrorMessage(errorStatus);\n const fullErrorMessage = `${baseErrorMessage} ${specificErrorMessage}`;\n\n toaster.negative(fullErrorMessage);\n};\n\nexport const LoadingOverlay = () => (\n <div className='gmw-center-overlay'>\n <Text>Loading</Text>\n <ProgressRadial indeterminate />\n <Text>Please wait...</Text>\n </div>\n);\n\ninterface EmptyMessageProps {\n message: string;\n}\n\nexport const EmptyMessage = ({ message }: EmptyMessageProps) => (\n <div className='gmw-center-overlay'>\n <Text>{message}</Text>\n </div>\n);\n\nexport const LoadingSpinner = () => {\n return (\n <div className=\"gmw-loading-spinner\">\n <ProgressRadial size=\"small\" indeterminate />\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/widget/components/utils.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 { ProgressRadial, Text, toaster } from \"@itwin/itwinui-react\";\nimport \"./utils.scss\";\nimport React from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\n\nexport const handleInputChange = <T,>(\n e: React.ChangeEvent<HTMLInputElement>,\n values: T,\n setValues: (newValues: T) => void,\n) => {\n const { name, value } = e.target;\n\n setValues({\n ...values,\n [name]: value,\n });\n};\n\nexport const fetchIdsFromQuery = async (\n query: string,\n iModelConnection: IModelConnection,\n) => {\n if (query === \"\") {\n return [];\n }\n const ids: string[] = [];\n const rowIterator = iModelConnection.query(query, undefined, {\n rowFormat: QueryRowFormat.UseJsPropertyNames,\n });\n while (true) {\n const { done, value } = await rowIterator.next();\n if (done) {\n break;\n }\n if (Object.keys(value).includes(\"id\")) {\n ids.push(value.id);\n } else if (Object.keys(value).includes(\"element.id\")) {\n ids.push(value[\"element.id\"]);\n } else if (Object.keys(value).includes(\"eCInstanceId\")) {\n ids.push(value.eCInstanceId);\n }\n }\n return ids;\n};\n\nexport const getErrorMessage = (errorStatus: number): string => {\n switch (errorStatus) {\n case 401:\n return \"You are unauthorized to do this operation.\";\n case 403:\n return \"You don't have permission to access the requested resource.\";\n case 404:\n return \"The requested resource was not found.\";\n case 409:\n return \"This property name is already being used.\";\n case 422:\n return \"Unable to process the request.\";\n case 429:\n return \"Too many requests.\";\n case 500:\n return \"Internal server error.\";\n case 502:\n return \"Bad gateway.\";\n case 503:\n return \"Service unavailable.\";\n default:\n return \"Something went wrong!\";\n }\n};\n\nexport const handleError = (errorStatus: number) => {\n const baseErrorMessage = \"Error!\";\n const specificErrorMessage = getErrorMessage(errorStatus);\n const fullErrorMessage = `${baseErrorMessage} ${specificErrorMessage}`;\n\n toaster.negative(fullErrorMessage);\n};\n\nexport const LoadingOverlay = () => (\n <div className='gmw-center-overlay'>\n <Text>Loading</Text>\n <ProgressRadial indeterminate />\n <Text>Please wait...</Text>\n </div>\n);\n\ninterface EmptyMessageProps {\n message: string;\n}\n\nexport const EmptyMessage = ({ message }: EmptyMessageProps) => (\n <div className='gmw-center-overlay'>\n <Text>{message}</Text>\n </div>\n);\n\nexport const LoadingSpinner = () => {\n return (\n <div className=\"gmw-loading-spinner\">\n <ProgressRadial size=\"small\" indeterminate />\n </div>\n );\n};\n\nexport const enableExperimentalFeatures = async (iModelConnection: IModelConnection) => {\n const reader = iModelConnection.createQueryReader(\"PRAGMA experimental_features_enabled=true\");\n await reader.step();\n};\n"]}
@@ -253,12 +253,9 @@ const manufactureKeys = async (query, iModelConnection) => {
253
253
  return new presentation_common_1.KeySet();
254
254
  }
255
255
  const queryWithIdAndECClassName = `SELECT q.ECInstanceId, ec_classname(e.ECClassId) FROM (${query}) q JOIN BisCore.Element e on e.ECInstanceId = q.ECInstanceId`;
256
- const rowIterator = iModelConnection.query(queryWithIdAndECClassName, undefined, {
257
- rowFormat: core_common_1.QueryRowFormat.UseECSqlPropertyIndexes,
258
- });
259
256
  const keys = [];
260
- for await (const value of rowIterator) {
261
- keys.push({ id: value[0], className: value[1] });
257
+ for await (const row of iModelConnection.createQueryReader(queryWithIdAndECClassName)) {
258
+ keys.push({ id: row[0], className: row[1] });
262
259
  }
263
260
  return new presentation_common_1.KeySet(keys);
264
261
  };