@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.
- package/lib/cjs/formula/FormulaDataTypeResolver.d.ts +12 -0
- package/lib/cjs/formula/FormulaDataTypeResolver.js +50 -0
- package/lib/cjs/formula/FormulaDataTypeResolver.js.map +1 -0
- package/lib/cjs/formula/FormulaFunctionProvider.js +59 -59
- package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -1
- package/lib/cjs/formula/FormulaOperatorsProvider.js +7 -7
- package/lib/cjs/formula/FormulaOperatorsProvider.js.map +1 -1
- package/lib/cjs/formula/FormulaTokensDataTypeResolver.d.ts +6 -0
- package/lib/cjs/formula/{FormulaTokensValidator.js → FormulaTokensDataTypeResolver.js} +32 -32
- package/lib/cjs/formula/FormulaTokensDataTypeResolver.js.map +1 -0
- package/lib/cjs/formula/Types.d.ts +2 -2
- package/lib/cjs/formula/Types.js.map +1 -1
- package/lib/cjs/grouping-mapping-widget.d.ts +6 -1
- package/lib/cjs/grouping-mapping-widget.js +6 -3
- package/lib/cjs/grouping-mapping-widget.js.map +1 -1
- package/lib/cjs/widget/GroupingMappingWidget.d.ts +3 -6
- package/lib/cjs/widget/GroupingMappingWidget.js +3 -5
- package/lib/cjs/widget/GroupingMappingWidget.js.map +1 -1
- package/lib/cjs/widget/components/CalculatedPropertyAction.js +7 -5
- package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
- package/lib/cjs/widget/components/CalculatedPropertyTable.js +6 -4
- package/lib/cjs/widget/components/CalculatedPropertyTable.js.map +1 -1
- package/lib/cjs/widget/components/ConfirmMappingsImport.js +6 -4
- package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
- package/lib/cjs/widget/components/CustomCalculationAction.js +7 -5
- package/lib/cjs/widget/components/CustomCalculationAction.js.map +1 -1
- package/lib/cjs/widget/components/CustomCalculationTable.js +6 -4
- package/lib/cjs/widget/components/CustomCalculationTable.js.map +1 -1
- package/lib/cjs/widget/components/GroupAction.js +26 -21
- package/lib/cjs/widget/components/GroupAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupPropertyAction.js +19 -8
- package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupPropertyTable.js +6 -4
- package/lib/cjs/widget/components/GroupPropertyTable.js.map +1 -1
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.js +8 -6
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.js.map +1 -1
- package/lib/cjs/widget/components/Grouping.js +54 -65
- package/lib/cjs/widget/components/Grouping.js.map +1 -1
- package/lib/cjs/widget/components/GroupingMapping.d.ts +8 -13
- package/lib/cjs/widget/components/GroupingMapping.js +16 -36
- package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
- package/lib/cjs/widget/components/Mapping.js +18 -14
- package/lib/cjs/widget/components/Mapping.js.map +1 -1
- package/lib/cjs/widget/components/MappingAction.js +7 -5
- package/lib/cjs/widget/components/MappingAction.js.map +1 -1
- package/lib/cjs/widget/components/PropertyMenu.js +16 -15
- package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
- package/lib/cjs/widget/components/QueryBuilder.d.ts +2 -3
- package/lib/cjs/widget/components/QueryBuilder.js +6 -13
- package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
- package/lib/cjs/widget/components/SelectIModel.js +13 -4
- package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
- package/lib/cjs/widget/components/SelectMappings.js +9 -7
- package/lib/cjs/widget/components/SelectMappings.js.map +1 -1
- package/lib/cjs/widget/components/SelectProject.js +13 -4
- package/lib/cjs/widget/components/SelectProject.js.map +1 -1
- package/lib/cjs/widget/components/{GroupQueryBuilderContext.d.ts → context/GroupQueryBuilderContext.d.ts} +1 -1
- package/lib/cjs/widget/components/{GroupQueryBuilderContext.js → context/GroupQueryBuilderContext.js} +1 -1
- package/lib/cjs/widget/components/context/GroupQueryBuilderContext.js.map +1 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.d.ts +11 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.js +37 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.js.map +1 -0
- package/lib/cjs/widget/components/context/MappingClientContext.d.ts +8 -0
- package/lib/cjs/widget/components/context/MappingClientContext.js +37 -0
- package/lib/cjs/widget/components/context/MappingClientContext.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/PropertyGrid.d.ts +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGrid.js +5 -5
- package/lib/cjs/widget/components/property-grid/PropertyGrid.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +2 -2
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyView.js +9 -6
- package/lib/cjs/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/cjs/widget/components/viewerUtils.js.map +1 -1
- package/lib/cjs/widget/hooks/useFormulaValidation.js +3 -2
- package/lib/cjs/widget/hooks/useFormulaValidation.js.map +1 -1
- package/lib/esm/formula/FormulaDataTypeResolver.d.ts +12 -0
- package/lib/esm/formula/FormulaDataTypeResolver.js +46 -0
- package/lib/esm/formula/FormulaDataTypeResolver.js.map +1 -0
- package/lib/esm/formula/FormulaFunctionProvider.js +59 -59
- package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -1
- package/lib/esm/formula/FormulaOperatorsProvider.js +7 -7
- package/lib/esm/formula/FormulaOperatorsProvider.js.map +1 -1
- package/lib/esm/formula/FormulaTokensDataTypeResolver.d.ts +6 -0
- package/lib/esm/formula/{FormulaTokensValidator.js → FormulaTokensDataTypeResolver.js} +30 -30
- package/lib/esm/formula/FormulaTokensDataTypeResolver.js.map +1 -0
- package/lib/esm/formula/Types.d.ts +2 -2
- package/lib/esm/formula/Types.js.map +1 -1
- package/lib/esm/grouping-mapping-widget.d.ts +6 -1
- package/lib/esm/grouping-mapping-widget.js +3 -1
- package/lib/esm/grouping-mapping-widget.js.map +1 -1
- package/lib/esm/widget/GroupingMappingWidget.d.ts +3 -6
- package/lib/esm/widget/GroupingMappingWidget.js +3 -5
- package/lib/esm/widget/GroupingMappingWidget.js.map +1 -1
- package/lib/esm/widget/components/CalculatedPropertyAction.js +8 -6
- package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
- package/lib/esm/widget/components/CalculatedPropertyTable.js +7 -5
- package/lib/esm/widget/components/CalculatedPropertyTable.js.map +1 -1
- package/lib/esm/widget/components/ConfirmMappingsImport.js +7 -5
- package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
- package/lib/esm/widget/components/CustomCalculationAction.js +8 -6
- package/lib/esm/widget/components/CustomCalculationAction.js.map +1 -1
- package/lib/esm/widget/components/CustomCalculationTable.js +7 -5
- package/lib/esm/widget/components/CustomCalculationTable.js.map +1 -1
- package/lib/esm/widget/components/GroupAction.js +27 -22
- package/lib/esm/widget/components/GroupAction.js.map +1 -1
- package/lib/esm/widget/components/GroupPropertyAction.js +20 -9
- package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
- package/lib/esm/widget/components/GroupPropertyTable.js +7 -5
- package/lib/esm/widget/components/GroupPropertyTable.js.map +1 -1
- package/lib/esm/widget/components/GroupQueryBuilderContainer.js +8 -6
- package/lib/esm/widget/components/GroupQueryBuilderContainer.js.map +1 -1
- package/lib/esm/widget/components/Grouping.js +56 -67
- package/lib/esm/widget/components/Grouping.js.map +1 -1
- package/lib/esm/widget/components/GroupingMapping.d.ts +8 -13
- package/lib/esm/widget/components/GroupingMapping.js +16 -34
- package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
- package/lib/esm/widget/components/Mapping.js +19 -15
- package/lib/esm/widget/components/Mapping.js.map +1 -1
- package/lib/esm/widget/components/MappingAction.js +8 -6
- package/lib/esm/widget/components/MappingAction.js.map +1 -1
- package/lib/esm/widget/components/PropertyMenu.js +17 -16
- package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
- package/lib/esm/widget/components/QueryBuilder.d.ts +2 -3
- package/lib/esm/widget/components/QueryBuilder.js +6 -13
- package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
- package/lib/esm/widget/components/SelectIModel.js +14 -5
- package/lib/esm/widget/components/SelectIModel.js.map +1 -1
- package/lib/esm/widget/components/SelectMappings.js +10 -8
- package/lib/esm/widget/components/SelectMappings.js.map +1 -1
- package/lib/esm/widget/components/SelectProject.js +14 -5
- package/lib/esm/widget/components/SelectProject.js.map +1 -1
- package/lib/esm/widget/components/{GroupQueryBuilderContext.d.ts → context/GroupQueryBuilderContext.d.ts} +1 -1
- package/lib/esm/widget/components/{GroupQueryBuilderContext.js → context/GroupQueryBuilderContext.js} +1 -1
- package/lib/esm/widget/components/context/GroupQueryBuilderContext.js.map +1 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.d.ts +11 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.js +14 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.js.map +1 -0
- package/lib/esm/widget/components/context/MappingClientContext.d.ts +8 -0
- package/lib/esm/widget/components/context/MappingClientContext.js +31 -0
- package/lib/esm/widget/components/context/MappingClientContext.js.map +1 -0
- package/lib/esm/widget/components/property-grid/PropertyGrid.d.ts +1 -1
- package/lib/esm/widget/components/property-grid/PropertyGrid.js +6 -6
- package/lib/esm/widget/components/property-grid/PropertyGrid.js.map +1 -1
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +2 -2
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
- package/lib/esm/widget/components/property-grid/PropertyView.js +9 -6
- package/lib/esm/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/esm/widget/components/viewerUtils.js.map +1 -1
- package/lib/esm/widget/hooks/useFormulaValidation.js +3 -2
- package/lib/esm/widget/hooks/useFormulaValidation.js.map +1 -1
- package/package.json +1 -1
- package/lib/cjs/formula/FormulaTokensValidator.d.ts +0 -5
- package/lib/cjs/formula/FormulaTokensValidator.js.map +0 -1
- package/lib/cjs/formula/FormulaValidator.d.ts +0 -3
- package/lib/cjs/formula/FormulaValidator.js +0 -35
- package/lib/cjs/formula/FormulaValidator.js.map +0 -1
- package/lib/cjs/widget/components/GroupQueryBuilderContext.js.map +0 -1
- package/lib/esm/formula/FormulaTokensValidator.d.ts +0 -5
- package/lib/esm/formula/FormulaTokensValidator.js.map +0 -1
- package/lib/esm/formula/FormulaValidator.d.ts +0 -3
- package/lib/esm/formula/FormulaValidator.js +0 -31
- package/lib/esm/formula/FormulaValidator.js.map +0 -1
- 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,
|
|
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 {
|
|
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
|
|
149
|
-
const mappingClient =
|
|
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
|
-
|
|
215
|
-
|
|
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
|
-
}, [
|
|
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(
|
|
267
|
-
: await mappingClient.createGroupProperty(
|
|
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, {
|
|
7
|
+
import React, { useMemo, useState } from "react";
|
|
8
8
|
import DeleteModal from "./DeleteModal";
|
|
9
9
|
import { PropertyMenuView } from "./PropertyMenu";
|
|
10
|
-
import {
|
|
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
|
|
14
|
-
const mappingClient =
|
|
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
|
-
|
|
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":"AAAA;;;+FAG+F;AAC/F,OAAO,EACL,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,GACR,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,MAAM,EACN,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,KAAK,GACN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,EAAE,
|
|
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 =
|
|
33
|
+
const _onClickResetButton = () => {
|
|
34
34
|
context.setQuery("");
|
|
35
35
|
context.queryBuilder.query = undefined;
|
|
36
36
|
context.setCurrentPropertyList([]);
|
|
37
|
-
|
|
37
|
+
context.resetView().catch((e) =>
|
|
38
|
+
/* eslint-disable no-console */
|
|
39
|
+
console.error(e));
|
|
38
40
|
};
|
|
39
|
-
return (React.createElement("div", { className:
|
|
41
|
+
return (React.createElement("div", { className: "find-similar-container" },
|
|
40
42
|
React.createElement(PropertyGridWrapperApp, { keys: keysState, imodel: iModelConnection }),
|
|
41
|
-
selected && (React.createElement("div", { className:
|
|
42
|
-
React.createElement(Button, { styleType:
|
|
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,
|
|
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,
|
|
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,
|
|
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 {
|
|
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,
|
|
27
|
+
const fetchGroups = async (setGroups, iModelId, mappingId, setIsLoading, getAccessToken, mappingClient) => {
|
|
27
28
|
try {
|
|
28
29
|
setIsLoading(true);
|
|
29
|
-
const
|
|
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
|
|
45
|
-
const mappingClient =
|
|
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,
|
|
59
|
-
}, [
|
|
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
|
|
64
|
-
var _a, _b
|
|
65
|
-
setLoadingQuery(true);
|
|
66
|
-
clearEmphasizedOverriddenElements();
|
|
65
|
+
const getHiliteIdsFromGroups = useCallback(async (groups) => {
|
|
66
|
+
var _a, _b;
|
|
67
67
|
let allIds = [];
|
|
68
|
-
for (const group of
|
|
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
|
-
|
|
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
|
|
88
|
-
|
|
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
|
|
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
|
-
}, [
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
};
|