@itwin/grouping-mapping-widget 0.5.8 → 0.7.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 (146) hide show
  1. package/README.md +84 -0
  2. package/lib/cjs/grouping-mapping-widget.d.ts +1 -1
  3. package/lib/cjs/grouping-mapping-widget.js +3 -2
  4. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  5. package/lib/cjs/test/GroupingMappingCustomUI.test.d.ts +2 -0
  6. package/lib/cjs/test/GroupingMappingCustomUI.test.js +162 -0
  7. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -0
  8. package/lib/cjs/test/WidgetHeader.test.d.ts +2 -0
  9. package/lib/cjs/test/WidgetHeader.test.js +36 -0
  10. package/lib/cjs/test/WidgetHeader.test.js.map +1 -0
  11. package/lib/cjs/test/test-utils.d.ts +72 -0
  12. package/lib/cjs/test/test-utils.js +71 -0
  13. package/lib/cjs/test/test-utils.js.map +1 -0
  14. package/lib/cjs/widget/components/CalculatedPropertyAction.d.ts +2 -2
  15. package/lib/cjs/widget/components/CalculatedPropertyAction.js +13 -13
  16. package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
  17. package/lib/cjs/widget/components/CalculatedPropertyTable.d.ts +5 -5
  18. package/lib/cjs/widget/components/CalculatedPropertyTable.js.map +1 -1
  19. package/lib/cjs/widget/components/ConfirmMappingsImport.d.ts +3 -3
  20. package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
  21. package/lib/cjs/widget/components/CustomCalculationAction.d.ts +2 -2
  22. package/lib/cjs/widget/components/CustomCalculationAction.js +5 -5
  23. package/lib/cjs/widget/components/CustomCalculationAction.js.map +1 -1
  24. package/lib/cjs/widget/components/CustomCalculationTable.d.ts +5 -5
  25. package/lib/cjs/widget/components/CustomCalculationTable.js.map +1 -1
  26. package/lib/cjs/widget/components/GroupAction.d.ts +4 -3
  27. package/lib/cjs/widget/components/GroupAction.js +82 -75
  28. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  29. package/lib/cjs/widget/components/GroupAction.scss +1 -13
  30. package/lib/cjs/widget/components/GroupPropertyAction.d.ts +2 -1
  31. package/lib/cjs/widget/components/GroupPropertyAction.js +27 -26
  32. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  33. package/lib/cjs/widget/components/GroupPropertyTable.d.ts +5 -5
  34. package/lib/cjs/widget/components/GroupPropertyTable.js.map +1 -1
  35. package/lib/cjs/widget/components/Grouping.d.ts +6 -1
  36. package/lib/cjs/widget/components/Grouping.js +128 -66
  37. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  38. package/lib/cjs/widget/components/Grouping.scss +21 -2
  39. package/lib/cjs/widget/components/GroupingMapping.d.ts +8 -3
  40. package/lib/cjs/widget/components/GroupingMapping.js +22 -9
  41. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  42. package/lib/cjs/widget/components/Mapping.d.ts +1 -1
  43. package/lib/cjs/widget/components/Mapping.js +6 -7
  44. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  45. package/lib/cjs/widget/components/Mapping.scss +4 -5
  46. package/lib/cjs/widget/components/MappingAction.js +1 -2
  47. package/lib/cjs/widget/components/MappingAction.js.map +1 -1
  48. package/lib/cjs/widget/components/MappingImportWizardModal.js.map +1 -1
  49. package/lib/cjs/widget/components/PropertyMenu.d.ts +2 -2
  50. package/lib/cjs/widget/components/PropertyMenu.js +7 -8
  51. package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
  52. package/lib/cjs/widget/components/SelectMappings.d.ts +2 -2
  53. package/lib/cjs/widget/components/SelectMappings.js +2 -2
  54. package/lib/cjs/widget/components/SelectMappings.js.map +1 -1
  55. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.d.ts +6 -0
  56. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js +25 -0
  57. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -0
  58. package/lib/cjs/widget/components/context/MappingClientContext.d.ts +5 -5
  59. package/lib/cjs/widget/components/context/MappingClientContext.js +1 -5
  60. package/lib/cjs/widget/components/context/MappingClientContext.js.map +1 -1
  61. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.d.ts +91 -0
  62. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.js +9 -0
  63. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -0
  64. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.d.ts +6 -0
  65. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js +31 -0
  66. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -0
  67. package/lib/{esm/widget/IMappingClient.js → cjs/widget/components/customUI/ManualGroupingCustomUI.scss} +13 -2
  68. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.d.ts +6 -0
  69. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js +97 -0
  70. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -0
  71. package/lib/cjs/widget/{IMappingClient.js → components/customUI/SearchGroupingCustomUI.scss} +13 -3
  72. package/lib/esm/grouping-mapping-widget.d.ts +1 -1
  73. package/lib/esm/grouping-mapping-widget.js +1 -1
  74. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  75. package/lib/esm/test/GroupingMappingCustomUI.test.d.ts +2 -0
  76. package/lib/esm/test/GroupingMappingCustomUI.test.js +138 -0
  77. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -0
  78. package/lib/esm/test/WidgetHeader.test.d.ts +2 -0
  79. package/lib/esm/test/WidgetHeader.test.js +31 -0
  80. package/lib/esm/test/WidgetHeader.test.js.map +1 -0
  81. package/lib/esm/test/test-utils.d.ts +72 -0
  82. package/lib/esm/test/test-utils.js +42 -0
  83. package/lib/esm/test/test-utils.js.map +1 -0
  84. package/lib/esm/widget/components/CalculatedPropertyAction.d.ts +2 -2
  85. package/lib/esm/widget/components/CalculatedPropertyAction.js +13 -13
  86. package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
  87. package/lib/esm/widget/components/CalculatedPropertyTable.d.ts +5 -5
  88. package/lib/esm/widget/components/CalculatedPropertyTable.js.map +1 -1
  89. package/lib/esm/widget/components/ConfirmMappingsImport.d.ts +3 -3
  90. package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
  91. package/lib/esm/widget/components/CustomCalculationAction.d.ts +2 -2
  92. package/lib/esm/widget/components/CustomCalculationAction.js +5 -5
  93. package/lib/esm/widget/components/CustomCalculationAction.js.map +1 -1
  94. package/lib/esm/widget/components/CustomCalculationTable.d.ts +5 -5
  95. package/lib/esm/widget/components/CustomCalculationTable.js.map +1 -1
  96. package/lib/esm/widget/components/GroupAction.d.ts +4 -3
  97. package/lib/esm/widget/components/GroupAction.js +85 -78
  98. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  99. package/lib/esm/widget/components/GroupAction.scss +1 -13
  100. package/lib/esm/widget/components/GroupPropertyAction.d.ts +2 -1
  101. package/lib/esm/widget/components/GroupPropertyAction.js +27 -26
  102. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  103. package/lib/esm/widget/components/GroupPropertyTable.d.ts +5 -5
  104. package/lib/esm/widget/components/GroupPropertyTable.js.map +1 -1
  105. package/lib/esm/widget/components/Grouping.d.ts +6 -1
  106. package/lib/esm/widget/components/Grouping.js +128 -66
  107. package/lib/esm/widget/components/Grouping.js.map +1 -1
  108. package/lib/esm/widget/components/Grouping.scss +21 -2
  109. package/lib/esm/widget/components/GroupingMapping.d.ts +8 -3
  110. package/lib/esm/widget/components/GroupingMapping.js +23 -10
  111. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  112. package/lib/esm/widget/components/Mapping.d.ts +1 -1
  113. package/lib/esm/widget/components/Mapping.js +6 -7
  114. package/lib/esm/widget/components/Mapping.js.map +1 -1
  115. package/lib/esm/widget/components/Mapping.scss +4 -5
  116. package/lib/esm/widget/components/MappingAction.js +1 -2
  117. package/lib/esm/widget/components/MappingAction.js.map +1 -1
  118. package/lib/esm/widget/components/MappingImportWizardModal.js.map +1 -1
  119. package/lib/esm/widget/components/PropertyMenu.d.ts +2 -2
  120. package/lib/esm/widget/components/PropertyMenu.js +7 -8
  121. package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
  122. package/lib/esm/widget/components/SelectMappings.d.ts +2 -2
  123. package/lib/esm/widget/components/SelectMappings.js +2 -2
  124. package/lib/esm/widget/components/SelectMappings.js.map +1 -1
  125. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.d.ts +6 -0
  126. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js +20 -0
  127. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -0
  128. package/lib/esm/widget/components/context/MappingClientContext.d.ts +5 -5
  129. package/lib/esm/widget/components/context/MappingClientContext.js +2 -6
  130. package/lib/esm/widget/components/context/MappingClientContext.js.map +1 -1
  131. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.d.ts +91 -0
  132. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.js +6 -0
  133. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -0
  134. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.d.ts +6 -0
  135. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js +26 -0
  136. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -0
  137. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.scss +17 -0
  138. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.d.ts +6 -0
  139. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js +92 -0
  140. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -0
  141. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.scss +17 -0
  142. package/package.json +18 -4
  143. package/lib/cjs/widget/IMappingClient.d.ts +0 -327
  144. package/lib/cjs/widget/IMappingClient.js.map +0 -1
  145. package/lib/esm/widget/IMappingClient.d.ts +0 -327
  146. package/lib/esm/widget/IMappingClient.js.map +0 -1
@@ -27,47 +27,56 @@ const appui_react_1 = require("@itwin/appui-react");
27
27
  const itwinui_react_1 = require("@itwin/itwinui-react");
28
28
  const react_1 = __importStar(require("react"));
29
29
  const utils_1 = require("./utils");
30
+ const Grouping_1 = require("./Grouping");
30
31
  require("./GroupAction.scss");
31
32
  const ActionPanel_1 = __importDefault(require("./ActionPanel"));
32
33
  const useValidator_1 = __importStar(require("../hooks/useValidator"));
33
34
  const GroupQueryBuilderContainer_1 = require("./GroupQueryBuilderContainer");
34
35
  const QueryBuilder_1 = require("./QueryBuilder");
35
36
  const viewerUtils_1 = require("./viewerUtils");
36
- const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
37
37
  const GroupQueryBuilderContext_1 = require("./context/GroupQueryBuilderContext");
38
38
  const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
39
39
  const MappingClientContext_1 = require("./context/MappingClientContext");
40
- const GroupAction = ({ iModelId, mappingId, group, goBack, resetView, }) => {
41
- var _a, _b, _c;
40
+ const GroupingMappingCustomUIContext_1 = require("./context/GroupingMappingCustomUIContext");
41
+ const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
42
+ const SearchGroupingCustomUI_1 = __importDefault(require("./customUI/SearchGroupingCustomUI"));
43
+ const ManualGroupingCustomUI_1 = __importDefault(require("./customUI/ManualGroupingCustomUI"));
44
+ const GroupingMappingCustomUI_1 = require("./customUI/GroupingMappingCustomUI");
45
+ const GroupAction = (props) => {
46
+ var _a, _b, _c, _d, _e;
42
47
  const iModelConnection = appui_react_1.useActiveIModelConnection();
43
48
  const { getAccessToken } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
44
49
  const mappingClient = MappingClientContext_1.useMappingClient();
50
+ const groupUIs = GroupingMappingCustomUIContext_1.useGroupingMappingCustomUI()
51
+ .filter((p) => p.type === GroupingMappingCustomUI_1.GroupingMappingCustomUIType.Grouping);
45
52
  const [details, setDetails] = react_1.useState({
46
- groupName: (_a = group === null || group === void 0 ? void 0 : group.groupName) !== null && _a !== void 0 ? _a : "",
47
- description: (_b = group === null || group === void 0 ? void 0 : group.description) !== null && _b !== void 0 ? _b : "",
53
+ groupName: (_b = (_a = props.group) === null || _a === void 0 ? void 0 : _a.groupName) !== null && _b !== void 0 ? _b : "",
54
+ description: (_d = (_c = props.group) === null || _c === void 0 ? void 0 : _c.description) !== null && _d !== void 0 ? _d : "",
48
55
  });
49
56
  const [query, setQuery] = react_1.useState("");
50
57
  const [simpleSelectionQuery, setSimpleSelectionQuery] = react_1.useState("");
51
58
  const [validator, showValidationMessage] = useValidator_1.default();
52
59
  const [isLoading, setIsLoading] = react_1.useState(false);
53
60
  const [isRendering, setIsRendering] = react_1.useState(false);
54
- const [currentPropertyList, setCurrentPropertyList] = react_1.default.useState([]);
55
- const [queryBuilder, setQueryBuilder] = react_1.default.useState(new QueryBuilder_1.QueryBuilder(undefined));
56
- const [queryGenerationType, setQueryGenerationType] = react_1.default.useState("Selection");
57
- const [searchInput, setSearchInput] = react_1.default.useState("");
61
+ const [currentPropertyList, setCurrentPropertyList] = react_1.useState([]);
62
+ const [queryBuilder, setQueryBuilder] = react_1.useState(new QueryBuilder_1.QueryBuilder(undefined));
63
+ const [queryGenerationType, setQueryGenerationType] = react_1.useState(props.queryGenerationType);
64
+ const isUpdating = isLoading || isRendering;
58
65
  const changeGroupByType = async (event) => {
59
66
  const { target: { value }, } = event;
60
67
  setQueryGenerationType(value);
61
68
  presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
62
69
  setQuery("");
63
70
  setSimpleSelectionQuery("");
64
- await resetView();
71
+ await props.resetView();
65
72
  };
66
73
  react_1.useEffect(() => {
67
74
  const removeListener = presentation_frontend_1.Presentation.selection.selectionChange.addListener(async (evt, selectionProvider) => {
68
75
  if (queryGenerationType === "Selection") {
69
76
  const selection = selectionProvider.getSelection(evt.imodel, evt.level);
70
- const query = selection.instanceKeys.size > 0 ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}` : "";
77
+ const query = selection.instanceKeys.size > 0
78
+ ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`
79
+ : "";
71
80
  setSimpleSelectionQuery(query);
72
81
  }
73
82
  });
@@ -81,7 +90,8 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, resetView, }) => {
81
90
  if (!query || query === "") {
82
91
  return;
83
92
  }
84
- if (queryGenerationType === "Selection" && currentPropertyList.length === 0) {
93
+ if (queryGenerationType === "Selection" &&
94
+ currentPropertyList.length === 0) {
85
95
  return;
86
96
  }
87
97
  setIsRendering(true);
@@ -101,25 +111,6 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, resetView, }) => {
101
111
  react_1.useEffect(() => {
102
112
  presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
103
113
  }, [iModelConnection]);
104
- const isWrappedInQuotes = (text) => {
105
- return text.startsWith(`"`) && text.endsWith(`"`);
106
- };
107
- const needsAndOperator = (token, index, searchQuery) => isWrappedInQuotes(token) || (index === 1 && isWrappedInQuotes(searchQuery[0]));
108
- // Temporary until ECViews become available for use.
109
- const generateSearchQuery = (searchQuery) => {
110
- if (searchQuery.length === 0) {
111
- setQuery("");
112
- return;
113
- }
114
- let generatedSearchQuery = `SELECT be.ECInstanceId, be.ECClassId FROM bis.geometricelement3d be `;
115
- generatedSearchQuery += `LEFT JOIN bis.SpatialCategory cat ON be.Category.Id = cat.ECInstanceID LEFT JOIN ecdbmeta.ECClassDef ecc ON be.ECClassId = ecc.ECInstanceId `;
116
- generatedSearchQuery += `LEFT JOIN bis.PhysicalType pt ON be.TypeDefinition.Id = pt.ECInstanceID`;
117
- generatedSearchQuery += ` WHERE `;
118
- generatedSearchQuery += `((${searchQuery.map((token, index) => `${index === 0 ? "" : needsAndOperator(token, index, searchQuery) ? "AND" : "OR"} be.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`).join(" ")}) OR (${searchQuery.map((token, index) => `${index === 0 ? "" : needsAndOperator(token, index, searchQuery) ? "AND" : "OR"} be.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`).join(" ")})) OR ((${searchQuery.map((token, index) => `${index === 0 ? "" : needsAndOperator(token, index, searchQuery) ? "AND" : "OR"} cat.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`).join(" ")}) OR (${searchQuery.map((token, index) => `${index === 0 ? "" : needsAndOperator(token, index, searchQuery) ? "AND" : "OR"} cat.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`).join(" ")})) OR (${searchQuery.map((token, index) => `${index === 0 ? "" : needsAndOperator(token, index, searchQuery) ? "AND" : "OR"} ecc.name LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`).join(" ")})`;
119
- // Physical Types
120
- generatedSearchQuery += ` OR ((${searchQuery.map((token, index) => `${index === 0 ? "" : needsAndOperator(token, index, searchQuery) ? "AND" : "OR"} pt.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`).join(" ")}) OR (${searchQuery.map((token, index) => `${index === 0 ? "" : needsAndOperator(token, index, searchQuery) ? "AND" : "OR"} pt.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`).join(" ")})) `;
121
- setQuery(generatedSearchQuery);
122
- };
123
114
  const save = react_1.useCallback(async () => {
124
115
  var _a;
125
116
  if (!validator.allValid()) {
@@ -130,38 +121,78 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, resetView, }) => {
130
121
  setIsLoading(true);
131
122
  const currentQuery = query || simpleSelectionQuery;
132
123
  const accessToken = await getAccessToken();
133
- group
134
- ? await mappingClient.updateGroup(accessToken, iModelId, mappingId, (_a = group.id) !== null && _a !== void 0 ? _a : "", { ...details, query: currentQuery })
135
- : await mappingClient.createGroup(accessToken, iModelId, mappingId, {
124
+ props.group
125
+ ? await mappingClient.updateGroup(accessToken, props.iModelId, props.mappingId, (_a = props.group.id) !== null && _a !== void 0 ? _a : "", { ...details, query: currentQuery })
126
+ : await mappingClient.createGroup(accessToken, props.iModelId, props.mappingId, {
136
127
  ...details,
137
128
  query: currentQuery,
138
129
  });
139
130
  presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
140
- await goBack();
131
+ await props.goBack();
141
132
  }
142
133
  catch (error) {
143
134
  utils_1.handleError(error.status);
144
135
  setIsLoading(false);
145
136
  }
146
137
  }, [
147
- details,
148
- goBack,
149
- group,
150
- iModelConnection,
151
- iModelId,
152
- mappingId,
153
- query,
138
+ validator,
154
139
  showValidationMessage,
140
+ query,
155
141
  simpleSelectionQuery,
156
- validator,
157
142
  getAccessToken,
143
+ props,
158
144
  mappingClient,
145
+ details,
146
+ iModelConnection,
159
147
  ]);
160
- const isBlockingActions = !(details.groupName && (query || simpleSelectionQuery) && !isRendering && !isLoading);
148
+ const createQueryBuilderComponent = () => {
149
+ switch (queryGenerationType) {
150
+ case "Selection": {
151
+ return (react_1.default.createElement(GroupQueryBuilderContext_1.GroupQueryBuilderContext.Provider, { value: {
152
+ currentPropertyList,
153
+ setCurrentPropertyList,
154
+ query,
155
+ setQuery,
156
+ queryBuilder,
157
+ setQueryBuilder,
158
+ isLoading,
159
+ isRendering,
160
+ resetView: props.resetView,
161
+ } },
162
+ react_1.default.createElement(GroupQueryBuilderContainer_1.GroupQueryBuilderContainer, null)));
163
+ }
164
+ case "Search": {
165
+ return (react_1.default.createElement(SearchGroupingCustomUI_1.default, { updateQuery: setQuery, isUpdating: isUpdating, resetView: props.resetView }));
166
+ }
167
+ case "Manual": {
168
+ return (react_1.default.createElement(ManualGroupingCustomUI_1.default, { updateQuery: setQuery, isUpdating: isUpdating, resetView: props.resetView }));
169
+ }
170
+ default: {
171
+ if (queryGenerationType && queryGenerationType.length > 0) {
172
+ const selectedCustomUI = groupUIs.find((e) => e.name === queryGenerationType);
173
+ if (selectedCustomUI) {
174
+ return react_1.default.createElement(selectedCustomUI.uiComponent, {
175
+ updateQuery: setQuery,
176
+ isUpdating,
177
+ resetView: props.resetView,
178
+ });
179
+ }
180
+ }
181
+ return react_1.default.createElement(utils_1.EmptyMessage, { message: 'No query generation method selected. ' });
182
+ }
183
+ }
184
+ };
185
+ const isBlockingActions = !(details.groupName &&
186
+ (query || simpleSelectionQuery) &&
187
+ !isRendering &&
188
+ !isLoading);
189
+ const getRadioTileComponent = (icon, value, label) => {
190
+ 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 }));
191
+ };
161
192
  return (react_1.default.createElement(react_1.default.Fragment, null,
162
- react_1.default.createElement(utils_1.WidgetHeader, { title: group ? (_c = group.groupName) !== null && _c !== void 0 ? _c : "" : "Add Group", returnFn: async () => {
193
+ react_1.default.createElement(utils_1.WidgetHeader, { title: props.group ? (_e = props.group.groupName) !== null && _e !== void 0 ? _e : "" : "Add Group", returnFn: async () => {
163
194
  presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
164
- await goBack();
195
+ await props.goBack();
165
196
  } }),
166
197
  react_1.default.createElement("div", { className: 'gmw-group-add-modify-container' },
167
198
  react_1.default.createElement(itwinui_react_1.Fieldset, { legend: 'Group Details', className: 'gmw-group-details' },
@@ -181,39 +212,15 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, resetView, }) => {
181
212
  utils_1.handleInputChange(event, details, setDetails);
182
213
  } })),
183
214
  react_1.default.createElement(itwinui_react_1.Fieldset, { legend: 'Group By', className: 'gmw-query-builder-container' },
184
- react_1.default.createElement(itwinui_react_1.RadioTileGroup, { className: "gmw-radio-group-tile", required: true },
185
- react_1.default.createElement(itwinui_react_1.RadioTile, { name: "groupby", icon: react_1.default.createElement(itwinui_icons_react_1.SvgCursor, null), onChange: changeGroupByType, defaultChecked: true, value: "Selection", label: "Selection", disabled: isLoading || isRendering }),
186
- react_1.default.createElement(itwinui_react_1.RadioTile, { icon: react_1.default.createElement(itwinui_icons_react_1.SvgSearch, null), name: "groupby", onChange: changeGroupByType, value: "Query Keywords", label: "Query Keywords", disabled: isLoading || isRendering })),
187
- queryGenerationType === "Selection" ?
188
- react_1.default.createElement(GroupQueryBuilderContext_1.GroupQueryBuilderContext.Provider, { value: {
189
- currentPropertyList,
190
- setCurrentPropertyList,
191
- query,
192
- setQuery,
193
- queryBuilder,
194
- setQueryBuilder,
195
- isLoading,
196
- isRendering,
197
- resetView,
198
- } },
199
- react_1.default.createElement(GroupQueryBuilderContainer_1.GroupQueryBuilderContainer, null)) :
200
- react_1.default.createElement("div", { className: "gmw-search-form" },
201
- react_1.default.createElement(itwinui_react_1.Text, null, "Generate a query by keywords. Keywords wrapped in double quotes will be considered a required criteria."),
202
- react_1.default.createElement(itwinui_react_1.LabeledTextarea, { label: "Query Keywords", required: true, value: searchInput, onChange: (event) => setSearchInput(event.target.value), disabled: isLoading || isRendering, placeholder: `E.g. "red" chair` }),
203
- react_1.default.createElement("div", { className: "gmw-search-actions" },
204
- isRendering &&
205
- react_1.default.createElement(utils_1.LoadingSpinner, null),
206
- react_1.default.createElement(itwinui_react_1.Button, { disabled: isLoading || isRendering, onClick: () => generateSearchQuery(searchInput ? searchInput.replace(/(\r\n|\n|\r)/gm, "").trim().split(" ") : []) }, "Generate Query"),
207
- react_1.default.createElement(itwinui_react_1.Button, { disabled: isLoading || isRendering, onClick: async () => {
208
- setQuery("");
209
- setSearchInput("");
210
- await resetView();
211
- } }, "Clear"))))),
215
+ react_1.default.createElement(itwinui_react_1.RadioTileGroup, { className: 'gmw-radio-group-tile', required: true }, groupUIs.length === 0
216
+ ? (Grouping_1.defaultUIMetadata.map((p) => getRadioTileComponent(p.icon, p.name, p.displayLabel)))
217
+ : (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); }))),
218
+ queryGenerationType && createQueryBuilderComponent())),
212
219
  react_1.default.createElement(ActionPanel_1.default, { onSave: async () => {
213
220
  await save();
214
221
  }, onCancel: async () => {
215
222
  presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
216
- await goBack();
223
+ await props.goBack();
217
224
  }, isSavingDisabled: isBlockingActions, isLoading: isLoading })));
218
225
  };
219
226
  exports.default = GroupAction;
@@ -1 +1 @@
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 {\n Presentation,\n} from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { Button, Fieldset, LabeledInput, LabeledTextarea, RadioTile, RadioTileGroup, Small, Text, toaster } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { handleError, handleInputChange, LoadingSpinner, WidgetHeader } from \"./utils\";\nimport type { GroupType } from \"./Grouping\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { GroupQueryBuilderContainer } from \"./GroupQueryBuilderContainer\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport {\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { SvgCursor, SvgSearch } from \"@itwin/itwinui-icons-react\";\nimport { GroupQueryBuilderContext } from \"./context/GroupQueryBuilderContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\n\ninterface GroupActionProps {\n iModelId: string;\n mappingId: string;\n group?: GroupType;\n goBack: () => Promise<void>;\n resetView: () => Promise<void>;\n}\n\nconst GroupAction = ({\n iModelId,\n mappingId,\n group,\n goBack,\n resetView,\n}: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [details, setDetails] = useState({\n groupName: group?.groupName ?? \"\",\n description: 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 [currentPropertyList, setCurrentPropertyList] = React.useState<PropertyRecord[]>([]);\n const [queryBuilder, setQueryBuilder] = React.useState<QueryBuilder>(\n new QueryBuilder(undefined),\n );\n const [queryGenerationType, setQueryGenerationType] = React.useState(\"Selection\");\n const [searchInput, setSearchInput] = React.useState(\"\");\n\n const changeGroupByType = async (event: React.ChangeEvent<HTMLInputElement>) => {\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(evt.imodel, evt.level);\n const query = selection.instanceKeys.size > 0 ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}` : \"\";\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 if (queryGenerationType === \"Selection\" && currentPropertyList.length === 0) {\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, currentPropertyList, queryGenerationType]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const isWrappedInQuotes = (text: string) => {\n return text.startsWith(`\"`) && text.endsWith(`\"`);\n };\n\n const needsAndOperator = (token: string, index: number, searchQuery: string[]) => isWrappedInQuotes(token) || (index === 1 && isWrappedInQuotes(searchQuery[0]));\n // Temporary until ECViews become available for use.\n const generateSearchQuery = (searchQuery: string[]) => {\n if (searchQuery.length === 0) {\n setQuery(\"\");\n return;\n }\n\n let generatedSearchQuery =\n `SELECT be.ECInstanceId, be.ECClassId FROM bis.geometricelement3d be `;\n generatedSearchQuery += `LEFT JOIN bis.SpatialCategory cat ON be.Category.Id = cat.ECInstanceID LEFT JOIN ecdbmeta.ECClassDef ecc ON be.ECClassId = ecc.ECInstanceId `;\n generatedSearchQuery += `LEFT JOIN bis.PhysicalType pt ON be.TypeDefinition.Id = pt.ECInstanceID`;\n generatedSearchQuery += ` WHERE `;\n generatedSearchQuery += `((${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} be.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} be.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})) OR ((${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} cat.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} cat.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} ecc.name LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})`;\n // Physical Types\n generatedSearchQuery += ` OR ((${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} pt.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} pt.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})) `;\n\n setQuery(generatedSearchQuery);\n };\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 group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n mappingId,\n group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(accessToken, iModelId, mappingId, {\n ...details,\n query: currentQuery,\n });\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n }, [\n details,\n goBack,\n group,\n iModelConnection,\n iModelId,\n mappingId,\n query,\n showValidationMessage,\n simpleSelectionQuery,\n validator,\n getAccessToken,\n mappingClient,\n ]);\n\n const isBlockingActions = !(details.groupName && (query || simpleSelectionQuery) && !isRendering && !isLoading);\n\n return (\n <>\n <WidgetHeader\n title={group ? group.groupName ?? \"\" : \"Add Group\"}\n returnFn={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await 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\n className=\"gmw-radio-group-tile\"\n required>\n <RadioTile\n name={\"groupby\"}\n icon={<SvgCursor />}\n onChange={changeGroupByType}\n defaultChecked\n value={\"Selection\"}\n label={\"Selection\"}\n disabled={isLoading || isRendering}\n />\n <RadioTile\n icon={<SvgSearch />}\n name={\"groupby\"}\n onChange={changeGroupByType}\n value={\"Query Keywords\"}\n label={\"Query Keywords\"}\n disabled={isLoading || isRendering}\n />\n </RadioTileGroup>\n {queryGenerationType === \"Selection\" ?\n <GroupQueryBuilderContext.Provider\n value={{\n currentPropertyList,\n setCurrentPropertyList,\n query,\n setQuery,\n queryBuilder,\n setQueryBuilder,\n isLoading,\n isRendering,\n resetView,\n }}\n >\n <GroupQueryBuilderContainer />\n </GroupQueryBuilderContext.Provider> :\n <div className=\"gmw-search-form\">\n <Text>Generate a query by keywords. Keywords wrapped in double quotes will be considered a required criteria.</Text>\n <LabeledTextarea\n label=\"Query Keywords\"\n required\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n disabled={isLoading || isRendering}\n placeholder={`E.g. \"red\" chair`} />\n <div className=\"gmw-search-actions\">\n {isRendering &&\n <LoadingSpinner />\n }\n <Button disabled={isLoading || isRendering} onClick={() => generateSearchQuery(searchInput ? searchInput.replace(/(\\r\\n|\\n|\\r)/gm, \"\").trim().split(\" \") : [])}>Generate Query</Button>\n <Button disabled={isLoading || isRendering} onClick={async () => {\n setQuery(\"\");\n setSearchInput(\"\");\n await resetView();\n }}>Clear</Button>\n </div>\n </div>\n }\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 goBack();\n }}\n isSavingDisabled={\n isBlockingActions\n }\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":";;;;;;;;;;;;;;;;;;;;;;;;AASA,wEAA4D;AAC5D,oDAA+D;AAC/D,wDAO8B;AAE9B,+CAAgE;AAChE,mCAKiB;AAEjB,yCAA+C;AAC/C,8BAA4B;AAC5B,gEAAwC;AACxC,sEAAwE;AAExE,6EAA0E;AAC1E,iDAA8C;AAC9C,+CAIuB;AACvB,iFAA8E;AAC9E,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,CAAmB,EAAE,CAAC,CAAC;IACrF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,gBAAQ,CAC9C,IAAI,2BAAY,CAAC,SAAS,CAAC,CAC5B,CAAC;IACF,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,IACE,mBAAmB,KAAK,WAAW;oBACnC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAChC;oBACA,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,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAExE,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,GAAI,GAAG,EAAE;QACxC,QAAQ,mBAAmB,EAAE;YAC3B,KAAK,WAAW,CAAC,CAAC;gBAChB,OAAO,CACL,8BAAC,mDAAwB,CAAC,QAAQ,IAChC,KAAK,EAAE;wBACL,mBAAmB;wBACnB,sBAAsB;wBACtB,KAAK;wBACL,QAAQ;wBACR,YAAY;wBACZ,eAAe;wBACf,SAAS;wBACT,WAAW;wBACX,SAAS,EAAE,KAAK,CAAC,SAAS;qBAC3B;oBAED,8BAAC,uDAA0B,OAAG,CACI,CACrC,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 type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { GroupQueryBuilderContainer } from \"./GroupQueryBuilderContainer\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport {\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { GroupQueryBuilderContext } from \"./context/GroupQueryBuilderContext\";\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 [currentPropertyList, setCurrentPropertyList] = useState<PropertyRecord[]>([]);\n const [queryBuilder, setQueryBuilder] = useState<QueryBuilder>(\n new QueryBuilder(undefined),\n );\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 if (\n queryGenerationType === \"Selection\" &&\n currentPropertyList.length === 0\n ) {\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, currentPropertyList, queryGenerationType]);\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 <GroupQueryBuilderContext.Provider\n value={{\n currentPropertyList,\n setCurrentPropertyList,\n query,\n setQuery,\n queryBuilder,\n setQueryBuilder,\n isLoading,\n isRendering,\n resetView: props.resetView,\n }}\n >\n <GroupQueryBuilderContainer />\n </GroupQueryBuilderContext.Provider>\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"]}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- @import '~@itwin/itwinui-css/scss/variables';
5
+ @import "~@itwin/itwinui-css/scss/variables";
6
6
 
7
7
  .gmw-group-add-modify-container {
8
8
  display: flex;
@@ -26,17 +26,5 @@
26
26
  display: flex;
27
27
  justify-content: center;
28
28
  }
29
-
30
- .gmw-search-form {
31
- display: flex;
32
- flex-direction: column;
33
- gap: $iui-baseline;
34
- margin-top: $iui-baseline;
35
- > .gmw-search-actions {
36
- display: flex;
37
- justify-content: flex-end;
38
- gap: $iui-s;
39
- }
40
- }
41
29
  }
42
30
  }
@@ -2,6 +2,7 @@
2
2
  import type { KeySet } from "@itwin/presentation-common";
3
3
  import type { SelectOption } from "@itwin/itwinui-react";
4
4
  import "./GroupPropertyAction.scss";
5
+ import { QuantityType } from "@itwin/insights-client";
5
6
  interface GroupPropertyActionProps {
6
7
  iModelId: string;
7
8
  mappingId: string;
@@ -11,7 +12,7 @@ interface GroupPropertyActionProps {
11
12
  keySet: KeySet;
12
13
  returnFn: (modified: boolean) => Promise<void>;
13
14
  }
14
- export declare const quantityTypesSelectionOptions: SelectOption<string>[];
15
+ export declare const quantityTypesSelectionOptions: SelectOption<QuantityType>[];
15
16
  declare const GroupPropertyAction: ({ iModelId, mappingId, groupId, groupPropertyId, groupPropertyName, keySet, returnFn, }: GroupPropertyActionProps) => JSX.Element;
16
17
  export default GroupPropertyAction;
17
18
  //# sourceMappingURL=GroupPropertyAction.d.ts.map
@@ -33,17 +33,18 @@ const ActionPanel_1 = __importDefault(require("./ActionPanel"));
33
33
  const useValidator_1 = __importStar(require("../hooks/useValidator"));
34
34
  const utils_1 = require("./utils");
35
35
  require("./GroupPropertyAction.scss");
36
+ const insights_client_1 = require("@itwin/insights-client");
36
37
  const MappingClientContext_1 = require("./context/MappingClientContext");
37
38
  const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
38
39
  exports.quantityTypesSelectionOptions = [
39
- { value: "Area", label: "Area" },
40
- { value: "Distance", label: "Distance" },
41
- { value: "Force", label: "Force" },
42
- { value: "Mass", label: "Mass" },
43
- { value: "Monetary", label: "Monetary" },
44
- { value: "Time", label: "Time" },
45
- { value: "Volume", label: "Volume" },
46
- { value: "Undefined", label: "No Quantity Type" },
40
+ { value: insights_client_1.QuantityType.Area, label: "Area" },
41
+ { value: insights_client_1.QuantityType.Distance, label: "Distance" },
42
+ { value: insights_client_1.QuantityType.Force, label: "Force" },
43
+ { value: insights_client_1.QuantityType.Mass, label: "Mass" },
44
+ { value: insights_client_1.QuantityType.Monetary, label: "Monetary" },
45
+ { value: insights_client_1.QuantityType.Time, label: "Time" },
46
+ { value: insights_client_1.QuantityType.Volume, label: "Volume" },
47
+ { value: insights_client_1.QuantityType.Undefined, label: "No Quantity Type" },
47
48
  ];
48
49
  const extractPrimitive = (propertiesField, classToPropertiesMapping, navigation) => {
49
50
  var _a, _b;
@@ -174,8 +175,8 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
174
175
  const { getAccessToken } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
175
176
  const mappingClient = MappingClientContext_1.useMappingClient();
176
177
  const [propertyName, setPropertyName] = react_1.useState("");
177
- const [dataType, setDataType] = react_1.useState();
178
- const [quantityType, setQuantityType] = react_1.useState("Undefined");
178
+ const [dataType, setDataType] = react_1.useState(insights_client_1.DataType.Undefined);
179
+ const [quantityType, setQuantityType] = react_1.useState(insights_client_1.QuantityType.Undefined);
179
180
  const [classToPropertiesMapping, setClassToPropertiesMapping] = react_1.useState();
180
181
  const [ecProperties, setEcProperties] = react_1.useState([]);
181
182
  const [validator, showValidationMessage] = useValidator_1.default();
@@ -183,7 +184,7 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
183
184
  const [isLoading, setIsLoading] = react_1.useState(false);
184
185
  react_1.useEffect(() => {
185
186
  const getContent = async () => {
186
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
187
+ var _a, _b, _c, _d, _e;
187
188
  setIsLoading(true);
188
189
  const ruleSet = {
189
190
  id: "element-properties",
@@ -248,7 +249,7 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
248
249
  if (!response) {
249
250
  return;
250
251
  }
251
- newEcProperties = (_g = (_f = response.property) === null || _f === void 0 ? void 0 : _f.ecProperties) !== null && _g !== void 0 ? _g : [];
252
+ newEcProperties = response.ecProperties;
252
253
  let keys = Array.from(classToPropertiesMapping.keys()).reverse();
253
254
  for (const ecProperty of newEcProperties) {
254
255
  keys = keys.filter((key) => `${ecProperty.ecSchemaName}:${ecProperty.ecClassName}` !== key);
@@ -258,11 +259,11 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
258
259
  ecClassName: key.split(":")[1],
259
260
  // Placeholders for properties
260
261
  ecPropertyName: "",
261
- ecPropertyType: "",
262
+ ecPropertyType: insights_client_1.DataType.Undefined,
262
263
  })));
263
- setPropertyName((_j = (_h = response.property) === null || _h === void 0 ? void 0 : _h.propertyName) !== null && _j !== void 0 ? _j : "");
264
- setDataType((_l = (_k = response.property) === null || _k === void 0 ? void 0 : _k.dataType) !== null && _l !== void 0 ? _l : "");
265
- setQuantityType((_o = (_m = response.property) === null || _m === void 0 ? void 0 : _m.quantityType) !== null && _o !== void 0 ? _o : "");
264
+ setPropertyName(response.propertyName);
265
+ setDataType(response.dataType);
266
+ setQuantityType(response.quantityType);
266
267
  }
267
268
  else {
268
269
  newEcProperties = Array.from(classToPropertiesMapping)
@@ -271,7 +272,7 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
271
272
  ecClassName: key.split(":")[1],
272
273
  // Placeholders for properties
273
274
  ecPropertyName: "",
274
- ecPropertyType: "",
275
+ ecPropertyType: insights_client_1.DataType.Undefined,
275
276
  }))
276
277
  .reverse();
277
278
  }
@@ -282,9 +283,9 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
282
283
  }, [getAccessToken, mappingClient, groupId, groupPropertyId, iModelConnection, iModelId, keySet, mappingId]);
283
284
  const onSave = async () => {
284
285
  const filteredEcProperties = ecProperties.filter((ecProperty) => ecProperty.ecPropertyName && ecProperty.ecPropertyType);
285
- if (!(filteredEcProperties === null || filteredEcProperties === void 0 ? void 0 : filteredEcProperties.length) || !validator.allValid()) {
286
+ if (!filteredEcProperties.length || !validator.allValid()) {
286
287
  showValidationMessage(true);
287
- if (!(filteredEcProperties === null || filteredEcProperties === void 0 ? void 0 : filteredEcProperties.length)) {
288
+ if (!filteredEcProperties.length) {
288
289
  setPropertyAlert(true);
289
290
  }
290
291
  return;
@@ -315,10 +316,10 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
315
316
  const updatedEcProperties = [...ecProperties];
316
317
  updatedEcProperties[index].ecPropertyName = property.name;
317
318
  // Unique types
318
- let type = "";
319
+ let type = insights_client_1.DataType.Undefined;
319
320
  switch (property.type) {
320
321
  case "long":
321
- type = "integer";
322
+ type = insights_client_1.DataType.Integer;
322
323
  break;
323
324
  default:
324
325
  type = property.type;
@@ -362,9 +363,9 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
362
363
  validator.showMessageFor("propertyName");
363
364
  } }),
364
365
  react_1.default.createElement(itwinui_react_1.LabeledSelect, { label: "Data Type", id: 'dataType', disabled: isLoading, options: [
365
- { value: "Boolean", label: "Boolean" },
366
- { value: "Number", label: "Number" },
367
- { value: "String", label: "String" },
366
+ { value: insights_client_1.DataType.Boolean, label: "Boolean" },
367
+ { value: insights_client_1.DataType.Number, label: "Number" },
368
+ { value: insights_client_1.DataType.String, label: "String" },
368
369
  ], required: true, value: dataType, onChange: (value) => {
369
370
  validator.showMessageFor("dataType");
370
371
  setDataType(value);
@@ -379,7 +380,7 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
379
380
  isLoading &&
380
381
  Array(3)
381
382
  .fill(null)
382
- .map((_, index) => (react_1.default.createElement(itwinui_react_1.Text, { key: index, variant: 'headline', isSkeleton: true }, "LOADING SKELETON"))), ecProperties === null || ecProperties === void 0 ? void 0 :
383
+ .map((_, index) => (react_1.default.createElement(itwinui_react_1.Text, { key: index, variant: 'headline', isSkeleton: true }, "LOADING SKELETON"))),
383
384
  ecProperties.map((ecProperty, index) => {
384
385
  return (react_1.default.createElement("div", { className: 'gmw-property-select-item', key: `${ecProperty.ecSchemaName}${ecProperty.ecClassName}` },
385
386
  react_1.default.createElement(itwinui_react_1.Text, { variant: 'leading' }, ecProperty.ecClassName),
@@ -391,7 +392,7 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
391
392
  updatedEcPropertyList[index] = {
392
393
  ...updatedEcPropertyList[index],
393
394
  ecPropertyName: "",
394
- ecPropertyType: "",
395
+ ecPropertyType: insights_client_1.DataType.Undefined,
395
396
  };
396
397
  setEcProperties(updatedEcPropertyList);
397
398
  }, disabled: !ecProperty.ecPropertyName && !ecProperty.ecPropertyType },