@itwin/grouping-mapping-widget 0.4.0 → 0.5.2

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 (165) hide show
  1. package/lib/cjs/formula/FormulaDataTypeResolver.d.ts +12 -0
  2. package/lib/cjs/formula/FormulaDataTypeResolver.js +50 -0
  3. package/lib/cjs/formula/FormulaDataTypeResolver.js.map +1 -0
  4. package/lib/cjs/formula/FormulaFunctionProvider.js +59 -59
  5. package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -1
  6. package/lib/cjs/formula/FormulaOperatorsProvider.js +7 -7
  7. package/lib/cjs/formula/FormulaOperatorsProvider.js.map +1 -1
  8. package/lib/cjs/formula/FormulaTokensDataTypeResolver.d.ts +6 -0
  9. package/lib/cjs/formula/{FormulaTokensValidator.js → FormulaTokensDataTypeResolver.js} +32 -32
  10. package/lib/cjs/formula/FormulaTokensDataTypeResolver.js.map +1 -0
  11. package/lib/cjs/formula/Types.d.ts +2 -2
  12. package/lib/cjs/formula/Types.js.map +1 -1
  13. package/lib/cjs/grouping-mapping-widget.d.ts +6 -1
  14. package/lib/cjs/grouping-mapping-widget.js +6 -3
  15. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  16. package/lib/cjs/widget/GroupingMappingWidget.d.ts +3 -6
  17. package/lib/cjs/widget/GroupingMappingWidget.js +3 -5
  18. package/lib/cjs/widget/GroupingMappingWidget.js.map +1 -1
  19. package/lib/cjs/widget/components/CalculatedPropertyAction.js +7 -5
  20. package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
  21. package/lib/cjs/widget/components/CalculatedPropertyTable.js +6 -4
  22. package/lib/cjs/widget/components/CalculatedPropertyTable.js.map +1 -1
  23. package/lib/cjs/widget/components/ConfirmMappingsImport.js +6 -4
  24. package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
  25. package/lib/cjs/widget/components/CustomCalculationAction.js +7 -5
  26. package/lib/cjs/widget/components/CustomCalculationAction.js.map +1 -1
  27. package/lib/cjs/widget/components/CustomCalculationTable.js +6 -4
  28. package/lib/cjs/widget/components/CustomCalculationTable.js.map +1 -1
  29. package/lib/cjs/widget/components/GroupAction.js +26 -21
  30. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  31. package/lib/cjs/widget/components/GroupPropertyAction.js +19 -8
  32. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  33. package/lib/cjs/widget/components/GroupPropertyTable.js +6 -4
  34. package/lib/cjs/widget/components/GroupPropertyTable.js.map +1 -1
  35. package/lib/cjs/widget/components/GroupQueryBuilderContainer.js +8 -6
  36. package/lib/cjs/widget/components/GroupQueryBuilderContainer.js.map +1 -1
  37. package/lib/cjs/widget/components/Grouping.js +54 -65
  38. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  39. package/lib/cjs/widget/components/GroupingMapping.d.ts +8 -13
  40. package/lib/cjs/widget/components/GroupingMapping.js +16 -36
  41. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  42. package/lib/cjs/widget/components/Mapping.js +18 -14
  43. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  44. package/lib/cjs/widget/components/MappingAction.js +7 -5
  45. package/lib/cjs/widget/components/MappingAction.js.map +1 -1
  46. package/lib/cjs/widget/components/PropertyMenu.js +16 -15
  47. package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
  48. package/lib/cjs/widget/components/QueryBuilder.d.ts +2 -3
  49. package/lib/cjs/widget/components/QueryBuilder.js +6 -13
  50. package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
  51. package/lib/cjs/widget/components/SelectIModel.js +13 -4
  52. package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
  53. package/lib/cjs/widget/components/SelectMappings.js +9 -7
  54. package/lib/cjs/widget/components/SelectMappings.js.map +1 -1
  55. package/lib/cjs/widget/components/SelectProject.js +13 -4
  56. package/lib/cjs/widget/components/SelectProject.js.map +1 -1
  57. package/lib/cjs/widget/components/{GroupQueryBuilderContext.d.ts → context/GroupQueryBuilderContext.d.ts} +1 -1
  58. package/lib/cjs/widget/components/{GroupQueryBuilderContext.js → context/GroupQueryBuilderContext.js} +1 -1
  59. package/lib/cjs/widget/components/context/GroupQueryBuilderContext.js.map +1 -0
  60. package/lib/cjs/widget/components/context/GroupingApiConfigContext.d.ts +11 -0
  61. package/lib/cjs/widget/components/context/GroupingApiConfigContext.js +37 -0
  62. package/lib/cjs/widget/components/context/GroupingApiConfigContext.js.map +1 -0
  63. package/lib/cjs/widget/components/context/MappingClientContext.d.ts +8 -0
  64. package/lib/cjs/widget/components/context/MappingClientContext.js +37 -0
  65. package/lib/cjs/widget/components/context/MappingClientContext.js.map +1 -0
  66. package/lib/cjs/widget/components/property-grid/PropertyGrid.d.ts +1 -1
  67. package/lib/cjs/widget/components/property-grid/PropertyGrid.js +5 -5
  68. package/lib/cjs/widget/components/property-grid/PropertyGrid.js.map +1 -1
  69. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
  70. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +2 -2
  71. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
  72. package/lib/cjs/widget/components/property-grid/PropertyView.js +9 -6
  73. package/lib/cjs/widget/components/property-grid/PropertyView.js.map +1 -1
  74. package/lib/cjs/widget/components/viewerUtils.js.map +1 -1
  75. package/lib/cjs/widget/hooks/useFormulaValidation.js +3 -2
  76. package/lib/cjs/widget/hooks/useFormulaValidation.js.map +1 -1
  77. package/lib/esm/formula/FormulaDataTypeResolver.d.ts +12 -0
  78. package/lib/esm/formula/FormulaDataTypeResolver.js +46 -0
  79. package/lib/esm/formula/FormulaDataTypeResolver.js.map +1 -0
  80. package/lib/esm/formula/FormulaFunctionProvider.js +59 -59
  81. package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -1
  82. package/lib/esm/formula/FormulaOperatorsProvider.js +7 -7
  83. package/lib/esm/formula/FormulaOperatorsProvider.js.map +1 -1
  84. package/lib/esm/formula/FormulaTokensDataTypeResolver.d.ts +6 -0
  85. package/lib/esm/formula/{FormulaTokensValidator.js → FormulaTokensDataTypeResolver.js} +30 -30
  86. package/lib/esm/formula/FormulaTokensDataTypeResolver.js.map +1 -0
  87. package/lib/esm/formula/Types.d.ts +2 -2
  88. package/lib/esm/formula/Types.js.map +1 -1
  89. package/lib/esm/grouping-mapping-widget.d.ts +6 -1
  90. package/lib/esm/grouping-mapping-widget.js +3 -1
  91. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  92. package/lib/esm/widget/GroupingMappingWidget.d.ts +3 -6
  93. package/lib/esm/widget/GroupingMappingWidget.js +3 -5
  94. package/lib/esm/widget/GroupingMappingWidget.js.map +1 -1
  95. package/lib/esm/widget/components/CalculatedPropertyAction.js +8 -6
  96. package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
  97. package/lib/esm/widget/components/CalculatedPropertyTable.js +7 -5
  98. package/lib/esm/widget/components/CalculatedPropertyTable.js.map +1 -1
  99. package/lib/esm/widget/components/ConfirmMappingsImport.js +7 -5
  100. package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
  101. package/lib/esm/widget/components/CustomCalculationAction.js +8 -6
  102. package/lib/esm/widget/components/CustomCalculationAction.js.map +1 -1
  103. package/lib/esm/widget/components/CustomCalculationTable.js +7 -5
  104. package/lib/esm/widget/components/CustomCalculationTable.js.map +1 -1
  105. package/lib/esm/widget/components/GroupAction.js +27 -22
  106. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  107. package/lib/esm/widget/components/GroupPropertyAction.js +20 -9
  108. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  109. package/lib/esm/widget/components/GroupPropertyTable.js +7 -5
  110. package/lib/esm/widget/components/GroupPropertyTable.js.map +1 -1
  111. package/lib/esm/widget/components/GroupQueryBuilderContainer.js +8 -6
  112. package/lib/esm/widget/components/GroupQueryBuilderContainer.js.map +1 -1
  113. package/lib/esm/widget/components/Grouping.js +56 -67
  114. package/lib/esm/widget/components/Grouping.js.map +1 -1
  115. package/lib/esm/widget/components/GroupingMapping.d.ts +8 -13
  116. package/lib/esm/widget/components/GroupingMapping.js +16 -34
  117. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  118. package/lib/esm/widget/components/Mapping.js +19 -15
  119. package/lib/esm/widget/components/Mapping.js.map +1 -1
  120. package/lib/esm/widget/components/MappingAction.js +8 -6
  121. package/lib/esm/widget/components/MappingAction.js.map +1 -1
  122. package/lib/esm/widget/components/PropertyMenu.js +17 -16
  123. package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
  124. package/lib/esm/widget/components/QueryBuilder.d.ts +2 -3
  125. package/lib/esm/widget/components/QueryBuilder.js +6 -13
  126. package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
  127. package/lib/esm/widget/components/SelectIModel.js +14 -5
  128. package/lib/esm/widget/components/SelectIModel.js.map +1 -1
  129. package/lib/esm/widget/components/SelectMappings.js +10 -8
  130. package/lib/esm/widget/components/SelectMappings.js.map +1 -1
  131. package/lib/esm/widget/components/SelectProject.js +14 -5
  132. package/lib/esm/widget/components/SelectProject.js.map +1 -1
  133. package/lib/esm/widget/components/{GroupQueryBuilderContext.d.ts → context/GroupQueryBuilderContext.d.ts} +1 -1
  134. package/lib/esm/widget/components/{GroupQueryBuilderContext.js → context/GroupQueryBuilderContext.js} +1 -1
  135. package/lib/esm/widget/components/context/GroupQueryBuilderContext.js.map +1 -0
  136. package/lib/esm/widget/components/context/GroupingApiConfigContext.d.ts +11 -0
  137. package/lib/esm/widget/components/context/GroupingApiConfigContext.js +14 -0
  138. package/lib/esm/widget/components/context/GroupingApiConfigContext.js.map +1 -0
  139. package/lib/esm/widget/components/context/MappingClientContext.d.ts +8 -0
  140. package/lib/esm/widget/components/context/MappingClientContext.js +31 -0
  141. package/lib/esm/widget/components/context/MappingClientContext.js.map +1 -0
  142. package/lib/esm/widget/components/property-grid/PropertyGrid.d.ts +1 -1
  143. package/lib/esm/widget/components/property-grid/PropertyGrid.js +6 -6
  144. package/lib/esm/widget/components/property-grid/PropertyGrid.js.map +1 -1
  145. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
  146. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +2 -2
  147. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
  148. package/lib/esm/widget/components/property-grid/PropertyView.js +9 -6
  149. package/lib/esm/widget/components/property-grid/PropertyView.js.map +1 -1
  150. package/lib/esm/widget/components/viewerUtils.js.map +1 -1
  151. package/lib/esm/widget/hooks/useFormulaValidation.js +3 -2
  152. package/lib/esm/widget/hooks/useFormulaValidation.js.map +1 -1
  153. package/package.json +1 -1
  154. package/lib/cjs/formula/FormulaTokensValidator.d.ts +0 -5
  155. package/lib/cjs/formula/FormulaTokensValidator.js.map +0 -1
  156. package/lib/cjs/formula/FormulaValidator.d.ts +0 -3
  157. package/lib/cjs/formula/FormulaValidator.js +0 -35
  158. package/lib/cjs/formula/FormulaValidator.js.map +0 -1
  159. package/lib/cjs/widget/components/GroupQueryBuilderContext.js.map +0 -1
  160. package/lib/esm/formula/FormulaTokensValidator.d.ts +0 -5
  161. package/lib/esm/formula/FormulaTokensValidator.js.map +0 -1
  162. package/lib/esm/formula/FormulaValidator.d.ts +0 -3
  163. package/lib/esm/formula/FormulaValidator.js +0 -31
  164. package/lib/esm/formula/FormulaValidator.js.map +0 -1
  165. package/lib/esm/widget/components/GroupQueryBuilderContext.js.map +0 -1
@@ -3,12 +3,13 @@ import { Presentation } from "@itwin/presentation-frontend";
3
3
  import { useActiveIModelConnection } from "@itwin/appui-react";
4
4
  import { SvgChevronDown, SvgChevronUp, SvgRemove, } from "@itwin/itwinui-icons-react";
5
5
  import { Alert, ComboBox, Fieldset, IconButton, LabeledInput, LabeledSelect, Small, Text, } from "@itwin/itwinui-react";
6
- import React, { useCallback, useContext, useEffect, useMemo, useState } from "react";
6
+ import React, { useCallback, useEffect, useMemo, useState } from "react";
7
7
  import ActionPanel from "./ActionPanel";
8
8
  import useValidator, { NAME_REQUIREMENTS } from "../hooks/useValidator";
9
9
  import { handleError, WidgetHeader } from "./utils";
10
10
  import "./GroupPropertyAction.scss";
11
- import { ApiContext, MappingClientContext } from "./GroupingMapping";
11
+ import { useMappingClient } from "./context/MappingClientContext";
12
+ import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
12
13
  export const quantityTypesSelectionOptions = [
13
14
  { value: "Area", label: "Area" },
14
15
  { value: "Distance", label: "Distance" },
@@ -145,8 +146,8 @@ const extractProperties = (properties, classToPropertiesMapping, navigation) =>
145
146
  };
146
147
  const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, groupPropertyName, keySet, returnFn, }) => {
147
148
  const iModelConnection = useActiveIModelConnection();
148
- const apiContext = useContext(ApiContext);
149
- const mappingClient = useContext(MappingClientContext);
149
+ const { getAccessToken } = useGroupingMappingApiConfig();
150
+ const mappingClient = useMappingClient();
150
151
  const [propertyName, setPropertyName] = useState("");
151
152
  const [dataType, setDataType] = useState();
152
153
  const [quantityType, setQuantityType] = useState("Undefined");
@@ -211,8 +212,17 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
211
212
  let newEcProperties;
212
213
  // Fetch already existing ec properties then add all classes from presentation
213
214
  if (groupPropertyId) {
214
- // TODO Error handling
215
- const response = await mappingClient.getGroupProperty(apiContext.accessToken, iModelId, mappingId, groupId, groupPropertyId);
215
+ const accessToken = await getAccessToken();
216
+ let response;
217
+ try {
218
+ response = await mappingClient.getGroupProperty(accessToken, iModelId, mappingId, groupId, groupPropertyId);
219
+ }
220
+ catch (error) {
221
+ handleError(error.status);
222
+ }
223
+ if (!response) {
224
+ return;
225
+ }
216
226
  newEcProperties = (_g = (_f = response.property) === null || _f === void 0 ? void 0 : _f.ecProperties) !== null && _g !== void 0 ? _g : [];
217
227
  let keys = Array.from(classToPropertiesMapping.keys()).reverse();
218
228
  for (const ecProperty of newEcProperties) {
@@ -244,7 +254,7 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
244
254
  setIsLoading(false);
245
255
  };
246
256
  void getContent();
247
- }, [apiContext.accessToken, mappingClient, groupId, groupPropertyId, iModelConnection, iModelId, keySet, mappingId]);
257
+ }, [getAccessToken, mappingClient, groupId, groupPropertyId, iModelConnection, iModelId, keySet, mappingId]);
248
258
  const onSave = async () => {
249
259
  const filteredEcProperties = ecProperties.filter((ecProperty) => ecProperty.ecPropertyName && ecProperty.ecPropertyType);
250
260
  if (!(filteredEcProperties === null || filteredEcProperties === void 0 ? void 0 : filteredEcProperties.length) || !validator.allValid()) {
@@ -256,6 +266,7 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
256
266
  }
257
267
  try {
258
268
  setIsLoading(true);
269
+ const accessToken = await getAccessToken();
259
270
  const groupProperty = {
260
271
  propertyName,
261
272
  dataType,
@@ -263,8 +274,8 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
263
274
  ecProperties: filteredEcProperties,
264
275
  };
265
276
  groupPropertyId
266
- ? await mappingClient.updateGroupProperty(apiContext.accessToken, iModelId, mappingId, groupId, groupPropertyId, groupProperty)
267
- : await mappingClient.createGroupProperty(apiContext.accessToken, iModelId, mappingId, groupId, groupProperty);
277
+ ? await mappingClient.updateGroupProperty(accessToken, iModelId, mappingId, groupId, groupPropertyId, groupProperty)
278
+ : await mappingClient.createGroupProperty(accessToken, iModelId, mappingId, groupId, groupProperty);
268
279
  await returnFn(true);
269
280
  }
270
281
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"GroupPropertyAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupPropertyAction.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 ContentDescriptorRequestOptions,\n Field,\n KeySet,\n NestedContentField,\n PropertiesField,\n Ruleset,\n RulesetVariable,\n StructFieldMemberDescription,\n} from \"@itwin/presentation-common\";\nimport {\n ContentSpecificationTypes,\n DefaultContentDisplayTypes,\n PropertyValueFormat,\n RelationshipMeaning,\n RuleTypes,\n} from \"@itwin/presentation-common\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport {\n SvgChevronDown,\n SvgChevronUp,\n SvgRemove,\n} from \"@itwin/itwinui-icons-react\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Alert,\n ComboBox,\n Fieldset,\n IconButton,\n LabeledInput,\n LabeledSelect,\n Small,\n Text,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useContext, useEffect, useMemo, useState } from \"react\";\n\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, WidgetHeader } from \"./utils\";\nimport \"./GroupPropertyAction.scss\";\nimport type { ECProperty, GroupPropertyCreate } from \"@itwin/insights-client\";\nimport { ApiContext, MappingClientContext } from \"./GroupingMapping\";\n\ninterface GroupPropertyActionProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n groupPropertyId?: string;\n groupPropertyName?: string;\n keySet: KeySet;\n returnFn: (modified: boolean) => Promise<void>;\n}\n\nexport const quantityTypesSelectionOptions: SelectOption<string>[] = [\n { value: \"Area\", label: \"Area\" },\n { value: \"Distance\", label: \"Distance\" },\n { value: \"Force\", label: \"Force\" },\n { value: \"Mass\", label: \"Mass\" },\n { value: \"Monetary\", label: \"Monetary\" },\n { value: \"Time\", label: \"Time\" },\n { value: \"Volume\", label: \"Volume\" },\n { value: \"Undefined\", label: \"No Quantity Type\" },\n];\ninterface Property {\n name: string;\n label: string;\n type: string;\n}\n\ninterface NavigationProperty {\n navigationName: string;\n rootClassName: string;\n}\n\nconst extractPrimitive = (\n propertiesField: PropertiesField,\n classToPropertiesMapping: Map<string, Property[]>,\n navigation?: NavigationProperty\n) => {\n // There are rare cases which only happens in multiple selections where it returns more than one.\n // This also checks if this property comes from a navigation property\n const className =\n navigation?.rootClassName ??\n propertiesField.properties[0].property.classInfo.name;\n // Sometimes class names are not defined. Type error. Not guaranteed.\n if (!className) {\n return;\n }\n\n if (!classToPropertiesMapping.has(className)) {\n classToPropertiesMapping.set(className, []);\n }\n\n // Gets property name. Appends path if from navigation.\n const propertyName = navigation\n ? `${navigation.navigationName}.${propertiesField.properties[0].property.name}`\n : propertiesField.properties[0].property.name;\n\n const label = navigation\n ? `${propertiesField.label} (${navigation?.navigationName})`\n : propertiesField.label;\n\n // Ignore hardcoded BisCore navigation properties\n if (propertiesField.type.typeName === \"navigation\") {\n return;\n } else {\n classToPropertiesMapping.get(className)?.push({\n name: propertyName,\n label,\n type: propertiesField.properties[0].property.type,\n });\n }\n};\n\nconst extractStructProperties = (\n name: string,\n className: string,\n classToPropertiesMapping: Map<string, Property[]>,\n members: StructFieldMemberDescription[]\n) => {\n for (const member of members) {\n if (member.type.valueFormat === PropertyValueFormat.Primitive) {\n if (!classToPropertiesMapping.has(className)) {\n classToPropertiesMapping.set(className, []);\n }\n\n classToPropertiesMapping.get(className)?.push({\n name: `${name}.${member.name}`,\n label: member.label,\n type: member.type.typeName,\n });\n } else if (member.type.valueFormat === PropertyValueFormat.Struct) {\n extractStructProperties(\n `${name}.${member.name}`,\n className,\n classToPropertiesMapping,\n member.type.members\n );\n }\n }\n};\n\nconst extractProperties = (\n properties: Field[],\n classToPropertiesMapping: Map<string, Property[]>,\n navigation?: NavigationProperty\n) => {\n for (const property of properties) {\n switch (property.type.valueFormat) {\n case PropertyValueFormat.Primitive: {\n extractPrimitive(\n property as PropertiesField,\n classToPropertiesMapping,\n navigation\n );\n break;\n }\n // Get structs\n case PropertyValueFormat.Struct: {\n const nestedContentField = property as NestedContentField;\n // Only handling single path and not handling nested content fields within navigations\n if (\n nestedContentField.pathToPrimaryClass &&\n nestedContentField.pathToPrimaryClass.length > 1\n ) {\n break;\n }\n\n switch (nestedContentField.relationshipMeaning) {\n case RelationshipMeaning.SameInstance: {\n // Check for aspects. Ignore them if coming from navigation.\n if (\n !navigation &&\n (nestedContentField.pathToPrimaryClass[0].relationshipInfo\n .name === \"BisCore:ElementOwnsUniqueAspect\" ||\n nestedContentField.pathToPrimaryClass[0].relationshipInfo\n .name === \"BisCore:ElementOwnsMultiAspects\")\n ) {\n const className = nestedContentField.contentClassInfo.name;\n if (!classToPropertiesMapping.has(className)) {\n classToPropertiesMapping.set(className, []);\n }\n\n extractProperties(\n nestedContentField.nestedFields,\n classToPropertiesMapping,\n navigation\n );\n }\n\n break;\n }\n // Navigation properties\n case RelationshipMeaning.RelatedInstance: {\n if (\n // Deal with a TypeDefinition\n nestedContentField.pathToPrimaryClass[0].relationshipInfo.name ===\n \"BisCore:GeometricElement3dHasTypeDefinition\"\n ) {\n const className =\n nestedContentField.pathToPrimaryClass[0].targetClassInfo.name;\n extractProperties(\n nestedContentField.nestedFields,\n classToPropertiesMapping,\n {\n navigationName: \"TypeDefinition\",\n rootClassName: className,\n }\n );\n // Hardcoded BisCore navigation properties for the type definition.\n classToPropertiesMapping.get(className)?.push({\n name: \"TypeDefinition.Model.ModeledElement.UserLabel\",\n label: \"Model UserLabel (TypeDefinition)\",\n type: \"string\",\n });\n\n classToPropertiesMapping.get(className)?.push({\n name: \"TypeDefinition.Model.ModeledElement.CodeValue\",\n label: \"Model CodeValue (TypeDefinition)\",\n type: \"string\",\n });\n\n }\n break;\n }\n default: {\n // Some elements don't have a path to primary class or relationship meaning..\n // Most likely a simple struct property\n if (!nestedContentField.pathToPrimaryClass) {\n const columnName = (property as PropertiesField).properties[0]\n .property.name;\n const className = (property as PropertiesField).properties[0]\n .property.classInfo.name;\n extractStructProperties(\n navigation\n ? `${navigation.navigationName}.${columnName}`\n : columnName,\n navigation ? navigation.rootClassName : className,\n classToPropertiesMapping,\n property.type.members\n );\n\n }\n }\n }\n }\n }\n }\n};\n\nconst GroupPropertyAction = ({\n iModelId,\n mappingId,\n groupId,\n groupPropertyId,\n groupPropertyName,\n keySet,\n returnFn,\n}: GroupPropertyActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const apiContext = useContext(ApiContext);\n const mappingClient = useContext(MappingClientContext);\n const [propertyName, setPropertyName] = useState<string>(\"\");\n const [dataType, setDataType] = useState<string | undefined>();\n const [quantityType, setQuantityType] = useState<string>(\"Undefined\");\n const [classToPropertiesMapping, setClassToPropertiesMapping] =\n useState<Map<string, Property[]>>();\n const [ecProperties, setEcProperties] = useState<ECProperty[]>(\n []\n );\n const [validator, showValidationMessage] = useValidator();\n const [propertyAlert, setPropertyAlert] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const getContent = async () => {\n setIsLoading(true);\n const ruleSet: Ruleset = {\n id: \"element-properties\",\n rules: [\n {\n ruleType: RuleTypes.Content,\n specifications: [\n {\n specType: ContentSpecificationTypes.SelectedNodeInstances,\n },\n ],\n }],\n };\n const requestOptions: ContentDescriptorRequestOptions<IModelConnection, KeySet, RulesetVariable> = {\n imodel: iModelConnection,\n keys: keySet,\n rulesetOrId: ruleSet,\n displayType: DefaultContentDisplayTypes.PropertyPane,\n };\n const content = await Presentation.presentation.getContentDescriptor(\n requestOptions\n );\n\n // Only primitives and structs for now\n const properties =\n content?.fields.filter(\n (field) =>\n field.type.valueFormat === PropertyValueFormat.Primitive ||\n field.type.valueFormat === PropertyValueFormat.Struct\n ) ?? [];\n\n // Map properties to their classes\n const classToPropertiesMapping = new Map<string, Property[]>();\n\n extractProperties(properties, classToPropertiesMapping);\n\n const rootClassName = keySet.instanceKeys.keys().next().value;\n\n // Hardcoded BisCore navigation properties.\n classToPropertiesMapping.get(rootClassName)?.push({\n name: \"Model.ModeledElement.UserLabel\",\n label: \"Model UserLabel\",\n type: \"string\",\n });\n\n classToPropertiesMapping.get(rootClassName)?.push({\n name: \"Model.ModeledElement.CodeValue\",\n label: \"Model CodeValue\",\n type: \"string\",\n });\n\n classToPropertiesMapping.get(rootClassName)?.push({\n name: \"Category.CodeValue\",\n label: \"Category CodeValue\",\n type: \"string\",\n });\n\n classToPropertiesMapping.get(rootClassName)?.push({\n name: \"Category.UserLabel\",\n label: \"Category UserLabel\",\n type: \"string\",\n });\n\n setClassToPropertiesMapping(classToPropertiesMapping);\n\n let newEcProperties: ECProperty[];\n // Fetch already existing ec properties then add all classes from presentation\n if (groupPropertyId) {\n // TODO Error handling\n const response = await mappingClient.getGroupProperty(\n apiContext.accessToken,\n iModelId,\n mappingId,\n groupId,\n groupPropertyId\n );\n newEcProperties = response.property?.ecProperties ?? [];\n\n let keys = Array.from(classToPropertiesMapping.keys()).reverse();\n for (const ecProperty of newEcProperties) {\n keys = keys.filter(\n (key) =>\n `${ecProperty.ecSchemaName}:${ecProperty.ecClassName}` !== key\n );\n }\n\n newEcProperties.push(\n ...keys.map((key) => ({\n ecSchemaName: key.split(\":\")[0],\n ecClassName: key.split(\":\")[1],\n // Placeholders for properties\n ecPropertyName: \"\",\n ecPropertyType: \"\",\n }))\n );\n\n setPropertyName(response.property?.propertyName ?? \"\");\n setDataType(response.property?.dataType ?? \"\");\n setQuantityType(response.property?.quantityType ?? \"\");\n } else {\n newEcProperties = Array.from(classToPropertiesMapping)\n .map(([key]) => ({\n ecSchemaName: key.split(\":\")[0],\n ecClassName: key.split(\":\")[1],\n // Placeholders for properties\n ecPropertyName: \"\",\n ecPropertyType: \"\",\n }))\n .reverse();\n }\n\n setEcProperties(newEcProperties);\n\n setIsLoading(false);\n };\n void getContent();\n }, [apiContext.accessToken, mappingClient, groupId, groupPropertyId, iModelConnection, iModelId, keySet, mappingId]);\n\n const onSave = async () => {\n const filteredEcProperties = ecProperties.filter(\n (ecProperty) => ecProperty.ecPropertyName && ecProperty.ecPropertyType\n );\n if (!filteredEcProperties?.length || !validator.allValid()) {\n showValidationMessage(true);\n if (!filteredEcProperties?.length) {\n setPropertyAlert(true);\n }\n return;\n }\n try {\n setIsLoading(true);\n const groupProperty: GroupPropertyCreate = {\n propertyName,\n dataType,\n quantityType,\n ecProperties: filteredEcProperties,\n };\n groupPropertyId\n ? await mappingClient.updateGroupProperty(\n apiContext.accessToken,\n iModelId,\n mappingId,\n groupId,\n groupPropertyId,\n groupProperty\n )\n : await mappingClient.createGroupProperty(\n apiContext.accessToken,\n iModelId,\n mappingId,\n groupId,\n groupProperty\n );\n await returnFn(true);\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n };\n\n const onChange = useCallback((value: string, index: number) => {\n setPropertyAlert(false);\n const property = JSON.parse(value);\n setEcProperties((ecProperties) => {\n const updatedEcProperties = [...ecProperties];\n updatedEcProperties[index].ecPropertyName = property.name;\n\n // Unique types\n let type = \"\";\n switch (property.type) {\n case \"long\":\n type = \"integer\";\n break;\n default:\n type = property.type;\n }\n\n updatedEcProperties[index].ecPropertyType = type;\n return updatedEcProperties;\n });\n }, []);\n\n const propertyOptions = useMemo(() => {\n return ecProperties.map(\n (ecProperty: ECProperty) =>\n classToPropertiesMapping\n ?.get(`${ecProperty.ecSchemaName}:${ecProperty.ecClassName}`)\n ?.map((property) => ({\n value: JSON.stringify({\n name: property.name,\n type: property.type,\n }),\n label: property.label,\n })) ?? []\n );\n }, [classToPropertiesMapping, ecProperties]);\n\n const getValue = useCallback(\n (ecProperty: ECProperty, index: number) => {\n const property = classToPropertiesMapping\n ?.get(`${ecProperty.ecSchemaName}:${ecProperty.ecClassName}`)\n ?.find(\n (property) => property.name === ecProperties[index].ecPropertyName\n );\n const result = JSON.stringify({\n name: property?.name,\n type: property?.type,\n });\n return result;\n },\n [classToPropertiesMapping, ecProperties]\n );\n\n return (\n <>\n <WidgetHeader\n title={groupPropertyName ?? \"Add Property\"}\n returnFn={async () => returnFn(false)}\n />\n <div className='group-property-action-container'>\n <Fieldset className='property-options' legend='Property Details'>\n <Small className='field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='propertyName'\n label='Property Name'\n value={propertyName}\n required\n disabled={isLoading}\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"propertyName\");\n }}\n message={validator.message(\n \"propertyName\",\n propertyName,\n NAME_REQUIREMENTS\n )}\n status={\n validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"propertyName\");\n }}\n />\n <LabeledSelect<string>\n label={\"Data Type\"}\n id='dataType'\n disabled={isLoading}\n options={[\n { value: \"Boolean\", label: \"Boolean\" },\n { value: \"Number\", label: \"Number\" },\n { value: \"String\", label: \"String\" },\n ]}\n required\n value={dataType}\n onChange={(value) => {\n validator.showMessageFor(\"dataType\");\n setDataType(value);\n }}\n message={validator.message(\"dataType\", propertyName, \"required\")}\n status={\n validator.message(\"dataType\", propertyName, \"required\")\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"dataType\");\n }}\n onShow={() => { }}\n onHide={() => { }}\n />\n <LabeledSelect<string>\n label='Quantity Type'\n disabled={isLoading}\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n <Fieldset className='property-selection-container' legend='Properties'>\n {propertyAlert && (\n <Alert type={\"negative\"}>\n Please select at least one property.\n </Alert>\n )}\n {isLoading &&\n Array(3)\n .fill(null)\n .map((_, index) => (\n <Text key={index} variant='headline' isSkeleton>\n LOADING SKELETON\n </Text>\n ))}\n {ecProperties?.map((ecProperty, index) => {\n return (\n <div\n className='property-select-item'\n key={`${ecProperty.ecSchemaName}${ecProperty.ecClassName}`}\n >\n <Text variant='leading'>{ecProperty.ecClassName}</Text>\n <Text isMuted variant='small'>\n {ecProperty.ecSchemaName}\n </Text>\n\n <div className='selection-and-reorder'>\n <ComboBox<string>\n options={propertyOptions[index]}\n value={getValue(ecProperty, index)}\n onChange={(value) => onChange(value, index)}\n inputProps={{\n placeholder: \"<No Property Mapped>\",\n }}\n style={{ width: \"100%\" }}\n />\n <IconButton\n onClick={() => {\n const updatedEcPropertyList = [...ecProperties];\n updatedEcPropertyList[index] = {\n ...updatedEcPropertyList[index],\n ecPropertyName: \"\",\n ecPropertyType: \"\",\n };\n setEcProperties(updatedEcPropertyList);\n }}\n disabled={\n !ecProperty.ecPropertyName && !ecProperty.ecPropertyType\n }\n >\n <SvgRemove />\n </IconButton>\n <IconButton\n onClick={() => {\n const tab = [...ecProperties];\n const item = tab.splice(index, 1);\n tab.splice(index - 1, 0, item[0]);\n setEcProperties(tab);\n }}\n disabled={index === 0}\n >\n <SvgChevronUp />\n </IconButton>\n <IconButton\n onClick={() => {\n const tab = [...ecProperties];\n const item = tab.splice(index, 1);\n tab.splice(index + 1, 0, item[0]);\n setEcProperties(tab);\n }}\n disabled={index === ecProperties.length - 1}\n >\n <SvgChevronDown />\n </IconButton>\n </div>\n </div>\n );\n })}\n </Fieldset>\n </div>\n {/* TODO: Disable when no properties are selected. Will do when I rework property selection. */}\n <ActionPanel onSave={onSave} onCancel={async () => returnFn(false)} isLoading={isLoading} />\n </>\n );\n};\n\nexport default GroupPropertyAction;\n"]}
1
+ {"version":3,"file":"GroupPropertyAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupPropertyAction.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 ContentDescriptorRequestOptions,\n Field,\n KeySet,\n NestedContentField,\n PropertiesField,\n Ruleset,\n RulesetVariable,\n StructFieldMemberDescription,\n} from \"@itwin/presentation-common\";\nimport {\n ContentSpecificationTypes,\n DefaultContentDisplayTypes,\n PropertyValueFormat,\n RelationshipMeaning,\n RuleTypes,\n} from \"@itwin/presentation-common\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport {\n SvgChevronDown,\n SvgChevronUp,\n SvgRemove,\n} from \"@itwin/itwinui-icons-react\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Alert,\n ComboBox,\n Fieldset,\n IconButton,\n LabeledInput,\n LabeledSelect,\n Small,\n Text,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, WidgetHeader } from \"./utils\";\nimport \"./GroupPropertyAction.scss\";\nimport type { ECProperty, GroupPropertyCreate, GroupPropertySingle } from \"@itwin/insights-client\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\ninterface GroupPropertyActionProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n groupPropertyId?: string;\n groupPropertyName?: string;\n keySet: KeySet;\n returnFn: (modified: boolean) => Promise<void>;\n}\n\nexport const quantityTypesSelectionOptions: SelectOption<string>[] = [\n { value: \"Area\", label: \"Area\" },\n { value: \"Distance\", label: \"Distance\" },\n { value: \"Force\", label: \"Force\" },\n { value: \"Mass\", label: \"Mass\" },\n { value: \"Monetary\", label: \"Monetary\" },\n { value: \"Time\", label: \"Time\" },\n { value: \"Volume\", label: \"Volume\" },\n { value: \"Undefined\", label: \"No Quantity Type\" },\n];\ninterface Property {\n name: string;\n label: string;\n type: string;\n}\n\ninterface NavigationProperty {\n navigationName: string;\n rootClassName: string;\n}\n\nconst extractPrimitive = (\n propertiesField: PropertiesField,\n classToPropertiesMapping: Map<string, Property[]>,\n navigation?: NavigationProperty\n) => {\n // There are rare cases which only happens in multiple selections where it returns more than one.\n // This also checks if this property comes from a navigation property\n const className =\n navigation?.rootClassName ??\n propertiesField.properties[0].property.classInfo.name;\n // Sometimes class names are not defined. Type error. Not guaranteed.\n if (!className) {\n return;\n }\n\n if (!classToPropertiesMapping.has(className)) {\n classToPropertiesMapping.set(className, []);\n }\n\n // Gets property name. Appends path if from navigation.\n const propertyName = navigation\n ? `${navigation.navigationName}.${propertiesField.properties[0].property.name}`\n : propertiesField.properties[0].property.name;\n\n const label = navigation\n ? `${propertiesField.label} (${navigation?.navigationName})`\n : propertiesField.label;\n\n // Ignore hardcoded BisCore navigation properties\n if (propertiesField.type.typeName === \"navigation\") {\n return;\n } else {\n classToPropertiesMapping.get(className)?.push({\n name: propertyName,\n label,\n type: propertiesField.properties[0].property.type,\n });\n }\n};\n\nconst extractStructProperties = (\n name: string,\n className: string,\n classToPropertiesMapping: Map<string, Property[]>,\n members: StructFieldMemberDescription[]\n) => {\n for (const member of members) {\n if (member.type.valueFormat === PropertyValueFormat.Primitive) {\n if (!classToPropertiesMapping.has(className)) {\n classToPropertiesMapping.set(className, []);\n }\n\n classToPropertiesMapping.get(className)?.push({\n name: `${name}.${member.name}`,\n label: member.label,\n type: member.type.typeName,\n });\n } else if (member.type.valueFormat === PropertyValueFormat.Struct) {\n extractStructProperties(\n `${name}.${member.name}`,\n className,\n classToPropertiesMapping,\n member.type.members\n );\n }\n }\n};\n\nconst extractProperties = (\n properties: Field[],\n classToPropertiesMapping: Map<string, Property[]>,\n navigation?: NavigationProperty\n) => {\n for (const property of properties) {\n switch (property.type.valueFormat) {\n case PropertyValueFormat.Primitive: {\n extractPrimitive(\n property as PropertiesField,\n classToPropertiesMapping,\n navigation\n );\n break;\n }\n // Get structs\n case PropertyValueFormat.Struct: {\n const nestedContentField = property as NestedContentField;\n // Only handling single path and not handling nested content fields within navigations\n if (\n nestedContentField.pathToPrimaryClass &&\n nestedContentField.pathToPrimaryClass.length > 1\n ) {\n break;\n }\n\n switch (nestedContentField.relationshipMeaning) {\n case RelationshipMeaning.SameInstance: {\n // Check for aspects. Ignore them if coming from navigation.\n if (\n !navigation &&\n (nestedContentField.pathToPrimaryClass[0].relationshipInfo\n .name === \"BisCore:ElementOwnsUniqueAspect\" ||\n nestedContentField.pathToPrimaryClass[0].relationshipInfo\n .name === \"BisCore:ElementOwnsMultiAspects\")\n ) {\n const className = nestedContentField.contentClassInfo.name;\n if (!classToPropertiesMapping.has(className)) {\n classToPropertiesMapping.set(className, []);\n }\n\n extractProperties(\n nestedContentField.nestedFields,\n classToPropertiesMapping,\n navigation\n );\n }\n\n break;\n }\n // Navigation properties\n case RelationshipMeaning.RelatedInstance: {\n if (\n // Deal with a TypeDefinition\n nestedContentField.pathToPrimaryClass[0].relationshipInfo.name ===\n \"BisCore:GeometricElement3dHasTypeDefinition\"\n ) {\n const className =\n nestedContentField.pathToPrimaryClass[0].targetClassInfo.name;\n extractProperties(\n nestedContentField.nestedFields,\n classToPropertiesMapping,\n {\n navigationName: \"TypeDefinition\",\n rootClassName: className,\n }\n );\n // Hardcoded BisCore navigation properties for the type definition.\n classToPropertiesMapping.get(className)?.push({\n name: \"TypeDefinition.Model.ModeledElement.UserLabel\",\n label: \"Model UserLabel (TypeDefinition)\",\n type: \"string\",\n });\n\n classToPropertiesMapping.get(className)?.push({\n name: \"TypeDefinition.Model.ModeledElement.CodeValue\",\n label: \"Model CodeValue (TypeDefinition)\",\n type: \"string\",\n });\n\n }\n break;\n }\n default: {\n // Some elements don't have a path to primary class or relationship meaning..\n // Most likely a simple struct property\n if (!nestedContentField.pathToPrimaryClass) {\n const columnName = (property as PropertiesField).properties[0]\n .property.name;\n const className = (property as PropertiesField).properties[0]\n .property.classInfo.name;\n extractStructProperties(\n navigation\n ? `${navigation.navigationName}.${columnName}`\n : columnName,\n navigation ? navigation.rootClassName : className,\n classToPropertiesMapping,\n property.type.members\n );\n\n }\n }\n }\n }\n }\n }\n};\n\nconst GroupPropertyAction = ({\n iModelId,\n mappingId,\n groupId,\n groupPropertyId,\n groupPropertyName,\n keySet,\n returnFn,\n}: GroupPropertyActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\"\");\n const [dataType, setDataType] = useState<string | undefined>();\n const [quantityType, setQuantityType] = useState<string>(\"Undefined\");\n const [classToPropertiesMapping, setClassToPropertiesMapping] =\n useState<Map<string, Property[]>>();\n const [ecProperties, setEcProperties] = useState<ECProperty[]>(\n []\n );\n const [validator, showValidationMessage] = useValidator();\n const [propertyAlert, setPropertyAlert] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const getContent = async () => {\n setIsLoading(true);\n const ruleSet: Ruleset = {\n id: \"element-properties\",\n rules: [\n {\n ruleType: RuleTypes.Content,\n specifications: [\n {\n specType: ContentSpecificationTypes.SelectedNodeInstances,\n },\n ],\n }],\n };\n const requestOptions: ContentDescriptorRequestOptions<IModelConnection, KeySet, RulesetVariable> = {\n imodel: iModelConnection,\n keys: keySet,\n rulesetOrId: ruleSet,\n displayType: DefaultContentDisplayTypes.PropertyPane,\n };\n const content = await Presentation.presentation.getContentDescriptor(\n requestOptions\n );\n\n // Only primitives and structs for now\n const properties =\n content?.fields.filter(\n (field) =>\n field.type.valueFormat === PropertyValueFormat.Primitive ||\n field.type.valueFormat === PropertyValueFormat.Struct\n ) ?? [];\n\n // Map properties to their classes\n const classToPropertiesMapping = new Map<string, Property[]>();\n\n extractProperties(properties, classToPropertiesMapping);\n\n const rootClassName = keySet.instanceKeys.keys().next().value;\n\n // Hardcoded BisCore navigation properties.\n classToPropertiesMapping.get(rootClassName)?.push({\n name: \"Model.ModeledElement.UserLabel\",\n label: \"Model UserLabel\",\n type: \"string\",\n });\n\n classToPropertiesMapping.get(rootClassName)?.push({\n name: \"Model.ModeledElement.CodeValue\",\n label: \"Model CodeValue\",\n type: \"string\",\n });\n\n classToPropertiesMapping.get(rootClassName)?.push({\n name: \"Category.CodeValue\",\n label: \"Category CodeValue\",\n type: \"string\",\n });\n\n classToPropertiesMapping.get(rootClassName)?.push({\n name: \"Category.UserLabel\",\n label: \"Category UserLabel\",\n type: \"string\",\n });\n\n setClassToPropertiesMapping(classToPropertiesMapping);\n\n let newEcProperties: ECProperty[];\n // Fetch already existing ec properties then add all classes from presentation\n if (groupPropertyId) {\n const accessToken = await getAccessToken();\n let response: GroupPropertySingle | undefined;\n try {\n response = await mappingClient.getGroupProperty(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n groupPropertyId\n );\n } catch (error: any) {\n handleError(error.status);\n }\n\n if (!response) {\n return;\n }\n newEcProperties = response.property?.ecProperties ?? [];\n\n let keys = Array.from(classToPropertiesMapping.keys()).reverse();\n for (const ecProperty of newEcProperties) {\n keys = keys.filter(\n (key) =>\n `${ecProperty.ecSchemaName}:${ecProperty.ecClassName}` !== key\n );\n }\n\n newEcProperties.push(\n ...keys.map((key) => ({\n ecSchemaName: key.split(\":\")[0],\n ecClassName: key.split(\":\")[1],\n // Placeholders for properties\n ecPropertyName: \"\",\n ecPropertyType: \"\",\n }))\n );\n\n setPropertyName(response.property?.propertyName ?? \"\");\n setDataType(response.property?.dataType ?? \"\");\n setQuantityType(response.property?.quantityType ?? \"\");\n } else {\n newEcProperties = Array.from(classToPropertiesMapping)\n .map(([key]) => ({\n ecSchemaName: key.split(\":\")[0],\n ecClassName: key.split(\":\")[1],\n // Placeholders for properties\n ecPropertyName: \"\",\n ecPropertyType: \"\",\n }))\n .reverse();\n }\n\n setEcProperties(newEcProperties);\n\n setIsLoading(false);\n };\n void getContent();\n }, [getAccessToken, mappingClient, groupId, groupPropertyId, iModelConnection, iModelId, keySet, mappingId]);\n\n const onSave = async () => {\n const filteredEcProperties = ecProperties.filter(\n (ecProperty) => ecProperty.ecPropertyName && ecProperty.ecPropertyType\n );\n if (!filteredEcProperties?.length || !validator.allValid()) {\n showValidationMessage(true);\n if (!filteredEcProperties?.length) {\n setPropertyAlert(true);\n }\n return;\n }\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const groupProperty: GroupPropertyCreate = {\n propertyName,\n dataType,\n quantityType,\n ecProperties: filteredEcProperties,\n };\n groupPropertyId\n ? await mappingClient.updateGroupProperty(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n groupPropertyId,\n groupProperty\n )\n : await mappingClient.createGroupProperty(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n groupProperty\n );\n await returnFn(true);\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n };\n\n const onChange = useCallback((value: string, index: number) => {\n setPropertyAlert(false);\n const property = JSON.parse(value);\n setEcProperties((ecProperties) => {\n const updatedEcProperties = [...ecProperties];\n updatedEcProperties[index].ecPropertyName = property.name;\n\n // Unique types\n let type = \"\";\n switch (property.type) {\n case \"long\":\n type = \"integer\";\n break;\n default:\n type = property.type;\n }\n\n updatedEcProperties[index].ecPropertyType = type;\n return updatedEcProperties;\n });\n }, []);\n\n const propertyOptions = useMemo(() => {\n return ecProperties.map(\n (ecProperty: ECProperty) =>\n classToPropertiesMapping\n ?.get(`${ecProperty.ecSchemaName}:${ecProperty.ecClassName}`)\n ?.map((property) => ({\n value: JSON.stringify({\n name: property.name,\n type: property.type,\n }),\n label: property.label,\n })) ?? []\n );\n }, [classToPropertiesMapping, ecProperties]);\n\n const getValue = useCallback(\n (ecProperty: ECProperty, index: number) => {\n const property = classToPropertiesMapping\n ?.get(`${ecProperty.ecSchemaName}:${ecProperty.ecClassName}`)\n ?.find(\n (property) => property.name === ecProperties[index].ecPropertyName\n );\n const result = JSON.stringify({\n name: property?.name,\n type: property?.type,\n });\n return result;\n },\n [classToPropertiesMapping, ecProperties]\n );\n\n return (\n <>\n <WidgetHeader\n title={groupPropertyName ?? \"Add Property\"}\n returnFn={async () => returnFn(false)}\n />\n <div className='group-property-action-container'>\n <Fieldset className='property-options' legend='Property Details'>\n <Small className='field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='propertyName'\n label='Property Name'\n value={propertyName}\n required\n disabled={isLoading}\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"propertyName\");\n }}\n message={validator.message(\n \"propertyName\",\n propertyName,\n NAME_REQUIREMENTS\n )}\n status={\n validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"propertyName\");\n }}\n />\n <LabeledSelect<string>\n label={\"Data Type\"}\n id='dataType'\n disabled={isLoading}\n options={[\n { value: \"Boolean\", label: \"Boolean\" },\n { value: \"Number\", label: \"Number\" },\n { value: \"String\", label: \"String\" },\n ]}\n required\n value={dataType}\n onChange={(value) => {\n validator.showMessageFor(\"dataType\");\n setDataType(value);\n }}\n message={validator.message(\"dataType\", propertyName, \"required\")}\n status={\n validator.message(\"dataType\", propertyName, \"required\")\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"dataType\");\n }}\n onShow={() => { }}\n onHide={() => { }}\n />\n <LabeledSelect<string>\n label='Quantity Type'\n disabled={isLoading}\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n <Fieldset className='property-selection-container' legend='Properties'>\n {propertyAlert && (\n <Alert type={\"negative\"}>\n Please select at least one property.\n </Alert>\n )}\n {isLoading &&\n Array(3)\n .fill(null)\n .map((_, index) => (\n <Text key={index} variant='headline' isSkeleton>\n LOADING SKELETON\n </Text>\n ))}\n {ecProperties?.map((ecProperty, index) => {\n return (\n <div\n className='property-select-item'\n key={`${ecProperty.ecSchemaName}${ecProperty.ecClassName}`}\n >\n <Text variant='leading'>{ecProperty.ecClassName}</Text>\n <Text isMuted variant='small'>\n {ecProperty.ecSchemaName}\n </Text>\n\n <div className='selection-and-reorder'>\n <ComboBox<string>\n options={propertyOptions[index]}\n value={getValue(ecProperty, index)}\n onChange={(value) => onChange(value, index)}\n inputProps={{\n placeholder: \"<No Property Mapped>\",\n }}\n style={{ width: \"100%\" }}\n />\n <IconButton\n onClick={() => {\n const updatedEcPropertyList = [...ecProperties];\n updatedEcPropertyList[index] = {\n ...updatedEcPropertyList[index],\n ecPropertyName: \"\",\n ecPropertyType: \"\",\n };\n setEcProperties(updatedEcPropertyList);\n }}\n disabled={\n !ecProperty.ecPropertyName && !ecProperty.ecPropertyType\n }\n >\n <SvgRemove />\n </IconButton>\n <IconButton\n onClick={() => {\n const tab = [...ecProperties];\n const item = tab.splice(index, 1);\n tab.splice(index - 1, 0, item[0]);\n setEcProperties(tab);\n }}\n disabled={index === 0}\n >\n <SvgChevronUp />\n </IconButton>\n <IconButton\n onClick={() => {\n const tab = [...ecProperties];\n const item = tab.splice(index, 1);\n tab.splice(index + 1, 0, item[0]);\n setEcProperties(tab);\n }}\n disabled={index === ecProperties.length - 1}\n >\n <SvgChevronDown />\n </IconButton>\n </div>\n </div>\n );\n })}\n </Fieldset>\n </div>\n {/* TODO: Disable when no properties are selected. Will do when I rework property selection. */}\n <ActionPanel onSave={onSave} onCancel={async () => returnFn(false)} isLoading={isLoading} />\n </>\n );\n};\n\nexport default GroupPropertyAction;\n"]}
@@ -4,14 +4,15 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { SvgAdd, SvgDelete, SvgEdit, SvgMore, } from "@itwin/itwinui-icons-react";
6
6
  import { Button, DropdownMenu, IconButton, MenuItem, Table, } from "@itwin/itwinui-react";
7
- import React, { useContext, useMemo, useState } from "react";
7
+ import React, { useMemo, useState } from "react";
8
8
  import DeleteModal from "./DeleteModal";
9
9
  import { PropertyMenuView } from "./PropertyMenu";
10
- import { ApiContext, MappingClientContext } from "./GroupingMapping";
10
+ import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
11
+ import { useMappingClient } from "./context/MappingClientContext";
11
12
  const GroupPropertyTable = ({ iModelId, mappingId, groupId, selectedGroupProperty, onGroupPropertyModify, setSelectedGroupProperty, isLoadingGroupProperties, groupProperties, refreshGroupProperties, setGroupModifyView, }) => {
12
13
  var _a;
13
- const apiContext = useContext(ApiContext);
14
- const mappingClient = useContext(MappingClientContext);
14
+ const { getAccessToken } = useGroupingMappingApiConfig();
15
+ const mappingClient = useMappingClient();
15
16
  const [showGroupPropertyDeleteModal, setShowGroupPropertyDeleteModal] = useState(false);
16
17
  const groupPropertiesColumns = useMemo(() => [
17
18
  {
@@ -53,7 +54,8 @@ const GroupPropertyTable = ({ iModelId, mappingId, groupId, selectedGroupPropert
53
54
  React.createElement(Table, { data: groupProperties, density: 'extra-condensed', columns: groupPropertiesColumns, emptyTableContent: 'No Group Properties', isSortable: true, isLoading: isLoadingGroupProperties }),
54
55
  React.createElement(DeleteModal, { entityName: (_a = selectedGroupProperty === null || selectedGroupProperty === void 0 ? void 0 : selectedGroupProperty.propertyName) !== null && _a !== void 0 ? _a : "", show: showGroupPropertyDeleteModal, setShow: setShowGroupPropertyDeleteModal, onDelete: async () => {
55
56
  var _a;
56
- await mappingClient.deleteGroupProperty(apiContext.accessToken, iModelId, mappingId, groupId, (_a = selectedGroupProperty === null || selectedGroupProperty === void 0 ? void 0 : selectedGroupProperty.id) !== null && _a !== void 0 ? _a : "");
57
+ const accessToken = await getAccessToken();
58
+ await mappingClient.deleteGroupProperty(accessToken, iModelId, mappingId, groupId, (_a = selectedGroupProperty === null || selectedGroupProperty === void 0 ? void 0 : selectedGroupProperty.id) !== null && _a !== void 0 ? _a : "");
57
59
  }, refresh: refreshGroupProperties })));
58
60
  };
59
61
  export default GroupPropertyTable;
@@ -1 +1 @@
1
- {"version":3,"file":"GroupPropertyTable.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupPropertyTable.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n Table,\n} from \"@itwin/itwinui-react\";\nimport React, { useContext, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport type { CellProps } from \"react-table\";\nimport DeleteModal from \"./DeleteModal\";\nimport { PropertyMenuView } from \"./PropertyMenu\";\nimport type { GroupProperty } from \"@itwin/insights-client\";\nimport { ApiContext, MappingClientContext } from \"./GroupingMapping\";\n\nexport type GroupPropertyType = CreateTypeFromInterface<GroupProperty>;\n\ninterface GroupPropertyTableProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n setSelectedGroupProperty: React.Dispatch<React.SetStateAction<CreateTypeFromInterface<GroupPropertyType> | undefined>>;\n setGroupModifyView: React.Dispatch<React.SetStateAction<PropertyMenuView>>;\n onGroupPropertyModify: (value: CellProps<GroupPropertyType>) => void;\n isLoadingGroupProperties: boolean;\n groupProperties: GroupPropertyType[];\n refreshGroupProperties: () => Promise<void>;\n selectedGroupProperty?: GroupPropertyType;\n}\n\nconst GroupPropertyTable = ({\n iModelId,\n mappingId,\n groupId,\n selectedGroupProperty,\n onGroupPropertyModify,\n setSelectedGroupProperty,\n isLoadingGroupProperties,\n groupProperties,\n refreshGroupProperties,\n setGroupModifyView,\n}: GroupPropertyTableProps) => {\n const apiContext = useContext(ApiContext);\n const mappingClient = useContext(MappingClientContext);\n const [showGroupPropertyDeleteModal, setShowGroupPropertyDeleteModal] =\n useState<boolean>(false);\n\n const groupPropertiesColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"propertyName\",\n Header: \"Property\",\n accessor: \"propertyName\",\n Cell: (value: CellProps<GroupPropertyType>) => (\n <div\n className='iui-anchor'\n onClick={() => onGroupPropertyModify(value)}\n >\n {value.row.original.propertyName}\n </div>\n ),\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<GroupPropertyType>) => {\n return (\n <DropdownMenu\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => onGroupPropertyModify(value)}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={() => {\n setSelectedGroupProperty(value.row.original);\n setShowGroupPropertyDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ]}\n >\n <IconButton styleType='borderless'>\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n );\n },\n },\n ],\n },\n ],\n [onGroupPropertyModify, setSelectedGroupProperty],\n );\n\n return (\n <>\n <Button\n startIcon={<SvgAdd />}\n styleType='high-visibility'\n onClick={() => {\n setGroupModifyView(PropertyMenuView.ADD_GROUP_PROPERTY);\n }}\n >\n Add Property\n </Button>\n <Table<GroupPropertyType>\n data={groupProperties}\n density='extra-condensed'\n columns={groupPropertiesColumns}\n emptyTableContent='No Group Properties'\n isSortable\n isLoading={isLoadingGroupProperties}\n />\n <DeleteModal\n entityName={selectedGroupProperty?.propertyName ?? \"\"}\n show={showGroupPropertyDeleteModal}\n setShow={setShowGroupPropertyDeleteModal}\n onDelete={async () => {\n await mappingClient.deleteGroupProperty(\n apiContext.accessToken,\n iModelId,\n mappingId,\n groupId,\n selectedGroupProperty?.id ?? \"\",\n );\n }}\n refresh={refreshGroupProperties}\n />\n </>\n );\n};\n\nexport default GroupPropertyTable;\n"]}
1
+ {"version":3,"file":"GroupPropertyTable.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupPropertyTable.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n Table,\n} from \"@itwin/itwinui-react\";\nimport React, { useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport type { CellProps } from \"react-table\";\nimport DeleteModal from \"./DeleteModal\";\nimport { PropertyMenuView } from \"./PropertyMenu\";\nimport type { GroupProperty } from \"@itwin/insights-client\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\n\nexport type GroupPropertyType = CreateTypeFromInterface<GroupProperty>;\n\ninterface GroupPropertyTableProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n setSelectedGroupProperty: React.Dispatch<React.SetStateAction<CreateTypeFromInterface<GroupPropertyType> | undefined>>;\n setGroupModifyView: React.Dispatch<React.SetStateAction<PropertyMenuView>>;\n onGroupPropertyModify: (value: CellProps<GroupPropertyType>) => void;\n isLoadingGroupProperties: boolean;\n groupProperties: GroupPropertyType[];\n refreshGroupProperties: () => Promise<void>;\n selectedGroupProperty?: GroupPropertyType;\n}\n\nconst GroupPropertyTable = ({\n iModelId,\n mappingId,\n groupId,\n selectedGroupProperty,\n onGroupPropertyModify,\n setSelectedGroupProperty,\n isLoadingGroupProperties,\n groupProperties,\n refreshGroupProperties,\n setGroupModifyView,\n}: GroupPropertyTableProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [showGroupPropertyDeleteModal, setShowGroupPropertyDeleteModal] =\n useState<boolean>(false);\n\n const groupPropertiesColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"propertyName\",\n Header: \"Property\",\n accessor: \"propertyName\",\n Cell: (value: CellProps<GroupPropertyType>) => (\n <div\n className='iui-anchor'\n onClick={() => onGroupPropertyModify(value)}\n >\n {value.row.original.propertyName}\n </div>\n ),\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<GroupPropertyType>) => {\n return (\n <DropdownMenu\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => onGroupPropertyModify(value)}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={() => {\n setSelectedGroupProperty(value.row.original);\n setShowGroupPropertyDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ]}\n >\n <IconButton styleType='borderless'>\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n );\n },\n },\n ],\n },\n ],\n [onGroupPropertyModify, setSelectedGroupProperty],\n );\n\n return (\n <>\n <Button\n startIcon={<SvgAdd />}\n styleType='high-visibility'\n onClick={() => {\n setGroupModifyView(PropertyMenuView.ADD_GROUP_PROPERTY);\n }}\n >\n Add Property\n </Button>\n <Table<GroupPropertyType>\n data={groupProperties}\n density='extra-condensed'\n columns={groupPropertiesColumns}\n emptyTableContent='No Group Properties'\n isSortable\n isLoading={isLoadingGroupProperties}\n />\n <DeleteModal\n entityName={selectedGroupProperty?.propertyName ?? \"\"}\n show={showGroupPropertyDeleteModal}\n setShow={setShowGroupPropertyDeleteModal}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteGroupProperty(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n selectedGroupProperty?.id ?? \"\",\n );\n }}\n refresh={refreshGroupProperties}\n />\n </>\n );\n};\n\nexport default GroupPropertyTable;\n"]}
@@ -7,7 +7,7 @@ import { useActiveIModelConnection } from "@itwin/appui-react";
7
7
  import { KeySet } from "@itwin/presentation-common";
8
8
  import { GroupQueryBuilderApi } from "../../api/GroupQueryBuilderApi";
9
9
  import { PropertyGridWrapperApp } from "./property-grid/PropertyGridWrapper";
10
- import { GroupQueryBuilderContext } from "./GroupQueryBuilderContext";
10
+ import { GroupQueryBuilderContext } from "./context/GroupQueryBuilderContext";
11
11
  import { Button } from "@itwin/itwinui-react";
12
12
  import "./GroupQueryBuilder.scss";
13
13
  export const GroupQueryBuilderContainer = () => {
@@ -30,15 +30,17 @@ export const GroupQueryBuilderContainer = () => {
30
30
  GroupQueryBuilderApi.removeSelectionListener();
31
31
  };
32
32
  }, [iModelConnection, context]);
33
- const _onClickResetButton = async () => {
33
+ const _onClickResetButton = () => {
34
34
  context.setQuery("");
35
35
  context.queryBuilder.query = undefined;
36
36
  context.setCurrentPropertyList([]);
37
- await context.resetView();
37
+ context.resetView().catch((e) =>
38
+ /* eslint-disable no-console */
39
+ console.error(e));
38
40
  };
39
- return (React.createElement("div", { className: 'find-similar-container' },
41
+ return (React.createElement("div", { className: "find-similar-container" },
40
42
  React.createElement(PropertyGridWrapperApp, { keys: keysState, imodel: iModelConnection }),
41
- selected && (React.createElement("div", { className: 'button-container' },
42
- React.createElement(Button, { styleType: 'default', size: 'small', className: 'reset-button', onClick: _onClickResetButton }, "Reset")))));
43
+ selected && (React.createElement("div", { className: "button-container" },
44
+ React.createElement(Button, { styleType: "default", size: "small", className: "reset-button", onClick: _onClickResetButton }, "Reset")))));
43
45
  };
44
46
  //# sourceMappingURL=GroupQueryBuilderContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupQueryBuilderContainer.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupQueryBuilderContainer.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAK/D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,0BAA0B,CAAC;AAElC,MAAM,CAAC,MAAM,0BAA0B,GAA4B,GAAG,EAAE;IACtE,MAAM,gBAAgB,GAAG,yBAAyB,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;IAE3D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,IAAI,MAAM,EAAE,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,mBAAmB,GAAG,KAAK,EAC/B,GAA6B,EAC7B,iBAAqC,EACrC,EAAE;YACF,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAEnC,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACxE,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,gBAAgB,EAAE;YACpB,oBAAoB,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;SAChE;QACD,OAAO,GAAG,EAAE;YACV,oBAAoB,CAAC,uBAAuB,EAAE,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhC,MAAM,mBAAmB,GAAG,KAAK,IAAI,EAAE;QACrC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC;QACvC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC,CAAC;IAEF,OAAO,CACL,6BAAK,SAAS,EAAC,wBAAwB;QACrC,oBAAC,sBAAsB,IAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAI;QACpE,QAAQ,IAAI,CACX,6BAAK,SAAS,EAAC,kBAAkB;YAC/B,oBAAC,MAAM,IACL,SAAS,EAAC,SAAS,EACnB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,cAAc,EACxB,OAAO,EAAE,mBAAmB,YAGrB,CACL,CACP,CACG,CACP,CAAC;AACJ,CAAC,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 React, { useEffect } from \"react\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport { KeySet } from \"@itwin/presentation-common\";\nimport { GroupQueryBuilderApi } from \"../../api/GroupQueryBuilderApi\";\nimport { PropertyGridWrapperApp } from \"./property-grid/PropertyGridWrapper\";\nimport { GroupQueryBuilderContext } from \"./GroupQueryBuilderContext\";\nimport { Button } from \"@itwin/itwinui-react\";\nimport \"./GroupQueryBuilder.scss\";\n\nexport const GroupQueryBuilderContainer: React.FunctionComponent = () => {\n const iModelConnection = useActiveIModelConnection();\n const context = React.useContext(GroupQueryBuilderContext);\n\n const [keysState, setKeysState] = React.useState<KeySet>(new KeySet());\n const [selected, SetSelected] = React.useState<boolean>(false);\n\n useEffect(() => {\n const _onSelectionChanged = async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n SetSelected(true);\n context.setCurrentPropertyList([]);\n\n const selection = selectionProvider.getSelection(evt.imodel, evt.level);\n const keys = new KeySet(selection);\n setKeysState(keys);\n };\n\n if (iModelConnection) {\n GroupQueryBuilderApi.addSelectionListener(_onSelectionChanged);\n }\n return () => {\n GroupQueryBuilderApi.removeSelectionListener();\n };\n }, [iModelConnection, context]);\n\n const _onClickResetButton = async () => {\n context.setQuery(\"\");\n context.queryBuilder.query = undefined;\n context.setCurrentPropertyList([]);\n await context.resetView();\n };\n\n return (\n <div className='find-similar-container'>\n <PropertyGridWrapperApp keys={keysState} imodel={iModelConnection} />\n {selected && (\n <div className='button-container'>\n <Button\n styleType='default'\n size='small'\n className='reset-button'\n onClick={_onClickResetButton}\n >\n Reset\n </Button>\n </div>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"GroupQueryBuilderContainer.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupQueryBuilderContainer.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAK/D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,0BAA0B,CAAC;AAElC,MAAM,CAAC,MAAM,0BAA0B,GAA4B,GAAG,EAAE;IACtE,MAAM,gBAAgB,GAAG,yBAAyB,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;IAE3D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,IAAI,MAAM,EAAE,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,mBAAmB,GAAG,KAAK,EAC/B,GAA6B,EAC7B,iBAAqC,EACrC,EAAE;YACF,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAEnC,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACxE,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,gBAAgB,EAAE;YACpB,oBAAoB,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;SAChE;QACD,OAAO,GAAG,EAAE;YACV,oBAAoB,CAAC,uBAAuB,EAAE,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhC,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC;QACvC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,+BAA+B;QAC/B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CACjB,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,6BAAK,SAAS,EAAC,wBAAwB;QACrC,oBAAC,sBAAsB,IAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAI;QACpE,QAAQ,IAAI,CACX,6BAAK,SAAS,EAAC,kBAAkB;YAC/B,oBAAC,MAAM,IACL,SAAS,EAAC,SAAS,EACnB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,cAAc,EACxB,OAAO,EAAE,mBAAmB,YAGrB,CACL,CACP,CACG,CACP,CAAC;AACJ,CAAC,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 React, { useEffect } from \"react\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport { KeySet } from \"@itwin/presentation-common\";\nimport { GroupQueryBuilderApi } from \"../../api/GroupQueryBuilderApi\";\nimport { PropertyGridWrapperApp } from \"./property-grid/PropertyGridWrapper\";\nimport { GroupQueryBuilderContext } from \"./context/GroupQueryBuilderContext\";\nimport { Button } from \"@itwin/itwinui-react\";\nimport \"./GroupQueryBuilder.scss\";\n\nexport const GroupQueryBuilderContainer: React.FunctionComponent = () => {\n const iModelConnection = useActiveIModelConnection();\n const context = React.useContext(GroupQueryBuilderContext);\n\n const [keysState, setKeysState] = React.useState<KeySet>(new KeySet());\n const [selected, SetSelected] = React.useState<boolean>(false);\n\n useEffect(() => {\n const _onSelectionChanged = async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider\n ) => {\n SetSelected(true);\n context.setCurrentPropertyList([]);\n\n const selection = selectionProvider.getSelection(evt.imodel, evt.level);\n const keys = new KeySet(selection);\n setKeysState(keys);\n };\n\n if (iModelConnection) {\n GroupQueryBuilderApi.addSelectionListener(_onSelectionChanged);\n }\n return () => {\n GroupQueryBuilderApi.removeSelectionListener();\n };\n }, [iModelConnection, context]);\n\n const _onClickResetButton = () => {\n context.setQuery(\"\");\n context.queryBuilder.query = undefined;\n context.setCurrentPropertyList([]);\n context.resetView().catch((e) =>\n /* eslint-disable no-console */\n console.error(e)\n );\n };\n\n return (\n <div className=\"find-similar-container\">\n <PropertyGridWrapperApp keys={keysState} imodel={iModelConnection} />\n {selected && (\n <div className=\"button-container\">\n <Button\n styleType=\"default\"\n size=\"small\"\n className=\"reset-button\"\n onClick={_onClickResetButton}\n >\n Reset\n </Button>\n </div>\n )}\n </div>\n );\n};\n"]}
@@ -3,18 +3,19 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { useActiveIModelConnection } from "@itwin/appui-react";
6
- import React, { useCallback, useContext, useEffect, useRef, useState, } from "react";
6
+ import React, { useCallback, useEffect, useRef, useState, } from "react";
7
7
  import { Button, ButtonGroup, DropdownMenu, IconButton, MenuItem, ProgressRadial, Surface, toaster, ToggleSwitch, } from "@itwin/itwinui-react";
8
8
  import { SvgAdd, SvgDelete, SvgEdit, SvgList, SvgMore, SvgVisibilityHide, SvgVisibilityShow, } from "@itwin/itwinui-icons-react";
9
9
  import DeleteModal from "./DeleteModal";
10
10
  import "./Grouping.scss";
11
11
  import { PropertyMenu } from "./PropertyMenu";
12
- import { clearEmphasizedElements, clearEmphasizedOverriddenElements, clearHiddenElements, clearOverriddenElements, emphasisElementsById, emphasizeElements, getHiliteIds, hideElements, hideElementsById, overrideElements, overrideElementsById, zoomToElements, } from "./viewerUtils";
12
+ import { clearEmphasizedElements, clearEmphasizedOverriddenElements, clearHiddenElements, clearOverriddenElements, emphasizeElements, getHiliteIds, hideElements, hideElementsById, overrideElements, zoomToElements, } from "./viewerUtils";
13
13
  import { EmptyMessage, fetchIdsFromQuery, handleError, LoadingOverlay, WidgetHeader, } from "./utils";
14
14
  import GroupAction from "./GroupAction";
15
- import { ApiContext, MappingClientContext } from "./GroupingMapping";
15
+ import { useMappingClient } from "./context/MappingClientContext";
16
16
  import { FeatureOverrideType } from "@itwin/core-common";
17
17
  import { GroupTile } from "./GroupTile";
18
+ import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
18
19
  var GroupsView;
19
20
  (function (GroupsView) {
20
21
  GroupsView["GROUPS"] = "groups";
@@ -23,10 +24,11 @@ var GroupsView;
23
24
  GroupsView["PROPERTIES"] = "properties";
24
25
  })(GroupsView || (GroupsView = {}));
25
26
  const goldenAngle = 180 * (3 - Math.sqrt(5));
26
- const fetchGroups = async (setGroups, iModelId, mappingId, setIsLoading, apiContext, mappingClient) => {
27
+ const fetchGroups = async (setGroups, iModelId, mappingId, setIsLoading, getAccessToken, mappingClient) => {
27
28
  try {
28
29
  setIsLoading(true);
29
- const groups = await mappingClient.getGroups(apiContext.accessToken, iModelId, mappingId);
30
+ const accessToken = await getAccessToken();
31
+ const groups = await mappingClient.getGroups(accessToken, iModelId, mappingId);
30
32
  setGroups(groups);
31
33
  return groups;
32
34
  }
@@ -41,8 +43,8 @@ const fetchGroups = async (setGroups, iModelId, mappingId, setIsLoading, apiCont
41
43
  export const Groupings = ({ mapping, goBack }) => {
42
44
  var _a, _b, _c, _d, _e, _f;
43
45
  const iModelConnection = useActiveIModelConnection();
44
- const apiContext = useContext(ApiContext);
45
- const mappingClient = useContext(MappingClientContext);
46
+ const { getAccessToken } = useGroupingMappingApiConfig();
47
+ const mappingClient = useMappingClient();
46
48
  const iModelId = (_a = useActiveIModelConnection()) === null || _a === void 0 ? void 0 : _a.iModelId;
47
49
  const [showDeleteModal, setShowDeleteModal] = useState(false);
48
50
  const [isLoading, setIsLoading] = useState(true);
@@ -55,28 +57,19 @@ export const Groupings = ({ mapping, goBack }) => {
55
57
  const [showGroupColor, setShowGroupColor] = useState(false);
56
58
  useEffect(() => {
57
59
  var _a;
58
- void fetchGroups(setGroups, iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", setIsLoading, apiContext, mappingClient);
59
- }, [apiContext, mappingClient, iModelId, mapping.id, setIsLoading]);
60
+ void fetchGroups(setGroups, iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", setIsLoading, getAccessToken, mappingClient);
61
+ }, [getAccessToken, mappingClient, iModelId, mapping.id, setIsLoading]);
60
62
  const getGroupColor = function (index) {
61
63
  return `hsl(${index * goldenAngle + 60}, 100%, 50%)`;
62
64
  };
63
- const visualizeGroupColors = useCallback(async (viewGroups) => {
64
- var _a, _b, _c, _d;
65
- setLoadingQuery(true);
66
- clearEmphasizedOverriddenElements();
65
+ const getHiliteIdsFromGroups = useCallback(async (groups) => {
66
+ var _a, _b;
67
67
  let allIds = [];
68
- for (const group of viewGroups) {
69
- const index = viewGroups.length > groups.length
70
- ? viewGroups.findIndex((g) => g.id === group.id)
71
- : groups.findIndex((g) => g.id === group.id);
68
+ for (const group of groups) {
72
69
  const query = (_a = group.query) !== null && _a !== void 0 ? _a : "";
70
+ let currentIds = [];
73
71
  if (hilitedElements.current.has(query)) {
74
- const hilitedIds = (_b = hilitedElements.current.get(query)) !== null && _b !== void 0 ? _b : [];
75
- overrideElements(hilitedIds, getGroupColor(index), FeatureOverrideType.ColorAndAlpha);
76
- emphasizeElements(hilitedIds, undefined);
77
- if (!hiddenGroupsIds.includes((_c = group.id) !== null && _c !== void 0 ? _c : "")) {
78
- allIds = allIds.concat(hilitedIds);
79
- }
72
+ currentIds = (_b = hilitedElements.current.get(query)) !== null && _b !== void 0 ? _b : [];
80
73
  }
81
74
  else {
82
75
  try {
@@ -84,21 +77,36 @@ export const Groupings = ({ mapping, goBack }) => {
84
77
  if (ids.length === 0) {
85
78
  toaster.warning(`${group.groupName}'s query is valid but produced no results.`);
86
79
  }
87
- await overrideElementsById(iModelConnection, ids, getGroupColor(index), FeatureOverrideType.ColorAndAlpha);
88
- const hiliteIds = await emphasisElementsById(iModelConnection, ids, undefined);
89
- hilitedElements.current.set(query, hiliteIds);
90
- if (!hiddenGroupsIds.includes((_d = group.id) !== null && _d !== void 0 ? _d : "")) {
91
- allIds = allIds.concat(hiliteIds);
92
- }
80
+ currentIds = await getHiliteIds(ids, iModelConnection);
81
+ hilitedElements.current.set(query, currentIds);
93
82
  }
94
83
  catch {
95
- toaster.negative(`Could not load ${group.groupName}. Query could not be resolved.`);
84
+ toaster.negative(`Could not hide/show ${group.groupName}. Query could not be resolved.`);
96
85
  }
97
86
  }
87
+ allIds = allIds.concat(currentIds);
88
+ }
89
+ return allIds;
90
+ }, [iModelConnection, hilitedElements]);
91
+ const visualizeGroupColors = useCallback(async (viewGroups) => {
92
+ var _a;
93
+ setLoadingQuery(true);
94
+ clearEmphasizedOverriddenElements();
95
+ let allIds = [];
96
+ for (const group of viewGroups) {
97
+ const index = viewGroups.length > groups.length
98
+ ? viewGroups.findIndex((g) => g.id === group.id)
99
+ : groups.findIndex((g) => g.id === group.id);
100
+ const hilitedIds = await getHiliteIdsFromGroups([group]);
101
+ overrideElements(hilitedIds, getGroupColor(index), FeatureOverrideType.ColorAndAlpha);
102
+ emphasizeElements(hilitedIds, undefined);
103
+ if (!hiddenGroupsIds.includes((_a = group.id) !== null && _a !== void 0 ? _a : "")) {
104
+ allIds = allIds.concat(hilitedIds);
105
+ }
98
106
  }
99
107
  await zoomToElements(allIds);
100
108
  setLoadingQuery(false);
101
- }, [iModelConnection, groups, hiddenGroupsIds]);
109
+ }, [groups, hiddenGroupsIds, getHiliteIdsFromGroups]);
102
110
  const hideGroups = useCallback(async (viewGroups, zoomTo = true) => {
103
111
  var _a, _b;
104
112
  setLoadingQuery(true);
@@ -131,39 +139,18 @@ export const Groupings = ({ mapping, goBack }) => {
131
139
  setLoadingQuery(false);
132
140
  }, [iModelConnection]);
133
141
  const showGroup = useCallback(async (viewGroup) => {
134
- var _a, _b;
135
142
  clearHiddenElements();
136
- const newHiddenGroups = [];
137
- for (const id of hiddenGroupsIds) {
138
- if (id === viewGroup.id) {
139
- continue;
140
- }
141
- const newHiddenGroup = groups.find((g) => g.id === id);
142
- if (newHiddenGroup) {
143
- newHiddenGroups.push(newHiddenGroup);
144
- }
145
- }
146
- await hideGroups(newHiddenGroups, false);
147
- // zoom to showed elements
148
- const query = (_a = viewGroup.query) !== null && _a !== void 0 ? _a : "";
149
- if (hilitedElements.current.has(query)) {
150
- const hiliteIds = (_b = hilitedElements.current.get(query)) !== null && _b !== void 0 ? _b : [];
151
- await zoomToElements(hiliteIds);
152
- }
153
- else {
154
- try {
155
- const ids = await fetchIdsFromQuery(query, iModelConnection);
156
- if (ids.length === 0) {
157
- toaster.warning(`${viewGroup.groupName}'s query is valid but produced no results.`);
158
- }
159
- const hiliteIds = await getHiliteIds(ids, iModelConnection);
160
- await zoomToElements(hiliteIds);
161
- }
162
- catch {
163
- toaster.negative(`Could not hide/show ${viewGroup.groupName}. Query could not be resolved.`);
164
- }
165
- }
166
- }, [groups, hiddenGroupsIds, hideGroups, iModelConnection, hilitedElements]);
143
+ // hide group Ids filter
144
+ const newHiddenGroups = hiddenGroupsIds
145
+ .map((id) => groups.find((g) => g.id === id))
146
+ .filter((g) => !!g && g.id !== viewGroup.id);
147
+ // view group Ids filter
148
+ const viewIds = await getHiliteIdsFromGroups(groups.filter((g) => !newHiddenGroups.find((hg) => hg.id === g.id)));
149
+ let hiddenIds = await getHiliteIdsFromGroups(newHiddenGroups);
150
+ hiddenIds = hiddenIds.filter((id) => !viewIds.includes(id));
151
+ hideElements(hiddenIds);
152
+ await zoomToElements(viewIds);
153
+ }, [groups, hiddenGroupsIds, getHiliteIdsFromGroups]);
167
154
  const addGroup = () => {
168
155
  clearEmphasizedElements();
169
156
  setGroupsView(GroupsView.ADD);
@@ -190,7 +177,7 @@ export const Groupings = ({ mapping, goBack }) => {
190
177
  setGroupsView(GroupsView.GROUPS);
191
178
  setSelectedGroup(undefined);
192
179
  setGroups([]);
193
- const groups = await fetchGroups(setGroups, iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", setIsLoading, apiContext, mappingClient);
180
+ const groups = await fetchGroups(setGroups, iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", setIsLoading, getAccessToken, mappingClient);
194
181
  if (groups) {
195
182
  if (showGroupColor) {
196
183
  await visualizeGroupColors(groups);
@@ -200,7 +187,7 @@ export const Groupings = ({ mapping, goBack }) => {
200
187
  }
201
188
  }
202
189
  }, [
203
- apiContext,
190
+ getAccessToken,
204
191
  mappingClient,
205
192
  iModelId,
206
193
  mapping.id,
@@ -223,7 +210,8 @@ export const Groupings = ({ mapping, goBack }) => {
223
210
  setLoadingQuery(true);
224
211
  clearHiddenElements();
225
212
  setHiddenGroupsIds([]);
226
- await zoomToElements(Array.from(hilitedElements.current.values()).flat());
213
+ const allIds = await getHiliteIdsFromGroups(groups);
214
+ await zoomToElements(allIds);
227
215
  setLoadingQuery(false);
228
216
  };
229
217
  const hideAll = useCallback(async () => {
@@ -298,7 +286,8 @@ export const Groupings = ({ mapping, goBack }) => {
298
286
  } })))), onClickTitle: isLoadingQuery ? undefined : async () => openProperties(g) })))))),
299
287
  React.createElement(DeleteModal, { entityName: (_f = selectedGroup === null || selectedGroup === void 0 ? void 0 : selectedGroup.groupName) !== null && _f !== void 0 ? _f : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
300
288
  var _a, _b;
301
- await mappingClient.deleteGroup(apiContext.accessToken, iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", (_b = selectedGroup === null || selectedGroup === void 0 ? void 0 : selectedGroup.id) !== null && _b !== void 0 ? _b : "");
289
+ const accessToken = await getAccessToken();
290
+ await mappingClient.deleteGroup(accessToken, iModelId, (_a = mapping.id) !== null && _a !== void 0 ? _a : "", (_b = selectedGroup === null || selectedGroup === void 0 ? void 0 : selectedGroup.id) !== null && _b !== void 0 ? _b : "");
302
291
  }, refresh: refresh })));
303
292
  }
304
293
  };