@itwin/grouping-mapping-widget 0.9.3 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/lib/cjs/grouping-mapping-widget.d.ts +9 -3
  2. package/lib/cjs/grouping-mapping-widget.js +15 -3
  3. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  4. package/lib/cjs/test/GroupingMappingCustomUI.test.js +49 -86
  5. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  6. package/lib/cjs/test/test-utils.d.ts +0 -6
  7. package/lib/cjs/test/test-utils.js +8 -24
  8. package/lib/cjs/test/test-utils.js.map +1 -1
  9. package/lib/cjs/widget/components/ActionPanel.d.ts +1 -1
  10. package/lib/cjs/widget/components/ActionPanel.js +1 -1
  11. package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
  12. package/lib/cjs/widget/components/ConfirmMappingsImport.d.ts +5 -1
  13. package/lib/cjs/widget/components/ConfirmMappingsImport.js +10 -9
  14. package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
  15. package/lib/cjs/widget/components/GroupAction.d.ts +13 -9
  16. package/lib/cjs/widget/components/GroupAction.js +56 -58
  17. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  18. package/lib/cjs/widget/components/GroupPropertyAction.d.ts +1 -1
  19. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  20. package/lib/cjs/widget/components/GroupPropertyUtils.js +4 -0
  21. package/lib/cjs/widget/components/GroupPropertyUtils.js.map +1 -1
  22. package/lib/cjs/widget/components/Grouping.d.ts +8 -9
  23. package/lib/cjs/widget/components/Grouping.js +118 -273
  24. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  25. package/lib/cjs/widget/components/Grouping.scss +2 -2
  26. package/lib/cjs/widget/components/GroupingMapping.d.ts +28 -21
  27. package/lib/cjs/widget/components/GroupingMapping.js +59 -38
  28. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  29. package/lib/cjs/widget/components/GroupingMappingContent.d.ts +8 -0
  30. package/lib/cjs/widget/components/GroupingMappingContent.js +47 -0
  31. package/lib/cjs/widget/components/GroupingMappingContent.js.map +1 -0
  32. package/lib/cjs/widget/components/GroupingMappingContext.d.ts +31 -0
  33. package/lib/cjs/widget/components/GroupingMappingContext.js +84 -0
  34. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -0
  35. package/lib/cjs/widget/components/GroupingMappingHeader.d.ts +8 -0
  36. package/lib/cjs/widget/components/GroupingMappingHeader.js +17 -0
  37. package/lib/cjs/widget/components/GroupingMappingHeader.js.map +1 -0
  38. package/lib/cjs/widget/components/GroupingMappingRouter.d.ts +8 -0
  39. package/lib/cjs/widget/components/GroupingMappingRouter.js +87 -0
  40. package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -0
  41. package/lib/cjs/widget/components/Mapping.d.ts +12 -2
  42. package/lib/cjs/widget/components/Mapping.js +57 -84
  43. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  44. package/lib/cjs/widget/components/MappingAction.d.ts +9 -5
  45. package/lib/cjs/widget/components/MappingAction.js +19 -8
  46. package/lib/cjs/widget/components/MappingAction.js.map +1 -1
  47. package/lib/cjs/widget/components/MappingImportWizardModal.d.ts +5 -1
  48. package/lib/cjs/widget/components/MappingImportWizardModal.js +11 -7
  49. package/lib/cjs/widget/components/MappingImportWizardModal.js.map +1 -1
  50. package/lib/cjs/widget/components/QueryBuilder.js +2 -7
  51. package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
  52. package/lib/cjs/widget/components/SelectMappings.d.ts +5 -1
  53. package/lib/cjs/widget/components/SelectMappings.js +8 -4
  54. package/lib/cjs/widget/components/SelectMappings.js.map +1 -1
  55. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.d.ts +15 -0
  56. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js +45 -0
  57. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js.map +1 -0
  58. package/lib/cjs/widget/components/context/GroupingApiConfigContext.d.ts +1 -0
  59. package/lib/cjs/widget/components/context/GroupingApiConfigContext.js +1 -0
  60. package/lib/cjs/widget/components/context/GroupingApiConfigContext.js.map +1 -1
  61. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.d.ts +6 -2
  62. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js +5 -5
  63. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  64. package/lib/cjs/widget/components/customUI/DefaultGroupingUI.d.ts +3 -0
  65. package/lib/cjs/widget/components/customUI/DefaultGroupingUI.js +40 -0
  66. package/lib/cjs/widget/components/customUI/DefaultGroupingUI.js.map +1 -0
  67. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +5 -0
  68. package/lib/cjs/widget/components/{GroupQueryBuilderContainer.js → customUI/GroupQueryBuilderCustomUI.js} +36 -16
  69. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -0
  70. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.d.ts +3 -2
  71. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  72. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -2
  73. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js +2 -1
  74. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  75. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.d.ts +1 -2
  76. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js +2 -1
  77. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  78. package/lib/cjs/widget/components/groupsHelpers.d.ts +7 -0
  79. package/lib/cjs/widget/components/groupsHelpers.js +84 -0
  80. package/lib/cjs/widget/components/groupsHelpers.js.map +1 -0
  81. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
  82. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +1 -1
  83. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
  84. package/lib/cjs/widget/components/property-grid/PropertyView.js +29 -15
  85. package/lib/cjs/widget/components/property-grid/PropertyView.js.map +1 -1
  86. package/lib/cjs/widget/components/utils.d.ts +1 -3
  87. package/lib/cjs/widget/components/utils.js +1 -26
  88. package/lib/cjs/widget/components/utils.js.map +1 -1
  89. package/lib/esm/grouping-mapping-widget.d.ts +9 -3
  90. package/lib/esm/grouping-mapping-widget.js +7 -1
  91. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  92. package/lib/esm/test/GroupingMappingCustomUI.test.js +46 -83
  93. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  94. package/lib/esm/test/test-utils.d.ts +0 -6
  95. package/lib/esm/test/test-utils.js +7 -22
  96. package/lib/esm/test/test-utils.js.map +1 -1
  97. package/lib/esm/widget/components/ActionPanel.d.ts +1 -1
  98. package/lib/esm/widget/components/ActionPanel.js +1 -1
  99. package/lib/esm/widget/components/ActionPanel.js.map +1 -1
  100. package/lib/esm/widget/components/ConfirmMappingsImport.d.ts +5 -1
  101. package/lib/esm/widget/components/ConfirmMappingsImport.js +10 -9
  102. package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
  103. package/lib/esm/widget/components/GroupAction.d.ts +13 -9
  104. package/lib/esm/widget/components/GroupAction.js +57 -61
  105. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  106. package/lib/esm/widget/components/GroupPropertyAction.d.ts +1 -1
  107. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  108. package/lib/esm/widget/components/GroupPropertyUtils.js +4 -0
  109. package/lib/esm/widget/components/GroupPropertyUtils.js.map +1 -1
  110. package/lib/esm/widget/components/Grouping.d.ts +8 -9
  111. package/lib/esm/widget/components/Grouping.js +122 -277
  112. package/lib/esm/widget/components/Grouping.js.map +1 -1
  113. package/lib/esm/widget/components/Grouping.scss +2 -2
  114. package/lib/esm/widget/components/GroupingMapping.d.ts +28 -21
  115. package/lib/esm/widget/components/GroupingMapping.js +59 -39
  116. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  117. package/lib/esm/widget/components/GroupingMappingContent.d.ts +8 -0
  118. package/lib/esm/widget/components/GroupingMappingContent.js +24 -0
  119. package/lib/esm/widget/components/GroupingMappingContent.js.map +1 -0
  120. package/lib/esm/widget/components/GroupingMappingContext.d.ts +31 -0
  121. package/lib/esm/widget/components/GroupingMappingContext.js +61 -0
  122. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -0
  123. package/lib/esm/widget/components/GroupingMappingHeader.d.ts +8 -0
  124. package/lib/esm/widget/components/GroupingMappingHeader.js +10 -0
  125. package/lib/esm/widget/components/GroupingMappingHeader.js.map +1 -0
  126. package/lib/esm/widget/components/GroupingMappingRouter.d.ts +8 -0
  127. package/lib/esm/widget/components/GroupingMappingRouter.js +80 -0
  128. package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -0
  129. package/lib/esm/widget/components/Mapping.d.ts +12 -2
  130. package/lib/esm/widget/components/Mapping.js +59 -86
  131. package/lib/esm/widget/components/Mapping.js.map +1 -1
  132. package/lib/esm/widget/components/MappingAction.d.ts +9 -5
  133. package/lib/esm/widget/components/MappingAction.js +18 -9
  134. package/lib/esm/widget/components/MappingAction.js.map +1 -1
  135. package/lib/esm/widget/components/MappingImportWizardModal.d.ts +5 -1
  136. package/lib/esm/widget/components/MappingImportWizardModal.js +11 -7
  137. package/lib/esm/widget/components/MappingImportWizardModal.js.map +1 -1
  138. package/lib/esm/widget/components/QueryBuilder.js +2 -7
  139. package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
  140. package/lib/esm/widget/components/SelectMappings.d.ts +5 -1
  141. package/lib/esm/widget/components/SelectMappings.js +8 -4
  142. package/lib/esm/widget/components/SelectMappings.js.map +1 -1
  143. package/lib/esm/widget/components/context/GroupHilitedElementsContext.d.ts +15 -0
  144. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js +22 -0
  145. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js.map +1 -0
  146. package/lib/esm/widget/components/context/GroupingApiConfigContext.d.ts +1 -0
  147. package/lib/esm/widget/components/context/GroupingApiConfigContext.js +1 -0
  148. package/lib/esm/widget/components/context/GroupingApiConfigContext.js.map +1 -1
  149. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.d.ts +6 -2
  150. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js +5 -5
  151. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  152. package/lib/esm/widget/components/customUI/DefaultGroupingUI.d.ts +3 -0
  153. package/lib/esm/widget/components/customUI/DefaultGroupingUI.js +34 -0
  154. package/lib/esm/widget/components/customUI/DefaultGroupingUI.js.map +1 -0
  155. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +5 -0
  156. package/lib/esm/widget/components/{GroupQueryBuilderContainer.js → customUI/GroupQueryBuilderCustomUI.js} +11 -7
  157. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -0
  158. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.d.ts +3 -2
  159. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  160. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -2
  161. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js +1 -2
  162. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  163. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.d.ts +1 -2
  164. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js +1 -2
  165. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  166. package/lib/esm/widget/components/groupsHelpers.d.ts +7 -0
  167. package/lib/esm/widget/components/groupsHelpers.js +77 -0
  168. package/lib/esm/widget/components/groupsHelpers.js.map +1 -0
  169. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
  170. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +1 -1
  171. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
  172. package/lib/esm/widget/components/property-grid/PropertyView.js +1 -3
  173. package/lib/esm/widget/components/property-grid/PropertyView.js.map +1 -1
  174. package/lib/esm/widget/components/utils.d.ts +1 -3
  175. package/lib/esm/widget/components/utils.js +0 -24
  176. package/lib/esm/widget/components/utils.js.map +1 -1
  177. package/package.json +3 -3
  178. package/lib/cjs/widget/components/GroupQueryBuilderContainer.d.ts +0 -5
  179. package/lib/cjs/widget/components/GroupQueryBuilderContainer.js.map +0 -1
  180. package/lib/esm/widget/components/GroupQueryBuilderContainer.d.ts +0 -5
  181. package/lib/esm/widget/components/GroupQueryBuilderContainer.js.map +0 -1
  182. /package/lib/cjs/widget/components/{GroupQueryBuilder.scss → customUI/GroupQueryBuilderCustomUI.scss} +0 -0
  183. /package/lib/esm/widget/components/{GroupQueryBuilder.scss → customUI/GroupQueryBuilderCustomUI.scss} +0 -0
@@ -1,6 +1,9 @@
1
1
  import React from "react";
2
2
  import type { IMappingTyped } from "./Mapping";
3
3
  import "./ConfirmMappingsImport.scss";
4
+ declare const defaultDisplayStrings: {
5
+ mappings: string;
6
+ };
4
7
  interface ConfirmMappingImportProps {
5
8
  sourceiModelId: string;
6
9
  selectedMappings: IMappingTyped[];
@@ -10,7 +13,8 @@ interface ConfirmMappingImportProps {
10
13
  backFn: () => void;
11
14
  onCancel: () => void;
12
15
  onFinish: () => void;
16
+ displayStrings?: Partial<typeof defaultDisplayStrings>;
13
17
  }
14
- declare const ConfirmMappingImport: ({ sourceiModelId, selectedMappings, importing, setImporting, setSelectedMappings, backFn, onCancel, onFinish, }: ConfirmMappingImportProps) => JSX.Element;
18
+ declare const ConfirmMappingImport: ({ sourceiModelId, selectedMappings, importing, setImporting, setSelectedMappings, backFn, onCancel, onFinish, displayStrings: userDisplayStrings, }: ConfirmMappingImportProps) => JSX.Element;
15
19
  export default ConfirmMappingImport;
16
20
  //# sourceMappingURL=ConfirmMappingsImport.d.ts.map
@@ -26,21 +26,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const itwinui_react_1 = require("@itwin/itwinui-react");
27
27
  const react_1 = __importStar(require("react"));
28
28
  require("./ConfirmMappingsImport.scss");
29
- const appui_react_1 = require("@itwin/appui-react");
30
29
  const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
31
30
  const useValidator_1 = __importStar(require("../hooks/useValidator"));
32
31
  const utils_1 = require("./utils");
33
32
  const MappingClientContext_1 = require("./context/MappingClientContext");
34
33
  const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
35
- const ConfirmMappingImport = ({ sourceiModelId, selectedMappings, importing, setImporting, setSelectedMappings, backFn, onCancel, onFinish, }) => {
36
- var _a;
37
- const iModelId = (_a = appui_react_1.useActiveIModelConnection()) === null || _a === void 0 ? void 0 : _a.iModelId;
38
- const { getAccessToken } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
34
+ const defaultDisplayStrings = {
35
+ mappings: "Mappings",
36
+ };
37
+ const ConfirmMappingImport = ({ sourceiModelId, selectedMappings, importing, setImporting, setSelectedMappings, backFn, onCancel, onFinish, displayStrings: userDisplayStrings, }) => {
38
+ const { getAccessToken, iModelId } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
39
39
  const mappingClient = MappingClientContext_1.useMappingClient();
40
40
  const [importCount, setImportCount] = react_1.useState(0);
41
41
  const [currentlyImporting, setCurrentlyImporting] = react_1.useState("");
42
42
  const [validator, showValidationMessage] = useValidator_1.default();
43
43
  const [errored, setErrored] = react_1.useState(false);
44
+ const displayStrings = { ...defaultDisplayStrings, ...userDisplayStrings };
44
45
  react_1.useEffect(() => {
45
46
  setSelectedMappings((selectedMappings) => selectedMappings.map((mapping) => ({
46
47
  ...mapping,
@@ -82,12 +83,12 @@ const ConfirmMappingImport = ({ sourceiModelId, selectedMappings, importing, set
82
83
  react_1.default.createElement("div", { className: 'gmw-import-progress-bar' },
83
84
  react_1.default.createElement("div", { className: 'gmw-import-progress-bar-description' }, !errored ? importCount !== selectedMappings.length ? (react_1.default.createElement(react_1.default.Fragment, null,
84
85
  react_1.default.createElement(itwinui_react_1.Text, { variant: 'title' }, "Importing"),
85
- react_1.default.createElement(itwinui_react_1.Text, null, "We are currently importing the mappings."))) : (react_1.default.createElement(react_1.default.Fragment, null,
86
+ react_1.default.createElement(itwinui_react_1.Text, null, `We are currently importing the ${displayStrings.mappings.toLocaleLowerCase()}.`))) : (react_1.default.createElement(react_1.default.Fragment, null,
86
87
  react_1.default.createElement(itwinui_react_1.Text, { variant: 'title' }, "Done!"),
87
- react_1.default.createElement(itwinui_react_1.Text, null, "Your mapping(s) are ready."))) :
88
+ react_1.default.createElement(itwinui_react_1.Text, null, `Your imported ${displayStrings.mappings.toLocaleLowerCase()} are ready.`))) :
88
89
  react_1.default.createElement(react_1.default.Fragment, null,
89
90
  react_1.default.createElement(itwinui_react_1.Text, { variant: 'title' }, "Error!"),
90
- react_1.default.createElement(itwinui_react_1.Text, null, "Sorry, there was an error importing some or all mappings."))),
91
+ react_1.default.createElement(itwinui_react_1.Text, null, `Sorry, there was an error importing some or all ${displayStrings.mappings}.`))),
91
92
  react_1.default.createElement(itwinui_react_1.ProgressLinear, { value: (importCount / selectedMappings.length) * 100, labels: importCount === selectedMappings.length
92
93
  ? ["Import done!", react_1.default.createElement(itwinui_icons_react_1.SvgStatusSuccessHollow, { key: '0' })]
93
94
  : [
@@ -108,7 +109,7 @@ const ConfirmMappingImport = ({ sourceiModelId, selectedMappings, importing, set
108
109
  react_1.default.createElement("div", { className: 'gmw-mapping-rename-container' },
109
110
  react_1.default.createElement("div", { className: 'gmw-mapping-row-header-container' },
110
111
  react_1.default.createElement("div", { className: 'gmw-mapping-row' },
111
- react_1.default.createElement(itwinui_react_1.Text, { variant: 'leading' }, "Mapping "),
112
+ react_1.default.createElement(itwinui_react_1.Text, { variant: 'leading' }, displayStrings.mappings),
112
113
  react_1.default.createElement(itwinui_react_1.Text, { variant: 'leading' }, "Description"))),
113
114
  react_1.default.createElement("div", { className: 'gmw-mapping-row-body' }, selectedMappings.map((mapping, index) => (react_1.default.createElement("div", { className: 'gmw-mapping-row-container', key: mapping.id },
114
115
  react_1.default.createElement("div", { className: 'gmw-mapping-row' },
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmMappingsImport.js","sourceRoot":"","sources":["../../../../src/widget/components/ConfirmMappingsImport.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 Button,\n LabeledInput,\n MiddleTextTruncation,\n ProgressLinear,\n Text,\n} from \"@itwin/itwinui-react\";\nimport React, { useEffect, useState } from \"react\";\nimport type { IMappingTyped } from \"./Mapping\";\nimport \"./ConfirmMappingsImport.scss\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { SvgStatusSuccessHollow } from \"@itwin/itwinui-icons-react\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError } from \"./utils\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\ninterface ConfirmMappingImportProps {\n sourceiModelId: string;\n selectedMappings: IMappingTyped[];\n importing: boolean;\n setImporting: React.Dispatch<React.SetStateAction<boolean>>;\n setSelectedMappings: React.Dispatch<React.SetStateAction<IMappingTyped[]>>;\n backFn: () => void;\n onCancel: () => void;\n onFinish: () => void;\n}\n\nconst ConfirmMappingImport = ({\n sourceiModelId,\n selectedMappings,\n importing,\n setImporting,\n setSelectedMappings,\n backFn,\n onCancel,\n onFinish,\n}: ConfirmMappingImportProps) => {\n const iModelId = useActiveIModelConnection()?.iModelId;\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n\n const [importCount, setImportCount] = useState<number>(0);\n const [currentlyImporting, setCurrentlyImporting] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [errored, setErrored] = useState<boolean>(false);\n\n useEffect(() => {\n setSelectedMappings((selectedMappings) =>\n selectedMappings.map((mapping) => ({\n ...mapping,\n mappingName: `${mapping.mappingName}_Copy`,\n })),\n );\n }, [setSelectedMappings]);\n\n const handleChange = (\n e: React.ChangeEvent<HTMLInputElement>,\n index: number,\n ) => {\n const newState = [...selectedMappings];\n newState[index] = {\n ...newState[index],\n mappingName: e.target.value,\n };\n setSelectedMappings(newState);\n };\n\n const onImport = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n setImporting(true);\n try {\n for (const selectedMapping of selectedMappings) {\n setCurrentlyImporting(selectedMapping.mappingName ?? \"\");\n const accessToken = await getAccessToken();\n await mappingClient.copyMapping(\n accessToken,\n sourceiModelId,\n selectedMapping.id ?? \"\",\n {\n targetIModelId: iModelId ?? \"\",\n mappingName: selectedMapping.mappingName ?? \"\",\n },\n );\n setImportCount((importCount) => importCount + 1);\n }\n } catch (error: any) {\n handleError(error);\n setErrored(true);\n }\n };\n\n return (\n <>\n {importing ? (\n <div className='gmw-import-progress-container'>\n <div className='gmw-import-progress-bar'>\n <div className='gmw-import-progress-bar-description'>\n {\n !errored ? importCount !== selectedMappings.length ? (\n <>\n <Text variant='title'>Importing</Text>\n <Text>We are currently importing the mappings.</Text>\n </>\n ) : (\n <>\n <Text variant='title'>Done!</Text>\n <Text>Your mapping(s) are ready.</Text>\n </>\n ) :\n <>\n <Text variant='title'>Error!</Text>\n <Text>Sorry, there was an error importing some or all mappings.</Text>\n </>}\n </div>\n <ProgressLinear\n value={(importCount / selectedMappings.length) * 100}\n labels={\n importCount === selectedMappings.length\n ? [\"Import done!\", <SvgStatusSuccessHollow key='0' />]\n : [\n <>\n <Text>Copying</Text>\n <MiddleTextTruncation text={currentlyImporting} />\n </>,\n `${importCount}/${selectedMappings.length}`,\n ]\n }\n status={\n !errored ?\n importCount === selectedMappings.length ? \"positive\" : undefined : \"negative\"\n }\n />\n </div>\n <div className='gmw-import-action-panel'>\n <Button\n disabled={!errored && importCount !== selectedMappings.length}\n onClick={() => {\n setImporting(false);\n setImportCount(0);\n setCurrentlyImporting(\"\");\n setErrored(false);\n }}\n >\n Back\n </Button>\n <Button\n styleType='high-visibility'\n disabled={!errored && importCount !== selectedMappings.length}\n onClick={() => onFinish()}\n >\n Close\n </Button>\n </div>\n </div>\n ) : (\n <div className='gmw-rename-confirm-container '>\n <div className='gmw-mapping-rename-container'>\n <div className='gmw-mapping-row-header-container'>\n <div className='gmw-mapping-row'>\n <Text variant='leading'>Mapping </Text>\n <Text variant='leading'>Description</Text>\n </div>\n </div>\n <div className='gmw-mapping-row-body'>\n {selectedMappings.map((mapping, index) => (\n <div className='gmw-mapping-row-container' key={mapping.id}>\n <div className='gmw-mapping-row'>\n <LabeledInput\n value={mapping.mappingName}\n name={`mapping_${mapping.id}`}\n required\n onChange={(event) => {\n handleChange(event, index);\n validator.showMessageFor(`mapping_${mapping.id}`);\n }}\n message={validator.message(\n `mapping_${mapping.id}`,\n mapping.mappingName,\n NAME_REQUIREMENTS,\n )}\n status={\n validator.message(\n `mapping_${mapping.id}`,\n mapping.mappingName,\n NAME_REQUIREMENTS,\n )\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(`mapping_${mapping.id}`);\n }}\n onBlurCapture={(event) => {\n handleChange(event, index);\n validator.showMessageFor(`mapping_${mapping.id}`);\n }}\n />\n <div>{mapping.description}</div>\n </div>\n <div className='gmw-border-div' />\n </div>\n ))}\n </div>\n </div>\n <div className='gmw-import-action-panel'>\n <Button onClick={backFn}>Back</Button>\n <Button styleType='high-visibility' onClick={async () => onImport()}>\n Import\n </Button>\n <Button onClick={onCancel}>Cancel</Button>\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default ConfirmMappingImport;\n"]}
1
+ {"version":3,"file":"ConfirmMappingsImport.js","sourceRoot":"","sources":["../../../../src/widget/components/ConfirmMappingsImport.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 Button,\n LabeledInput,\n MiddleTextTruncation,\n ProgressLinear,\n Text,\n} from \"@itwin/itwinui-react\";\nimport React, { useEffect, useState } from \"react\";\nimport type { IMappingTyped } from \"./Mapping\";\nimport \"./ConfirmMappingsImport.scss\";\nimport { SvgStatusSuccessHollow } from \"@itwin/itwinui-icons-react\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError } from \"./utils\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nconst defaultDisplayStrings = {\n mappings: \"Mappings\",\n};\n\ninterface ConfirmMappingImportProps {\n sourceiModelId: string;\n selectedMappings: IMappingTyped[];\n importing: boolean;\n setImporting: React.Dispatch<React.SetStateAction<boolean>>;\n setSelectedMappings: React.Dispatch<React.SetStateAction<IMappingTyped[]>>;\n backFn: () => void;\n onCancel: () => void;\n onFinish: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nconst ConfirmMappingImport = ({\n sourceiModelId,\n selectedMappings,\n importing,\n setImporting,\n setSelectedMappings,\n backFn,\n onCancel,\n onFinish,\n displayStrings: userDisplayStrings,\n}: ConfirmMappingImportProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n\n const [importCount, setImportCount] = useState<number>(0);\n const [currentlyImporting, setCurrentlyImporting] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [errored, setErrored] = useState<boolean>(false);\n\n const displayStrings = { ...defaultDisplayStrings, ...userDisplayStrings };\n\n useEffect(() => {\n setSelectedMappings((selectedMappings) =>\n selectedMappings.map((mapping) => ({\n ...mapping,\n mappingName: `${mapping.mappingName}_Copy`,\n })),\n );\n }, [setSelectedMappings]);\n\n const handleChange = (\n e: React.ChangeEvent<HTMLInputElement>,\n index: number,\n ) => {\n const newState = [...selectedMappings];\n newState[index] = {\n ...newState[index],\n mappingName: e.target.value,\n };\n setSelectedMappings(newState);\n };\n\n const onImport = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n setImporting(true);\n try {\n for (const selectedMapping of selectedMappings) {\n setCurrentlyImporting(selectedMapping.mappingName ?? \"\");\n const accessToken = await getAccessToken();\n await mappingClient.copyMapping(\n accessToken,\n sourceiModelId,\n selectedMapping.id ?? \"\",\n {\n targetIModelId: iModelId ?? \"\",\n mappingName: selectedMapping.mappingName ?? \"\",\n },\n );\n setImportCount((importCount) => importCount + 1);\n }\n } catch (error: any) {\n handleError(error);\n setErrored(true);\n }\n };\n\n return (\n <>\n {importing ? (\n <div className='gmw-import-progress-container'>\n <div className='gmw-import-progress-bar'>\n <div className='gmw-import-progress-bar-description'>\n {\n !errored ? importCount !== selectedMappings.length ? (\n <>\n <Text variant='title'>Importing</Text>\n <Text>{`We are currently importing the ${displayStrings.mappings.toLocaleLowerCase()}.`}</Text>\n </>\n ) : (\n <>\n <Text variant='title'>Done!</Text>\n <Text>{`Your imported ${displayStrings.mappings.toLocaleLowerCase()} are ready.`}</Text>\n </>\n ) :\n <>\n <Text variant='title'>Error!</Text>\n <Text>{`Sorry, there was an error importing some or all ${displayStrings.mappings}.`}</Text>\n </>}\n </div>\n <ProgressLinear\n value={(importCount / selectedMappings.length) * 100}\n labels={\n importCount === selectedMappings.length\n ? [\"Import done!\", <SvgStatusSuccessHollow key='0' />]\n : [\n <>\n <Text>Copying</Text>\n <MiddleTextTruncation text={currentlyImporting} />\n </>,\n `${importCount}/${selectedMappings.length}`,\n ]\n }\n status={\n !errored ?\n importCount === selectedMappings.length ? \"positive\" : undefined : \"negative\"\n }\n />\n </div>\n <div className='gmw-import-action-panel'>\n <Button\n disabled={!errored && importCount !== selectedMappings.length}\n onClick={() => {\n setImporting(false);\n setImportCount(0);\n setCurrentlyImporting(\"\");\n setErrored(false);\n }}\n >\n Back\n </Button>\n <Button\n styleType='high-visibility'\n disabled={!errored && importCount !== selectedMappings.length}\n onClick={() => onFinish()}\n >\n Close\n </Button>\n </div>\n </div>\n ) : (\n <div className='gmw-rename-confirm-container '>\n <div className='gmw-mapping-rename-container'>\n <div className='gmw-mapping-row-header-container'>\n <div className='gmw-mapping-row'>\n <Text variant='leading'>{displayStrings.mappings}</Text>\n <Text variant='leading'>Description</Text>\n </div>\n </div>\n <div className='gmw-mapping-row-body'>\n {selectedMappings.map((mapping, index) => (\n <div className='gmw-mapping-row-container' key={mapping.id}>\n <div className='gmw-mapping-row'>\n <LabeledInput\n value={mapping.mappingName}\n name={`mapping_${mapping.id}`}\n required\n onChange={(event) => {\n handleChange(event, index);\n validator.showMessageFor(`mapping_${mapping.id}`);\n }}\n message={validator.message(\n `mapping_${mapping.id}`,\n mapping.mappingName,\n NAME_REQUIREMENTS,\n )}\n status={\n validator.message(\n `mapping_${mapping.id}`,\n mapping.mappingName,\n NAME_REQUIREMENTS,\n )\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(`mapping_${mapping.id}`);\n }}\n onBlurCapture={(event) => {\n handleChange(event, index);\n validator.showMessageFor(`mapping_${mapping.id}`);\n }}\n />\n <div>{mapping.description}</div>\n </div>\n <div className='gmw-border-div' />\n </div>\n ))}\n </div>\n </div>\n <div className='gmw-import-action-panel'>\n <Button onClick={backFn}>Back</Button>\n <Button styleType='high-visibility' onClick={async () => onImport()}>\n Import\n </Button>\n <Button onClick={onCancel}>Cancel</Button>\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default ConfirmMappingImport;\n"]}
@@ -1,14 +1,18 @@
1
1
  /// <reference types="react" />
2
- import type { IGroupTyped } from "./Grouping";
3
2
  import "./GroupAction.scss";
4
- interface GroupActionProps {
5
- iModelId: string;
3
+ import type { Group } from "@itwin/insights-client";
4
+ declare const defaultDisplayStrings: {
5
+ groupDetails: string;
6
+ groupBy: string;
7
+ };
8
+ export interface GroupActionProps {
6
9
  mappingId: string;
7
- group?: IGroupTyped;
8
- queryGenerationType?: string;
9
- goBack: () => Promise<void>;
10
- resetView: () => Promise<void>;
10
+ group?: Group;
11
+ queryGenerationType: string;
12
+ onSaveSuccess: () => void;
13
+ onClickCancel?: () => void;
14
+ displayStrings?: Partial<typeof defaultDisplayStrings>;
11
15
  }
12
- declare const GroupAction: (props: GroupActionProps) => JSX.Element;
13
- export default GroupAction;
16
+ export declare const GroupAction: (props: GroupActionProps) => JSX.Element;
17
+ export {};
14
18
  //# sourceMappingURL=GroupAction.d.ts.map
@@ -22,30 +22,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.GroupAction = void 0;
25
26
  const presentation_frontend_1 = require("@itwin/presentation-frontend");
26
27
  const appui_react_1 = require("@itwin/appui-react");
27
28
  const itwinui_react_1 = require("@itwin/itwinui-react");
28
29
  const react_1 = __importStar(require("react"));
29
30
  const utils_1 = require("./utils");
30
- const Grouping_1 = require("./Grouping");
31
31
  require("./GroupAction.scss");
32
32
  const ActionPanel_1 = __importDefault(require("./ActionPanel"));
33
33
  const useValidator_1 = __importStar(require("../hooks/useValidator"));
34
- const GroupQueryBuilderContainer_1 = require("./GroupQueryBuilderContainer");
35
34
  const viewerUtils_1 = require("./viewerUtils");
36
35
  const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
37
36
  const MappingClientContext_1 = require("./context/MappingClientContext");
38
37
  const GroupingMappingCustomUIContext_1 = require("./context/GroupingMappingCustomUIContext");
39
38
  const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
40
- const SearchGroupingCustomUI_1 = __importDefault(require("./customUI/SearchGroupingCustomUI"));
41
- const ManualGroupingCustomUI_1 = __importDefault(require("./customUI/ManualGroupingCustomUI"));
42
39
  const GroupingMappingCustomUI_1 = require("./customUI/GroupingMappingCustomUI");
40
+ const GroupHilitedElementsContext_1 = require("./context/GroupHilitedElementsContext");
41
+ const groupsHelpers_1 = require("./groupsHelpers");
42
+ const defaultDisplayStrings = {
43
+ groupDetails: "Group Details",
44
+ groupBy: "Group By",
45
+ };
43
46
  const GroupAction = (props) => {
44
- var _a, _b, _c, _d, _e;
47
+ var _a, _b, _c, _d;
45
48
  const iModelConnection = appui_react_1.useActiveIModelConnection();
46
- const { getAccessToken } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
49
+ const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = GroupHilitedElementsContext_1.useGroupHilitedElementsContext();
50
+ const { getAccessToken, iModelId } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
47
51
  const mappingClient = MappingClientContext_1.useMappingClient();
48
- const groupUIs = GroupingMappingCustomUIContext_1.useGroupingMappingCustomUI()
52
+ const groupUIs = GroupingMappingCustomUIContext_1.useGroupingMappingCustomUI().customUIs
49
53
  .filter((p) => p.type === GroupingMappingCustomUI_1.GroupingMappingCustomUIType.Grouping);
50
54
  const [details, setDetails] = react_1.useState({
51
55
  groupName: (_b = (_a = props.group) === null || _a === void 0 ? void 0 : _a.groupName) !== null && _b !== void 0 ? _b : "",
@@ -58,13 +62,30 @@ const GroupAction = (props) => {
58
62
  const [isRendering, setIsRendering] = react_1.useState(false);
59
63
  const [queryGenerationType, setQueryGenerationType] = react_1.useState(props.queryGenerationType);
60
64
  const isUpdating = isLoading || isRendering;
65
+ react_1.useEffect(() => {
66
+ if (!iModelConnection) {
67
+ throw new Error("This component requires an active iModelConnection.");
68
+ }
69
+ }, [iModelConnection]);
70
+ const displayStrings = { ...defaultDisplayStrings, ...props.displayStrings };
71
+ const resetView = async () => {
72
+ if (groups.length > 0) {
73
+ if (showGroupColor) {
74
+ await groupsHelpers_1.visualizeGroupColors(iModelConnection, groups, groups, hiddenGroupsIds, hilitedElementsQueryCache);
75
+ }
76
+ else {
77
+ viewerUtils_1.clearOverriddenElements();
78
+ }
79
+ }
80
+ viewerUtils_1.clearEmphasizedElements();
81
+ };
61
82
  const changeGroupByType = async (event) => {
62
83
  const { target: { value }, } = event;
63
84
  setQueryGenerationType(value);
64
85
  presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
65
86
  setQuery("");
66
87
  setSimpleSelectionQuery("");
67
- await props.resetView();
88
+ await resetView();
68
89
  };
69
90
  react_1.useEffect(() => {
70
91
  const removeListener = presentation_frontend_1.Presentation.selection.selectionChange.addListener(async (evt, selectionProvider) => {
@@ -104,7 +125,7 @@ const GroupAction = (props) => {
104
125
  presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
105
126
  }, [iModelConnection]);
106
127
  const save = react_1.useCallback(async () => {
107
- var _a;
128
+ var _a, _b, _c, _d, _e;
108
129
  if (!validator.allValid()) {
109
130
  showValidationMessage(true);
110
131
  return;
@@ -114,54 +135,37 @@ const GroupAction = (props) => {
114
135
  const currentQuery = query || simpleSelectionQuery;
115
136
  const accessToken = await getAccessToken();
116
137
  props.group
117
- ? await mappingClient.updateGroup(accessToken, props.iModelId, props.mappingId, (_a = props.group.id) !== null && _a !== void 0 ? _a : "", { ...details, query: currentQuery })
118
- : await mappingClient.createGroup(accessToken, props.iModelId, props.mappingId, {
138
+ ? await mappingClient.updateGroup(accessToken, iModelId, props.mappingId, (_a = props.group.id) !== null && _a !== void 0 ? _a : "", { ...details, query: currentQuery })
139
+ : await mappingClient.createGroup(accessToken, iModelId, props.mappingId, {
119
140
  ...details,
120
141
  query: currentQuery,
121
142
  });
122
143
  presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
123
- await props.goBack();
144
+ setDetails({
145
+ groupName: (_c = (_b = props.group) === null || _b === void 0 ? void 0 : _b.groupName) !== null && _c !== void 0 ? _c : "",
146
+ description: (_e = (_d = props.group) === null || _d === void 0 ? void 0 : _d.description) !== null && _e !== void 0 ? _e : "",
147
+ });
148
+ props.onSaveSuccess();
124
149
  }
125
150
  catch (error) {
126
151
  utils_1.handleError(error.status);
152
+ }
153
+ finally {
127
154
  setIsLoading(false);
128
155
  }
129
- }, [
130
- validator,
131
- showValidationMessage,
132
- query,
133
- simpleSelectionQuery,
134
- getAccessToken,
135
- props,
136
- mappingClient,
137
- details,
138
- iModelConnection,
139
- ]);
156
+ }, [validator, showValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, iModelConnection]);
140
157
  const createQueryBuilderComponent = () => {
141
- switch (queryGenerationType) {
142
- case "Selection": {
143
- return (react_1.default.createElement(GroupQueryBuilderContainer_1.GroupQueryBuilderContainer, { updateQuery: setQuery, isUpdating: isUpdating, resetView: props.resetView }));
144
- }
145
- case "Search": {
146
- return (react_1.default.createElement(SearchGroupingCustomUI_1.default, { updateQuery: setQuery, isUpdating: isUpdating, resetView: props.resetView }));
147
- }
148
- case "Manual": {
149
- return (react_1.default.createElement(ManualGroupingCustomUI_1.default, { updateQuery: setQuery, isUpdating: isUpdating, resetView: props.resetView }));
150
- }
151
- default: {
152
- if (queryGenerationType && queryGenerationType.length > 0) {
153
- const selectedCustomUI = groupUIs.find((e) => e.name === queryGenerationType);
154
- if (selectedCustomUI) {
155
- return react_1.default.createElement(selectedCustomUI.uiComponent, {
156
- updateQuery: setQuery,
157
- isUpdating,
158
- resetView: props.resetView,
159
- });
160
- }
161
- }
162
- return react_1.default.createElement(utils_1.EmptyMessage, { message: 'No query generation method selected. ' });
158
+ if (queryGenerationType && queryGenerationType.length > 0) {
159
+ const selectedCustomUI = groupUIs.find((e) => e.name === queryGenerationType);
160
+ if (selectedCustomUI) {
161
+ return react_1.default.createElement(selectedCustomUI.uiComponent, {
162
+ updateQuery: setQuery,
163
+ isUpdating,
164
+ resetView,
165
+ });
163
166
  }
164
167
  }
168
+ return react_1.default.createElement(utils_1.EmptyMessage, { message: 'No query generation method selected. ' });
165
169
  };
166
170
  const isBlockingActions = !(details.groupName &&
167
171
  (query || simpleSelectionQuery) &&
@@ -171,12 +175,8 @@ const GroupAction = (props) => {
171
175
  return (react_1.default.createElement(itwinui_react_1.RadioTile, { name: "groupby", icon: icon, key: value, onChange: changeGroupByType, value: value, label: label, disabled: isUpdating, checked: queryGenerationType === value }));
172
176
  };
173
177
  return (react_1.default.createElement(react_1.default.Fragment, null,
174
- react_1.default.createElement(utils_1.WidgetHeader, { title: props.group ? (_e = props.group.groupName) !== null && _e !== void 0 ? _e : "" : "Add Group", returnFn: async () => {
175
- presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
176
- await props.goBack();
177
- } }),
178
178
  react_1.default.createElement("div", { className: 'gmw-group-add-modify-container' },
179
- react_1.default.createElement(itwinui_react_1.Fieldset, { legend: 'Group Details', className: 'gmw-group-details' },
179
+ react_1.default.createElement(itwinui_react_1.Fieldset, { legend: displayStrings.groupDetails, className: 'gmw-group-details' },
180
180
  react_1.default.createElement(itwinui_react_1.Small, { className: 'gmw-field-legend' }, "Asterisk * indicates mandatory fields."),
181
181
  react_1.default.createElement(itwinui_react_1.LabeledInput, { id: 'groupName', name: 'groupName', label: 'Name', value: details.groupName, required: true, onChange: (event) => {
182
182
  utils_1.handleInputChange(event, details, setDetails);
@@ -192,17 +192,15 @@ const GroupAction = (props) => {
192
192
  react_1.default.createElement(itwinui_react_1.LabeledInput, { id: 'description', name: 'description', label: 'Description', value: details.description, onChange: (event) => {
193
193
  utils_1.handleInputChange(event, details, setDetails);
194
194
  } })),
195
- react_1.default.createElement(itwinui_react_1.Fieldset, { legend: 'Group By', className: 'gmw-query-builder-container' },
196
- react_1.default.createElement(itwinui_react_1.RadioTileGroup, { className: 'gmw-radio-group-tile', required: true }, groupUIs.length === 0
197
- ? (Grouping_1.defaultUIMetadata.map((p) => getRadioTileComponent(p.icon, p.name, p.displayLabel)))
198
- : (groupUIs.map((ext) => { var _a; return getRadioTileComponent((_a = ext.icon) !== null && _a !== void 0 ? _a : react_1.default.createElement(itwinui_icons_react_1.SvgAdd, null), ext.name, ext.displayLabel); }))),
195
+ react_1.default.createElement(itwinui_react_1.Fieldset, { legend: displayStrings.groupBy, className: 'gmw-query-builder-container' },
196
+ react_1.default.createElement(itwinui_react_1.RadioTileGroup, { className: 'gmw-radio-group-tile', required: true }, groupUIs.map((ext) => { var _a; return getRadioTileComponent((_a = ext.icon) !== null && _a !== void 0 ? _a : react_1.default.createElement(itwinui_icons_react_1.SvgAdd, null), ext.name, ext.displayLabel); })),
199
197
  queryGenerationType && createQueryBuilderComponent())),
200
198
  react_1.default.createElement(ActionPanel_1.default, { onSave: async () => {
201
199
  await save();
202
- }, onCancel: async () => {
200
+ }, onCancel: props.onClickCancel ? async () => {
203
201
  presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
204
- await props.goBack();
205
- }, isSavingDisabled: isBlockingActions, isLoading: isLoading })));
202
+ props.onClickCancel && props.onClickCancel();
203
+ } : undefined, isSavingDisabled: isBlockingActions, isLoading: isLoading })));
206
204
  };
207
- exports.default = GroupAction;
205
+ exports.GroupAction = GroupAction;
208
206
  //# sourceMappingURL=GroupAction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AASA,wEAA4D;AAC5D,oDAA+D;AAC/D,wDAO8B;AAE9B,+CAAgE;AAChE,mCAKiB;AAEjB,yCAA+C;AAC/C,8BAA4B;AAC5B,gEAAwC;AACxC,sEAAwE;AACxE,6EAA0E;AAC1E,+CAIuB;AACvB,iFAAiF;AACjF,yEAAkE;AAClE,6FAAsF;AACtF,oEAAoD;AACpD,+FAAuE;AACvE,+FAAuE;AAEvE,gFAAiF;AAWjF,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;;IAC9C,MAAM,gBAAgB,GAAG,uCAAyB,EAAsB,CAAC;IACzE,MAAM,EAAE,cAAc,EAAE,GAAG,sDAA2B,EAAE,CAAC;IACzD,MAAM,aAAa,GAAG,uCAAgB,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAuB,2DAA0B,EAAE;SAC9D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qDAA2B,CAAC,QAAQ,CAAuB,CAAC;IAExF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,gBAAQ,CAAC;QACrC,SAAS,EAAE,MAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,SAAS,mCAAI,EAAE;QACvC,WAAW,EAAE,MAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,WAAW,mCAAI,EAAE;KAC5C,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,gBAAQ,CAAS,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,gBAAQ,CAAS,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,sBAAY,EAAE,CAAC;IAC1D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAC3D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAC/D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,gBAAQ,CAC5D,KAAK,CAAC,mBAAmB,CAC1B,CAAC;IAEF,MAAM,UAAU,GAAG,SAAS,IAAI,WAAW,CAAC;IAE5C,MAAM,iBAAiB,GAAG,KAAK,EAC7B,KAA0C,EAC1C,EAAE;QACF,MAAM,EACJ,MAAM,EAAE,EAAE,KAAK,EAAE,GAClB,GAAG,KAAK,CAAC;QACV,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC9B,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;QACF,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,iBAAS,CAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAAG,oCAAY,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CACvE,KAAK,EACH,GAA6B,EAC7B,iBAAqC,EACrC,EAAE;YACF,IAAI,mBAAmB,KAAK,WAAW,EAAE;gBACvC,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAC9C,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,KAAK,CACV,CAAC;gBACF,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC;oBAC3C,CAAC,CAAC,4BAA4B,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;oBAC1E,CAAC,CAAC,EAAE,CAAC;gBACP,uBAAuB,CAAC,KAAK,CAAC,CAAC;aAChC;QACH,CAAC,CACF,CAAC;QACF,OAAO,GAAG,EAAE;YACV,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE5C,iBAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;YAC7B,IAAI;gBACF,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE;oBAC1B,OAAO;iBACR;gBAED,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,2CAA6B,EAAE,CAAC;gBAChC,MAAM,iBAAiB,GAAG,MAAM,sCAAwB,CACtD,KAAK,EACL,KAAK,EACL,gBAAgB,CACjB,CAAC;gBACF,MAAM,4BAAc,CAAC,iBAAiB,CAAC,CAAC;aACzC;YAAC,MAAM;gBACN,uBAAO,CAAC,QAAQ,CAAC,qDAAqD,CAAC,CAAC;aACzE;oBAAS;gBACR,cAAc,CAAC,KAAK,CAAC,CAAC;aACvB;QACH,CAAC,CAAC;QAEF,KAAK,WAAW,EAAE,CAAC;IACrB,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9B,iBAAS,CAAC,GAAG,EAAE;QACb,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,MAAM,IAAI,GAAG,mBAAW,CAAC,KAAK,IAAI,EAAE;;QAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;YACzB,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO;SACR;QACD,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,YAAY,GAAG,KAAK,IAAI,oBAAoB,CAAC;YAEnD,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YAE3C,KAAK,CAAC,KAAK;gBACT,CAAC,CAAC,MAAM,aAAa,CAAC,WAAW,CAC/B,WAAW,EACX,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,EACf,MAAA,KAAK,CAAC,KAAK,CAAC,EAAE,mCAAI,EAAE,EACpB,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CACpC;gBACD,CAAC,CAAC,MAAM,aAAa,CAAC,WAAW,CAC/B,WAAW,EACX,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,EACf;oBACE,GAAG,OAAO;oBACV,KAAK,EAAE,YAAY;iBACpB,CACF,CAAC;YACJ,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;YACF,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;SACtB;QAAC,OAAO,KAAU,EAAE;YACnB,mBAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,EAAE;QACD,SAAS;QACT,qBAAqB;QACrB,KAAK;QACL,oBAAoB;QACpB,cAAc;QACd,KAAK;QACL,aAAa;QACb,OAAO;QACP,gBAAgB;KACjB,CAAC,CAAC;IAEH,MAAM,2BAA2B,GAAG,GAAG,EAAE;QACvC,QAAQ,mBAAmB,EAAE;YAC3B,KAAK,WAAW,CAAC,CAAC;gBAChB,OAAO,CACL,8BAAC,uDAA0B,IACzB,WAAW,EAAE,QAAQ,EACrB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,KAAK,CAAC,SAAS,GAC1B,CACH,CAAC;aACH;YACD,KAAK,QAAQ,CAAC,CAAC;gBACb,OAAO,CACL,8BAAC,gCAAsB,IACrB,WAAW,EAAE,QAAQ,EACrB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,KAAK,CAAC,SAAS,GAC1B,CACH,CAAC;aACH;YACD,KAAK,QAAQ,CAAC,CAAC;gBACb,OAAO,CACL,8BAAC,gCAAsB,IACrB,WAAW,EAAE,QAAQ,EACrB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,KAAK,CAAC,SAAS,GAC1B,CACH,CAAC;aACH;YACD,OAAO,CAAC,CAAC;gBACP,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CACtC,CAAC;oBACF,IAAI,gBAAgB,EAAE;wBACpB,OAAO,eAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE;4BACvD,WAAW,EAAE,QAAQ;4BACrB,UAAU;4BACV,SAAS,EAAE,KAAK,CAAC,SAAS;yBAC3B,CAAC,CAAC;qBACJ;iBACF;gBACD,OAAO,8BAAC,oBAAY,IAAC,OAAO,EAAC,uCAAuC,GAAG,CAAC;aACzE;SACF;IACH,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,CACzB,OAAO,CAAC,SAAS;QACjB,CAAC,KAAK,IAAI,oBAAoB,CAAC;QAC/B,CAAC,WAAW;QACZ,CAAC,SAAS,CACX,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAC5B,IAAkB,EAClB,KAAa,EACb,KAAa,EACb,EAAE;QACF,OAAO,CACL,8BAAC,yBAAS,IACR,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,KAAK,EACV,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,mBAAmB,KAAK,KAAK,GACtC,CACH,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL;QACE,8BAAC,oBAAY,IACX,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAA,KAAK,CAAC,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAC9D,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;gBACF,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YACvB,CAAC,GACD;QACF,uCAAK,SAAS,EAAC,gCAAgC;YAC7C,8BAAC,wBAAQ,IAAC,MAAM,EAAC,eAAe,EAAC,SAAS,EAAC,mBAAmB;gBAC5D,8BAAC,qBAAK,IAAC,SAAS,EAAC,kBAAkB,6CAE3B;gBACR,8BAAC,4BAAY,IACX,EAAE,EAAC,WAAW,EACd,IAAI,EAAC,WAAW,EAChB,KAAK,EAAC,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,SAAS,EACxB,QAAQ,QACR,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,yBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC9C,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBACxC,CAAC,EACD,OAAO,EAAE,SAAS,CAAC,OAAO,CACxB,WAAW,EACX,OAAO,CAAC,SAAS,EACjB,gCAAiB,CAClB,EACD,MAAM,EACJ,SAAS,CAAC,OAAO,CACf,WAAW,EACX,OAAO,CAAC,SAAS,EACjB,gCAAiB,CAClB;wBACC,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,SAAS,EAEf,MAAM,EAAE,GAAG,EAAE;wBACX,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBACxC,CAAC,EACD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,yBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC9C,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBACxC,CAAC,GACD;gBACF,8BAAC,4BAAY,IACX,EAAE,EAAC,aAAa,EAChB,IAAI,EAAC,aAAa,EAClB,KAAK,EAAC,aAAa,EACnB,KAAK,EAAE,OAAO,CAAC,WAAW,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,yBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBAChD,CAAC,GACD,CACO;YACX,8BAAC,wBAAQ,IAAC,MAAM,EAAC,UAAU,EAAC,SAAS,EAAC,6BAA6B;gBACjE,8BAAC,8BAAc,IAAC,SAAS,EAAC,sBAAsB,EAAC,QAAQ,UACtD,QAAQ,CAAC,MAAM,KAAK,CAAC;oBACpB,CAAC,CAAC,CACA,4BAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1B,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CACtD,CACF;oBACD,CAAC,CAAC,CACA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WACnB,OAAA,qBAAqB,CAAC,MAAA,GAAG,CAAC,IAAI,mCAAI,8BAAC,4BAAM,OAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,CAAA,EAAA,CAC1E,CACF,CACY;gBAChB,mBAAmB,IAAI,2BAA2B,EAAE,CAC5C,CACP;QACN,8BAAC,qBAAW,IACV,MAAM,EAAE,KAAK,IAAI,EAAE;gBACjB,MAAM,IAAI,EAAE,CAAC;YACf,CAAC,EACD,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;gBACF,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YACvB,CAAC,EACD,gBAAgB,EAAE,iBAAiB,EACnC,SAAS,EAAE,SAAS,GACpB,CACD,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,WAAW,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport {\n Fieldset,\n LabeledInput,\n RadioTile,\n RadioTileGroup,\n Small,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport type { ReactElement } from \"react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n EmptyMessage,\n handleError,\n handleInputChange,\n WidgetHeader,\n} from \"./utils\";\nimport type { IGroupTyped } from \"./Grouping\";\nimport { defaultUIMetadata } from \"./Grouping\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { GroupQueryBuilderContainer } from \"./GroupQueryBuilderContainer\";\nimport {\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport { SvgAdd } from \"@itwin/itwinui-icons-react\";\nimport SearchGroupingCustomUI from \"./customUI/SearchGroupingCustomUI\";\nimport ManualGroupingCustomUI from \"./customUI/ManualGroupingCustomUI\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\n\ninterface GroupActionProps {\n iModelId: string;\n mappingId: string;\n group?: IGroupTyped;\n queryGenerationType?: string;\n goBack: () => Promise<void>;\n resetView: () => Promise<void>;\n}\n\nconst GroupAction = (props: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI()\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [queryGenerationType, setQueryGenerationType] = useState(\n props.queryGenerationType,\n );\n\n const isUpdating = isLoading || isRendering;\n\n const changeGroupByType = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const {\n target: { value },\n } = event;\n setQueryGenerationType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await props.resetView();\n };\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(\n evt.imodel,\n evt.level,\n );\n const query = selection.instanceKeys.size > 0\n ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`\n : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection, queryGenerationType]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n\n setIsRendering(true);\n transparentOverriddenElements();\n const resolvedHiliteIds = await visualizeElementsByQuery(\n query,\n \"red\",\n iModelConnection,\n );\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(\"Sorry, we have failed to generate a valid query. 😔\");\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n props.group\n ? await mappingClient.updateGroup(\n accessToken,\n props.iModelId,\n props.mappingId,\n props.group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(\n accessToken,\n props.iModelId,\n props.mappingId,\n {\n ...details,\n query: currentQuery,\n },\n );\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await props.goBack();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n }, [\n validator,\n showValidationMessage,\n query,\n simpleSelectionQuery,\n getAccessToken,\n props,\n mappingClient,\n details,\n iModelConnection,\n ]);\n\n const createQueryBuilderComponent = () => {\n switch (queryGenerationType) {\n case \"Selection\": {\n return (\n <GroupQueryBuilderContainer\n updateQuery={setQuery}\n isUpdating={isUpdating}\n resetView={props.resetView}\n />\n );\n }\n case \"Search\": {\n return (\n <SearchGroupingCustomUI\n updateQuery={setQuery}\n isUpdating={isUpdating}\n resetView={props.resetView}\n />\n );\n }\n case \"Manual\": {\n return (\n <ManualGroupingCustomUI\n updateQuery={setQuery}\n isUpdating={isUpdating}\n resetView={props.resetView}\n />\n );\n }\n default: {\n if (queryGenerationType && queryGenerationType.length > 0) {\n const selectedCustomUI = groupUIs.find(\n (e) => e.name === queryGenerationType,\n );\n if (selectedCustomUI) {\n return React.createElement(selectedCustomUI.uiComponent, {\n updateQuery: setQuery,\n isUpdating,\n resetView: props.resetView,\n });\n }\n }\n return <EmptyMessage message='No query generation method selected. ' />;\n }\n }\n };\n\n const isBlockingActions = !(\n details.groupName &&\n (query || simpleSelectionQuery) &&\n !isRendering &&\n !isLoading\n );\n\n const getRadioTileComponent = (\n icon: ReactElement,\n value: string,\n label: string,\n ) => {\n return (\n <RadioTile\n name={\"groupby\"}\n icon={icon}\n key={value}\n onChange={changeGroupByType}\n value={value}\n label={label}\n disabled={isUpdating}\n checked={queryGenerationType === value}\n />\n );\n };\n\n return (\n <>\n <WidgetHeader\n title={props.group ? props.group.groupName ?? \"\" : \"Add Group\"}\n returnFn={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await props.goBack();\n }}\n />\n <div className='gmw-group-add-modify-container'>\n <Fieldset legend='Group Details' className='gmw-group-details'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='groupName'\n name='groupName'\n label='Name'\n value={details.groupName}\n required\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n message={validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )}\n status={\n validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"groupName\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={details.description}\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n }}\n />\n </Fieldset>\n <Fieldset legend='Group By' className='gmw-query-builder-container'>\n <RadioTileGroup className='gmw-radio-group-tile' required>\n {groupUIs.length === 0\n ? (\n defaultUIMetadata.map((p) =>\n getRadioTileComponent(p.icon, p.name, p.displayLabel)\n )\n )\n : (\n groupUIs.map((ext) =>\n getRadioTileComponent(ext.icon ?? <SvgAdd />, ext.name, ext.displayLabel),\n )\n )}\n </RadioTileGroup>\n {queryGenerationType && createQueryBuilderComponent()}\n </Fieldset>\n </div>\n <ActionPanel\n onSave={async () => {\n await save();\n }}\n onCancel={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await props.goBack();\n }}\n isSavingDisabled={isBlockingActions}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default GroupAction;\n"]}
1
+ {"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.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 { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport {\n Fieldset,\n LabeledInput,\n RadioTile,\n RadioTileGroup,\n Small,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport type { ReactElement } from \"react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n EmptyMessage,\n handleError,\n handleInputChange,\n} from \"./utils\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport {\n clearEmphasizedElements,\n clearOverriddenElements,\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport { SvgAdd } from \"@itwin/itwinui-icons-react\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"./groupsHelpers\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nexport interface GroupActionProps {\n mappingId: string;\n group?: Group;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const GroupAction = (props: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [queryGenerationType, setQueryGenerationType] = useState(\n props.queryGenerationType,\n );\n const isUpdating = isLoading || isRendering;\n\n useEffect(() => {\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n }, [iModelConnection]);\n\n const displayStrings = { ...defaultDisplayStrings, ...props.displayStrings };\n\n const resetView = async () => {\n if (groups.length > 0) {\n if (showGroupColor) {\n await visualizeGroupColors(iModelConnection, groups, groups, hiddenGroupsIds, hilitedElementsQueryCache);\n } else {\n clearOverriddenElements();\n }\n }\n clearEmphasizedElements();\n };\n\n const changeGroupByType = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const {\n target: { value },\n } = event;\n setQueryGenerationType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n };\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(\n evt.imodel,\n evt.level,\n );\n const query = selection.instanceKeys.size > 0\n ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`\n : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection, queryGenerationType]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n\n setIsRendering(true);\n transparentOverriddenElements();\n const resolvedHiliteIds = await visualizeElementsByQuery(\n query,\n \"red\",\n iModelConnection,\n );\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(\"Sorry, we have failed to generate a valid query. 😔\");\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n props.group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n props.mappingId,\n props.group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(\n accessToken,\n iModelId,\n props.mappingId,\n {\n ...details,\n query: currentQuery,\n },\n );\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n props.onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [validator, showValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, iModelConnection]);\n\n const createQueryBuilderComponent = () => {\n if (queryGenerationType && queryGenerationType.length > 0) {\n const selectedCustomUI = groupUIs.find(\n (e) => e.name === queryGenerationType,\n );\n if (selectedCustomUI) {\n return React.createElement(selectedCustomUI.uiComponent, {\n updateQuery: setQuery,\n isUpdating,\n resetView,\n });\n }\n }\n return <EmptyMessage message='No query generation method selected. ' />;\n };\n\n const isBlockingActions = !(\n details.groupName &&\n (query || simpleSelectionQuery) &&\n !isRendering &&\n !isLoading\n );\n\n const getRadioTileComponent = (\n icon: ReactElement,\n value: string,\n label: string,\n ) => {\n return (\n <RadioTile\n name={\"groupby\"}\n icon={icon}\n key={value}\n onChange={changeGroupByType}\n value={value}\n label={label}\n disabled={isUpdating}\n checked={queryGenerationType === value}\n />\n );\n };\n\n return (\n <>\n <div className='gmw-group-add-modify-container'>\n <Fieldset legend={displayStrings.groupDetails} className='gmw-group-details'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='groupName'\n name='groupName'\n label='Name'\n value={details.groupName}\n required\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n message={validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )}\n status={\n validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"groupName\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={details.description}\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n }}\n />\n </Fieldset>\n <Fieldset legend={displayStrings.groupBy} className='gmw-query-builder-container'>\n <RadioTileGroup className='gmw-radio-group-tile' required>\n {groupUIs.map((ext) => getRadioTileComponent(ext.icon ?? <SvgAdd />, ext.name, ext.displayLabel))}\n </RadioTileGroup>\n {queryGenerationType && createQueryBuilderComponent()}\n </Fieldset>\n </div>\n <ActionPanel\n onSave={async () => {\n await save();\n }}\n onCancel={props.onClickCancel ? async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n props.onClickCancel && props.onClickCancel();\n } : undefined}\n isSavingDisabled={isBlockingActions}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
@@ -3,7 +3,7 @@ import type { KeySet } from "@itwin/presentation-common";
3
3
  import type { SelectOption } from "@itwin/itwinui-react";
4
4
  import { QuantityType } from "@itwin/insights-client";
5
5
  import "./GroupPropertyAction.scss";
6
- interface GroupPropertyActionProps {
6
+ export interface GroupPropertyActionProps {
7
7
  iModelId: string;
8
8
  mappingId: string;
9
9
  groupId: string;