@itwin/grouping-mapping-widget 0.30.0 → 0.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.js +5 -3
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.js +5 -3
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
- package/package.json +1 -1
|
@@ -85,6 +85,8 @@ const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuccess, o
|
|
|
85
85
|
const [showSaveConfirmationModal, setShowSaveConfirmationModal] = (0, react_1.useState)(false);
|
|
86
86
|
const [calculatedPropertyType, setCalculatedPropertyType] = (0, react_1.useState)(groupProperty?.calculatedPropertyType ?? undefined);
|
|
87
87
|
const [isCalculatedBlockExpanded, setIsCalculatedBlockExpanded] = (0, react_1.useState)(!!calculatedPropertyType);
|
|
88
|
+
const [isMappedBlockExpanded, setIsMappedBlockExpanded] = (0, react_1.useState)((groupProperty?.ecProperties?.length ?? 0) > 0);
|
|
89
|
+
const [isFormulaBlockExpanded, setIsFormulaBlockExpanded] = (0, react_1.useState)(!!groupProperty?.formula);
|
|
88
90
|
const [formula, setFormula] = (0, react_1.useState)(groupProperty?.formula ?? undefined);
|
|
89
91
|
const [formulaErrorMessage, setFormulaErrorMessage] = (0, react_1.useState)(undefined);
|
|
90
92
|
const { getAccessToken, iModelId, iModelConnection } = (0, GroupingApiConfigContext_1.useGroupingMappingApiConfig)();
|
|
@@ -221,7 +223,7 @@ const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuccess, o
|
|
|
221
223
|
react_1.default.createElement(itwinui_react_1.LabeledSelect, { label: "Quantity Type", options: exports.quantityTypesSelectionOptions, value: quantityType, onChange: setQuantityType, onShow: () => { }, onHide: () => { }, placeholder: "No Quantity Type" })),
|
|
222
224
|
propertiesNotFoundAlert && (react_1.default.createElement(itwinui_react_1.Alert, { type: "warning" }, "Warning: Could not match saved properties from the current generated list. It does not confirm or deny validity. Overwriting will occur if a new selection is made and saved.")),
|
|
223
225
|
react_1.default.createElement(ScrollableExpandableBlock_1.ScrollableExpandableBlock, { title: "Mapped Properties", endIcon: react_1.default.createElement(itwinui_react_1.Icon, { fill: selectedProperties.length > 0 ? "informational" : "default" },
|
|
224
|
-
react_1.default.createElement(itwinui_icons_react_1.SvgLabel, null)), isExpanded:
|
|
226
|
+
react_1.default.createElement(itwinui_icons_react_1.SvgLabel, null)), isExpanded: isMappedBlockExpanded, setIsExpanded: setIsMappedBlockExpanded },
|
|
225
227
|
react_1.default.createElement("div", { className: "gmw-property-view-container" },
|
|
226
228
|
react_1.default.createElement("div", { className: "gmw-property-view-button" },
|
|
227
229
|
react_1.default.createElement(itwinui_react_1.Button, { onClick: async () => setShowPropertiesSelectionModal(true), disabled: isLoading }, "Select Properties")),
|
|
@@ -229,10 +231,10 @@ const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuccess, o
|
|
|
229
231
|
react_1.default.createElement(itwinui_react_1.Text, null, "No properties selected."),
|
|
230
232
|
react_1.default.createElement(itwinui_react_1.Text, null, "Press the \"Select Properties\" button for options."))) : (selectedProperties.map((property) => (react_1.default.createElement(GroupPropertyListItem_1.GroupPropertyListItem, { key: property.key, content: `${property.displayLabel}`, title: `${property.actualECClassName}`, description: property.categoryLabel }))))))),
|
|
231
233
|
react_1.default.createElement(ScrollableExpandableBlock_1.ScrollableExpandableBlock, { parentRef: actionContainerRef, ref: calculatedPropertyActionRef, title: "Calculated Property", endIcon: react_1.default.createElement(itwinui_react_1.Icon, { fill: calculatedPropertyType ? "informational" : "default" },
|
|
232
|
-
react_1.default.createElement(itwinui_icons_react_1.SvgMeasure, null)), isExpanded:
|
|
234
|
+
react_1.default.createElement(itwinui_icons_react_1.SvgMeasure, null)), isExpanded: isCalculatedBlockExpanded, setIsExpanded: setIsCalculatedBlockExpanded },
|
|
233
235
|
react_1.default.createElement(CalculatedPropertyActionWithVisuals_1.CalculatedPropertyActionWithVisuals, { group: group, calculatedPropertyType: calculatedPropertyType, setCalculatedPropertyType: setCalculatedPropertyType })),
|
|
234
236
|
react_1.default.createElement(ScrollableExpandableBlock_1.ScrollableExpandableBlock, { parentRef: actionContainerRef, ref: customCalculationActionRef, title: "Custom Calculation", endIcon: react_1.default.createElement(itwinui_react_1.Icon, { fill: formula ? "informational" : "default" },
|
|
235
|
-
react_1.default.createElement(itwinui_icons_react_1.SvgFunction, null)), isExpanded:
|
|
237
|
+
react_1.default.createElement(itwinui_icons_react_1.SvgFunction, null)), isExpanded: isFormulaBlockExpanded, setIsExpanded: setIsFormulaBlockExpanded },
|
|
236
238
|
react_1.default.createElement(CustomCalculationAction_1.CustomCalculationAction, { formula: formula, setFormula: setFormula, formulaErrorMessage: formulaErrorMessage, forceValidation: forceValidation, disabled: isLoading }))),
|
|
237
239
|
react_1.default.createElement(ActionPanel_1.default, { onSave: handleSaveClick, onCancel: onClickCancel, onSaveCapture: viewerUtils_1.clearAll, onCancelCapture: viewerUtils_1.clearAll, isLoading: isLoading, isSavingDisabled: !propertyName || dataType === undefined || formulaErrorMessage !== undefined }),
|
|
238
240
|
react_1.default.createElement(GroupsPropertiesSelectionModal_1.GroupsPropertiesSelectionModal, { showModal: showPropertiesSelectionModal, setShowModal: setShowPropertiesSelectionModal, selectedProperties: selectedProperties, setSelectedProperties: setSelectedProperties, propertiesMetaData: propertiesMetaData }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupPropertyAction.js","sourceRoot":"","sources":["../../../../../src/components/Properties/GroupProperties/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 { PropertyValueFormat } from \"@itwin/presentation-common\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport { Alert, Button, Fieldset, Icon, LabeledInput, LabeledSelect, Text } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport ActionPanel from \"../../SharedComponents/ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport { DataType, QuantityType } from \"@itwin/insights-client\";\nimport type { CalculatedPropertyType, GroupMinimal, Property, PropertyModify } from \"@itwin/insights-client\";\nimport \"./GroupPropertyAction.scss\";\nimport type { PropertyMetaData } from \"./GroupPropertyUtils\";\nimport { convertPresentationFields, convertToECProperties, fetchPresentationDescriptor, findProperties } from \"./GroupPropertyUtils\";\nimport { clearAll, manufactureKeys } from \"../../../common/viewerUtils\";\nimport { SaveModal } from \"./SaveModal\";\nimport { GroupsPropertiesSelectionModal } from \"./GroupsPropertiesSelectionModal\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { GroupPropertyListItem } from \"./GroupPropertyListItem\";\nimport { usePropertiesClient } from \"../../context/PropertiesClientContext\";\nimport { SvgFunction, SvgLabel, SvgMeasure } from \"@itwin/itwinui-icons-react\";\nimport { CalculatedPropertyActionWithVisuals } from \"../CalculatedProperties/CalculatedPropertyActionWithVisuals\";\nimport { handleError } from \"../../../common/utils\";\nimport { CustomCalculationAction } from \"../CustomCalculations/CustomCalculationAction\";\nimport { usePropertiesQuery } from \"../hooks/usePropertiesQuery\";\nimport { useFormulaValidation } from \"../hooks/useFormulaValidation\";\nimport { ScrollableExpandableBlock } from \"../ScrollableExpandableBlock\";\n\n/**\n * Props for the {@link GroupPropertyAction} component.\n * @public\n */\nexport interface GroupPropertyActionProps {\n mappingId: string;\n group: GroupMinimal;\n groupProperty?: Property;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const quantityTypesSelectionOptions: SelectOption<QuantityType | undefined>[] = [\n { value: QuantityType.Area, label: \"Area\" },\n { value: QuantityType.Distance, label: \"Distance\" },\n { value: QuantityType.Force, label: \"Force\" },\n { value: QuantityType.Mass, label: \"Mass\" },\n { value: QuantityType.Monetary, label: \"Monetary\" },\n { value: QuantityType.Time, label: \"Time\" },\n { value: QuantityType.Volume, label: \"Volume\" },\n { value: undefined, label: \"No Quantity Type\" },\n];\n\n/**\n * Component to create or update a group.\n * @public\n */\nexport const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuccess, onClickCancel }: GroupPropertyActionProps) => {\n const actionContainerRef = useRef<HTMLDivElement>(null);\n const calculatedPropertyActionRef = useRef<HTMLDivElement>(null);\n const customCalculationActionRef = useRef<HTMLDivElement>(null);\n const propertiesClient = usePropertiesClient();\n const queryClient = useQueryClient();\n\n const [propertyName, setPropertyName] = useState<string>(\"\");\n const [oldPropertyName, setOldPropertyName] = useState<string>(\"\");\n const [dataType, setDataType] = useState<DataType>(groupProperty?.dataType ?? DataType.String);\n const [quantityType, setQuantityType] = useState<QuantityType | undefined>(groupProperty?.quantityType ?? undefined);\n const [selectedProperties, setSelectedProperties] = useState<PropertyMetaData[]>([]);\n const [propertiesMetaData, setPropertiesMetaData] = useState<PropertyMetaData[]>([]);\n const [propertiesNotFoundAlert, setPropertiesNotFoundAlert] = useState<boolean>(false);\n const [validator, showValidationMessage] = useValidator();\n const [showPropertiesSelectionModal, setShowPropertiesSelectionModal] = useState<boolean>(false);\n const [showSaveConfirmationModal, setShowSaveConfirmationModal] = useState<boolean>(false);\n const [calculatedPropertyType, setCalculatedPropertyType] = useState<CalculatedPropertyType | undefined>(groupProperty?.calculatedPropertyType ?? undefined);\n const [isCalculatedBlockExpanded, setIsCalculatedBlockExpanded] = useState<boolean>(!!calculatedPropertyType);\n const [formula, setFormula] = useState<string | undefined>(groupProperty?.formula ?? undefined);\n const [formulaErrorMessage, setFormulaErrorMessage] = useState<string | undefined>(undefined);\n\n const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();\n const { data: groupProperties, isFetching: isLoadingGroupProperties } = usePropertiesQuery(iModelId, mappingId, group.id, getAccessToken, propertiesClient);\n const { forceValidation } = useFormulaValidation(propertyName.toLowerCase(), formula, groupProperties?.properties ?? [], setFormulaErrorMessage, dataType);\n\n const reset = useCallback(() => {\n setPropertyName(\"\");\n setDataType(DataType.String);\n setQuantityType(undefined);\n setSelectedProperties([]);\n setCalculatedPropertyType(undefined);\n setFormula(undefined);\n }, []);\n\n const fetchPropertiesMetadata = useCallback(async () => {\n if (!iModelConnection) return;\n\n const result = await manufactureKeys(group.query, iModelConnection);\n const descriptor = await fetchPresentationDescriptor(iModelConnection, result);\n\n // Only allow primitives and structs\n const propertyFields =\n descriptor?.fields.filter((field) => field.type.valueFormat === PropertyValueFormat.Primitive || field.type.valueFormat === PropertyValueFormat.Struct) ??\n [];\n\n const propertiesMetaData = convertPresentationFields(propertyFields);\n\n let groupPropertyDetails = null;\n if (groupProperty) {\n const accessToken = await getAccessToken();\n groupPropertyDetails = await propertiesClient.getProperty(accessToken, mappingId, group.id, groupProperty.id);\n }\n\n return { propertiesMetaData, groupPropertyDetails };\n }, [getAccessToken, group.id, group.query, groupProperty, iModelConnection, mappingId, propertiesClient]);\n\n const scrollToFormulaErrorMessage = useCallback(() => {\n setTimeout(() => {\n if (actionContainerRef.current && customCalculationActionRef.current) {\n actionContainerRef.current.scrollTo({\n top: customCalculationActionRef.current.offsetTop,\n behavior: \"smooth\",\n });\n }\n }, 500);\n }, [actionContainerRef]);\n\n const {\n data,\n isFetching: isLoadingProperties,\n isSuccess: isLoadingPropertiesSuccessful,\n } = useQuery([\"properties\", iModelId, mappingId, group.id, groupProperty?.id, \"metadata\"], fetchPropertiesMetadata);\n\n useEffect(() => {\n if (isLoadingPropertiesSuccessful && data?.propertiesMetaData) {\n setPropertiesMetaData(data.propertiesMetaData);\n\n if (data.groupPropertyDetails) {\n setPropertyName(data.groupPropertyDetails.propertyName);\n setOldPropertyName(data.groupPropertyDetails.propertyName);\n setDataType(data.groupPropertyDetails.dataType);\n if (data.groupPropertyDetails.quantityType) setQuantityType(data.groupPropertyDetails.quantityType);\n\n if (data.groupPropertyDetails.ecProperties) {\n const properties = findProperties(data.groupPropertyDetails.ecProperties, data.propertiesMetaData);\n if (properties.length === 0) {\n setPropertiesNotFoundAlert(true);\n }\n setSelectedProperties(properties);\n }\n }\n }\n }, [data, isLoadingPropertiesSuccessful]);\n\n useEffect(() => {\n if (calculatedPropertyType) {\n setDataType(DataType.Double);\n }\n\n if (isCalculatedBlockExpanded === false || !calculatedPropertyType) {\n clearAll();\n }\n }, [calculatedPropertyType, isCalculatedBlockExpanded]);\n\n useEffect(() => {\n if (formulaErrorMessage) {\n scrollToFormulaErrorMessage();\n }\n }, [formulaErrorMessage, scrollToFormulaErrorMessage]);\n\n const { mutate: onSave, isLoading: isSaving } = useMutation({\n mutationFn: async () => {\n const accessToken = await getAccessToken();\n const newGroupProperty: PropertyModify = {\n propertyName,\n dataType,\n quantityType,\n ecProperties: selectedProperties.length > 0 ? selectedProperties.map((p) => convertToECProperties(p)).flat() : undefined,\n calculatedPropertyType,\n formula,\n };\n\n return groupProperty\n ? propertiesClient.updateProperty(accessToken, mappingId, group.id, groupProperty.id, newGroupProperty)\n : propertiesClient.createProperty(accessToken, mappingId, group.id, newGroupProperty);\n },\n onSuccess: async () => {\n onSaveSuccess();\n reset();\n await queryClient.invalidateQueries([\"properties\", iModelId, mappingId, group.id]);\n },\n onError(error: any) {\n handleError(error.status);\n },\n });\n\n const handleSaveClick = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n if (oldPropertyName !== propertyName && oldPropertyName !== \"\") {\n setShowSaveConfirmationModal(true);\n } else {\n onSave();\n }\n };\n\n const handleCloseSaveModal = () => {\n setShowSaveConfirmationModal(false);\n };\n\n const isLoading = isLoadingProperties || isSaving || isLoadingGroupProperties;\n\n return (\n <>\n <div className=\"gmw-group-property-action-container\" ref={actionContainerRef}>\n <Fieldset disabled={isLoading} className=\"gmw-property-options\" legend=\"Property Details\">\n <Text variant=\"small\" as=\"small\" className=\"gmw-field-legend\">\n Asterisk * indicates mandatory fields.\n </Text>\n <LabeledInput\n id=\"propertyName\"\n label=\"Property Name\"\n value={propertyName}\n required\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"propertyName\");\n }}\n message={validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS)}\n status={validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS) ? \"negative\" : undefined}\n onBlur={() => {\n validator.showMessageFor(\"propertyName\");\n }}\n />\n <LabeledSelect<DataType>\n label={\"Data Type\"}\n id=\"dataType\"\n options={[\n { value: DataType.Boolean, label: \"Boolean\" },\n { value: DataType.Integer, label: \"Integer\" },\n { value: DataType.Double, label: \"Double\" },\n { value: DataType.String, label: \"String\" },\n ]}\n required\n value={calculatedPropertyType ? DataType.Double : dataType}\n onChange={(value) => {\n validator.showMessageFor(\"dataType\");\n setDataType(value);\n }}\n message={validator.message(\"dataType\", propertyName, \"required\")}\n status={validator.message(\"dataType\", propertyName, \"required\") ? \"negative\" : undefined}\n onBlur={() => {\n validator.showMessageFor(\"dataType\");\n }}\n disabled={calculatedPropertyType ? true : false}\n onShow={() => {}}\n onHide={() => {}}\n />\n <LabeledSelect<QuantityType | undefined>\n label=\"Quantity Type\"\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => {}}\n onHide={() => {}}\n placeholder=\"No Quantity Type\"\n />\n </Fieldset>\n {propertiesNotFoundAlert && (\n <Alert type=\"warning\">\n Warning: Could not match saved properties from the current generated list. It does not confirm or deny validity. Overwriting will occur if a new\n selection is made and saved.\n </Alert>\n )}\n <ScrollableExpandableBlock\n title={\"Mapped Properties\"}\n endIcon={\n <Icon fill={selectedProperties.length > 0 ? \"informational\" : \"default\"}>\n <SvgLabel />\n </Icon>\n }\n isExpanded={selectedProperties.length > 0}\n setIsExpanded={() => {}}\n >\n <div className=\"gmw-property-view-container\">\n <div className=\"gmw-property-view-button\">\n <Button onClick={async () => setShowPropertiesSelectionModal(true)} disabled={isLoading}>\n Select Properties\n </Button>\n </div>\n <div className=\"gmw-properties-list\">\n {selectedProperties.length === 0 && !isLoading ? (\n <div className=\"gmw-empty-selection\">\n <Text>No properties selected.</Text>\n <Text>Press the "Select Properties" button for options.</Text>\n </div>\n ) : (\n selectedProperties.map((property) => (\n <GroupPropertyListItem\n key={property.key}\n content={`${property.displayLabel}`}\n title={`${property.actualECClassName}`}\n description={property.categoryLabel}\n />\n ))\n )}\n </div>\n </div>\n </ScrollableExpandableBlock>\n <ScrollableExpandableBlock\n parentRef={actionContainerRef}\n ref={calculatedPropertyActionRef}\n title={\"Calculated Property\"}\n endIcon={\n <Icon fill={calculatedPropertyType ? \"informational\" : \"default\"}>\n <SvgMeasure />\n </Icon>\n }\n isExpanded={!!calculatedPropertyType}\n setIsExpanded={setIsCalculatedBlockExpanded}\n >\n <CalculatedPropertyActionWithVisuals\n group={group}\n calculatedPropertyType={calculatedPropertyType}\n setCalculatedPropertyType={setCalculatedPropertyType}\n />\n </ScrollableExpandableBlock>\n <ScrollableExpandableBlock\n parentRef={actionContainerRef}\n ref={customCalculationActionRef}\n title={\"Custom Calculation\"}\n endIcon={\n <Icon fill={formula ? \"informational\" : \"default\"}>\n <SvgFunction />\n </Icon>\n }\n isExpanded={formula !== undefined}\n setIsExpanded={() => {}}\n >\n <CustomCalculationAction\n formula={formula}\n setFormula={setFormula}\n formulaErrorMessage={formulaErrorMessage}\n forceValidation={forceValidation}\n disabled={isLoading}\n />\n </ScrollableExpandableBlock>\n </div>\n <ActionPanel\n onSave={handleSaveClick}\n onCancel={onClickCancel}\n onSaveCapture={clearAll}\n onCancelCapture={clearAll}\n isLoading={isLoading}\n isSavingDisabled={!propertyName || dataType === undefined || formulaErrorMessage !== undefined}\n />\n <GroupsPropertiesSelectionModal\n showModal={showPropertiesSelectionModal}\n setShowModal={setShowPropertiesSelectionModal}\n selectedProperties={selectedProperties}\n setSelectedProperties={setSelectedProperties}\n propertiesMetaData={propertiesMetaData}\n />\n <SaveModal onSave={onSave} onClose={handleCloseSaveModal} showSaveModal={showSaveConfirmationModal} />\n </>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"GroupPropertyAction.js","sourceRoot":"","sources":["../../../../../src/components/Properties/GroupProperties/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 { PropertyValueFormat } from \"@itwin/presentation-common\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport { Alert, Button, Fieldset, Icon, LabeledInput, LabeledSelect, Text } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport ActionPanel from \"../../SharedComponents/ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport { DataType, QuantityType } from \"@itwin/insights-client\";\nimport type { CalculatedPropertyType, GroupMinimal, Property, PropertyModify } from \"@itwin/insights-client\";\nimport \"./GroupPropertyAction.scss\";\nimport type { PropertyMetaData } from \"./GroupPropertyUtils\";\nimport { convertPresentationFields, convertToECProperties, fetchPresentationDescriptor, findProperties } from \"./GroupPropertyUtils\";\nimport { clearAll, manufactureKeys } from \"../../../common/viewerUtils\";\nimport { SaveModal } from \"./SaveModal\";\nimport { GroupsPropertiesSelectionModal } from \"./GroupsPropertiesSelectionModal\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { GroupPropertyListItem } from \"./GroupPropertyListItem\";\nimport { usePropertiesClient } from \"../../context/PropertiesClientContext\";\nimport { SvgFunction, SvgLabel, SvgMeasure } from \"@itwin/itwinui-icons-react\";\nimport { CalculatedPropertyActionWithVisuals } from \"../CalculatedProperties/CalculatedPropertyActionWithVisuals\";\nimport { handleError } from \"../../../common/utils\";\nimport { CustomCalculationAction } from \"../CustomCalculations/CustomCalculationAction\";\nimport { usePropertiesQuery } from \"../hooks/usePropertiesQuery\";\nimport { useFormulaValidation } from \"../hooks/useFormulaValidation\";\nimport { ScrollableExpandableBlock } from \"../ScrollableExpandableBlock\";\n\n/**\n * Props for the {@link GroupPropertyAction} component.\n * @public\n */\nexport interface GroupPropertyActionProps {\n mappingId: string;\n group: GroupMinimal;\n groupProperty?: Property;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const quantityTypesSelectionOptions: SelectOption<QuantityType | undefined>[] = [\n { value: QuantityType.Area, label: \"Area\" },\n { value: QuantityType.Distance, label: \"Distance\" },\n { value: QuantityType.Force, label: \"Force\" },\n { value: QuantityType.Mass, label: \"Mass\" },\n { value: QuantityType.Monetary, label: \"Monetary\" },\n { value: QuantityType.Time, label: \"Time\" },\n { value: QuantityType.Volume, label: \"Volume\" },\n { value: undefined, label: \"No Quantity Type\" },\n];\n\n/**\n * Component to create or update a group.\n * @public\n */\nexport const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuccess, onClickCancel }: GroupPropertyActionProps) => {\n const actionContainerRef = useRef<HTMLDivElement>(null);\n const calculatedPropertyActionRef = useRef<HTMLDivElement>(null);\n const customCalculationActionRef = useRef<HTMLDivElement>(null);\n const propertiesClient = usePropertiesClient();\n const queryClient = useQueryClient();\n\n const [propertyName, setPropertyName] = useState<string>(\"\");\n const [oldPropertyName, setOldPropertyName] = useState<string>(\"\");\n const [dataType, setDataType] = useState<DataType>(groupProperty?.dataType ?? DataType.String);\n const [quantityType, setQuantityType] = useState<QuantityType | undefined>(groupProperty?.quantityType ?? undefined);\n const [selectedProperties, setSelectedProperties] = useState<PropertyMetaData[]>([]);\n const [propertiesMetaData, setPropertiesMetaData] = useState<PropertyMetaData[]>([]);\n const [propertiesNotFoundAlert, setPropertiesNotFoundAlert] = useState<boolean>(false);\n const [validator, showValidationMessage] = useValidator();\n const [showPropertiesSelectionModal, setShowPropertiesSelectionModal] = useState<boolean>(false);\n const [showSaveConfirmationModal, setShowSaveConfirmationModal] = useState<boolean>(false);\n const [calculatedPropertyType, setCalculatedPropertyType] = useState<CalculatedPropertyType | undefined>(groupProperty?.calculatedPropertyType ?? undefined);\n const [isCalculatedBlockExpanded, setIsCalculatedBlockExpanded] = useState<boolean>(!!calculatedPropertyType);\n const [isMappedBlockExpanded, setIsMappedBlockExpanded] = useState<boolean>((groupProperty?.ecProperties?.length ?? 0) > 0);\n const [isFormulaBlockExpanded, setIsFormulaBlockExpanded] = useState<boolean>(!!groupProperty?.formula);\n const [formula, setFormula] = useState<string | undefined>(groupProperty?.formula ?? undefined);\n const [formulaErrorMessage, setFormulaErrorMessage] = useState<string | undefined>(undefined);\n\n const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();\n const { data: groupProperties, isFetching: isLoadingGroupProperties } = usePropertiesQuery(iModelId, mappingId, group.id, getAccessToken, propertiesClient);\n const { forceValidation } = useFormulaValidation(propertyName.toLowerCase(), formula, groupProperties?.properties ?? [], setFormulaErrorMessage, dataType);\n\n const reset = useCallback(() => {\n setPropertyName(\"\");\n setDataType(DataType.String);\n setQuantityType(undefined);\n setSelectedProperties([]);\n setCalculatedPropertyType(undefined);\n setFormula(undefined);\n }, []);\n\n const fetchPropertiesMetadata = useCallback(async () => {\n if (!iModelConnection) return;\n\n const result = await manufactureKeys(group.query, iModelConnection);\n const descriptor = await fetchPresentationDescriptor(iModelConnection, result);\n\n // Only allow primitives and structs\n const propertyFields =\n descriptor?.fields.filter((field) => field.type.valueFormat === PropertyValueFormat.Primitive || field.type.valueFormat === PropertyValueFormat.Struct) ??\n [];\n\n const propertiesMetaData = convertPresentationFields(propertyFields);\n\n let groupPropertyDetails = null;\n if (groupProperty) {\n const accessToken = await getAccessToken();\n groupPropertyDetails = await propertiesClient.getProperty(accessToken, mappingId, group.id, groupProperty.id);\n }\n\n return { propertiesMetaData, groupPropertyDetails };\n }, [getAccessToken, group.id, group.query, groupProperty, iModelConnection, mappingId, propertiesClient]);\n\n const scrollToFormulaErrorMessage = useCallback(() => {\n setTimeout(() => {\n if (actionContainerRef.current && customCalculationActionRef.current) {\n actionContainerRef.current.scrollTo({\n top: customCalculationActionRef.current.offsetTop,\n behavior: \"smooth\",\n });\n }\n }, 500);\n }, [actionContainerRef]);\n\n const {\n data,\n isFetching: isLoadingProperties,\n isSuccess: isLoadingPropertiesSuccessful,\n } = useQuery([\"properties\", iModelId, mappingId, group.id, groupProperty?.id, \"metadata\"], fetchPropertiesMetadata);\n\n useEffect(() => {\n if (isLoadingPropertiesSuccessful && data?.propertiesMetaData) {\n setPropertiesMetaData(data.propertiesMetaData);\n\n if (data.groupPropertyDetails) {\n setPropertyName(data.groupPropertyDetails.propertyName);\n setOldPropertyName(data.groupPropertyDetails.propertyName);\n setDataType(data.groupPropertyDetails.dataType);\n if (data.groupPropertyDetails.quantityType) setQuantityType(data.groupPropertyDetails.quantityType);\n\n if (data.groupPropertyDetails.ecProperties) {\n const properties = findProperties(data.groupPropertyDetails.ecProperties, data.propertiesMetaData);\n if (properties.length === 0) {\n setPropertiesNotFoundAlert(true);\n }\n setSelectedProperties(properties);\n }\n }\n }\n }, [data, isLoadingPropertiesSuccessful]);\n\n useEffect(() => {\n if (calculatedPropertyType) {\n setDataType(DataType.Double);\n }\n\n if (isCalculatedBlockExpanded === false || !calculatedPropertyType) {\n clearAll();\n }\n }, [calculatedPropertyType, isCalculatedBlockExpanded]);\n\n useEffect(() => {\n if (formulaErrorMessage) {\n scrollToFormulaErrorMessage();\n }\n }, [formulaErrorMessage, scrollToFormulaErrorMessage]);\n\n const { mutate: onSave, isLoading: isSaving } = useMutation({\n mutationFn: async () => {\n const accessToken = await getAccessToken();\n const newGroupProperty: PropertyModify = {\n propertyName,\n dataType,\n quantityType,\n ecProperties: selectedProperties.length > 0 ? selectedProperties.map((p) => convertToECProperties(p)).flat() : undefined,\n calculatedPropertyType,\n formula,\n };\n\n return groupProperty\n ? propertiesClient.updateProperty(accessToken, mappingId, group.id, groupProperty.id, newGroupProperty)\n : propertiesClient.createProperty(accessToken, mappingId, group.id, newGroupProperty);\n },\n onSuccess: async () => {\n onSaveSuccess();\n reset();\n await queryClient.invalidateQueries([\"properties\", iModelId, mappingId, group.id]);\n },\n onError(error: any) {\n handleError(error.status);\n },\n });\n\n const handleSaveClick = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n if (oldPropertyName !== propertyName && oldPropertyName !== \"\") {\n setShowSaveConfirmationModal(true);\n } else {\n onSave();\n }\n };\n\n const handleCloseSaveModal = () => {\n setShowSaveConfirmationModal(false);\n };\n\n const isLoading = isLoadingProperties || isSaving || isLoadingGroupProperties;\n\n return (\n <>\n <div className=\"gmw-group-property-action-container\" ref={actionContainerRef}>\n <Fieldset disabled={isLoading} className=\"gmw-property-options\" legend=\"Property Details\">\n <Text variant=\"small\" as=\"small\" className=\"gmw-field-legend\">\n Asterisk * indicates mandatory fields.\n </Text>\n <LabeledInput\n id=\"propertyName\"\n label=\"Property Name\"\n value={propertyName}\n required\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"propertyName\");\n }}\n message={validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS)}\n status={validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS) ? \"negative\" : undefined}\n onBlur={() => {\n validator.showMessageFor(\"propertyName\");\n }}\n />\n <LabeledSelect<DataType>\n label={\"Data Type\"}\n id=\"dataType\"\n options={[\n { value: DataType.Boolean, label: \"Boolean\" },\n { value: DataType.Integer, label: \"Integer\" },\n { value: DataType.Double, label: \"Double\" },\n { value: DataType.String, label: \"String\" },\n ]}\n required\n value={calculatedPropertyType ? DataType.Double : dataType}\n onChange={(value) => {\n validator.showMessageFor(\"dataType\");\n setDataType(value);\n }}\n message={validator.message(\"dataType\", propertyName, \"required\")}\n status={validator.message(\"dataType\", propertyName, \"required\") ? \"negative\" : undefined}\n onBlur={() => {\n validator.showMessageFor(\"dataType\");\n }}\n disabled={calculatedPropertyType ? true : false}\n onShow={() => {}}\n onHide={() => {}}\n />\n <LabeledSelect<QuantityType | undefined>\n label=\"Quantity Type\"\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => {}}\n onHide={() => {}}\n placeholder=\"No Quantity Type\"\n />\n </Fieldset>\n {propertiesNotFoundAlert && (\n <Alert type=\"warning\">\n Warning: Could not match saved properties from the current generated list. It does not confirm or deny validity. Overwriting will occur if a new\n selection is made and saved.\n </Alert>\n )}\n <ScrollableExpandableBlock\n title={\"Mapped Properties\"}\n endIcon={\n <Icon fill={selectedProperties.length > 0 ? \"informational\" : \"default\"}>\n <SvgLabel />\n </Icon>\n }\n isExpanded={isMappedBlockExpanded}\n setIsExpanded={setIsMappedBlockExpanded}\n >\n <div className=\"gmw-property-view-container\">\n <div className=\"gmw-property-view-button\">\n <Button onClick={async () => setShowPropertiesSelectionModal(true)} disabled={isLoading}>\n Select Properties\n </Button>\n </div>\n <div className=\"gmw-properties-list\">\n {selectedProperties.length === 0 && !isLoading ? (\n <div className=\"gmw-empty-selection\">\n <Text>No properties selected.</Text>\n <Text>Press the "Select Properties" button for options.</Text>\n </div>\n ) : (\n selectedProperties.map((property) => (\n <GroupPropertyListItem\n key={property.key}\n content={`${property.displayLabel}`}\n title={`${property.actualECClassName}`}\n description={property.categoryLabel}\n />\n ))\n )}\n </div>\n </div>\n </ScrollableExpandableBlock>\n <ScrollableExpandableBlock\n parentRef={actionContainerRef}\n ref={calculatedPropertyActionRef}\n title={\"Calculated Property\"}\n endIcon={\n <Icon fill={calculatedPropertyType ? \"informational\" : \"default\"}>\n <SvgMeasure />\n </Icon>\n }\n isExpanded={isCalculatedBlockExpanded}\n setIsExpanded={setIsCalculatedBlockExpanded}\n >\n <CalculatedPropertyActionWithVisuals\n group={group}\n calculatedPropertyType={calculatedPropertyType}\n setCalculatedPropertyType={setCalculatedPropertyType}\n />\n </ScrollableExpandableBlock>\n <ScrollableExpandableBlock\n parentRef={actionContainerRef}\n ref={customCalculationActionRef}\n title={\"Custom Calculation\"}\n endIcon={\n <Icon fill={formula ? \"informational\" : \"default\"}>\n <SvgFunction />\n </Icon>\n }\n isExpanded={isFormulaBlockExpanded}\n setIsExpanded={setIsFormulaBlockExpanded}\n >\n <CustomCalculationAction\n formula={formula}\n setFormula={setFormula}\n formulaErrorMessage={formulaErrorMessage}\n forceValidation={forceValidation}\n disabled={isLoading}\n />\n </ScrollableExpandableBlock>\n </div>\n <ActionPanel\n onSave={handleSaveClick}\n onCancel={onClickCancel}\n onSaveCapture={clearAll}\n onCancelCapture={clearAll}\n isLoading={isLoading}\n isSavingDisabled={!propertyName || dataType === undefined || formulaErrorMessage !== undefined}\n />\n <GroupsPropertiesSelectionModal\n showModal={showPropertiesSelectionModal}\n setShowModal={setShowPropertiesSelectionModal}\n selectedProperties={selectedProperties}\n setSelectedProperties={setSelectedProperties}\n propertiesMetaData={propertiesMetaData}\n />\n <SaveModal onSave={onSave} onClose={handleCloseSaveModal} showSaveModal={showSaveConfirmationModal} />\n </>\n );\n};\n"]}
|
|
@@ -56,6 +56,8 @@ export const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuc
|
|
|
56
56
|
const [showSaveConfirmationModal, setShowSaveConfirmationModal] = useState(false);
|
|
57
57
|
const [calculatedPropertyType, setCalculatedPropertyType] = useState(groupProperty?.calculatedPropertyType ?? undefined);
|
|
58
58
|
const [isCalculatedBlockExpanded, setIsCalculatedBlockExpanded] = useState(!!calculatedPropertyType);
|
|
59
|
+
const [isMappedBlockExpanded, setIsMappedBlockExpanded] = useState((groupProperty?.ecProperties?.length ?? 0) > 0);
|
|
60
|
+
const [isFormulaBlockExpanded, setIsFormulaBlockExpanded] = useState(!!groupProperty?.formula);
|
|
59
61
|
const [formula, setFormula] = useState(groupProperty?.formula ?? undefined);
|
|
60
62
|
const [formulaErrorMessage, setFormulaErrorMessage] = useState(undefined);
|
|
61
63
|
const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();
|
|
@@ -192,7 +194,7 @@ export const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuc
|
|
|
192
194
|
React.createElement(LabeledSelect, { label: "Quantity Type", options: quantityTypesSelectionOptions, value: quantityType, onChange: setQuantityType, onShow: () => { }, onHide: () => { }, placeholder: "No Quantity Type" })),
|
|
193
195
|
propertiesNotFoundAlert && (React.createElement(Alert, { type: "warning" }, "Warning: Could not match saved properties from the current generated list. It does not confirm or deny validity. Overwriting will occur if a new selection is made and saved.")),
|
|
194
196
|
React.createElement(ScrollableExpandableBlock, { title: "Mapped Properties", endIcon: React.createElement(Icon, { fill: selectedProperties.length > 0 ? "informational" : "default" },
|
|
195
|
-
React.createElement(SvgLabel, null)), isExpanded:
|
|
197
|
+
React.createElement(SvgLabel, null)), isExpanded: isMappedBlockExpanded, setIsExpanded: setIsMappedBlockExpanded },
|
|
196
198
|
React.createElement("div", { className: "gmw-property-view-container" },
|
|
197
199
|
React.createElement("div", { className: "gmw-property-view-button" },
|
|
198
200
|
React.createElement(Button, { onClick: async () => setShowPropertiesSelectionModal(true), disabled: isLoading }, "Select Properties")),
|
|
@@ -200,10 +202,10 @@ export const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuc
|
|
|
200
202
|
React.createElement(Text, null, "No properties selected."),
|
|
201
203
|
React.createElement(Text, null, "Press the \"Select Properties\" button for options."))) : (selectedProperties.map((property) => (React.createElement(GroupPropertyListItem, { key: property.key, content: `${property.displayLabel}`, title: `${property.actualECClassName}`, description: property.categoryLabel }))))))),
|
|
202
204
|
React.createElement(ScrollableExpandableBlock, { parentRef: actionContainerRef, ref: calculatedPropertyActionRef, title: "Calculated Property", endIcon: React.createElement(Icon, { fill: calculatedPropertyType ? "informational" : "default" },
|
|
203
|
-
React.createElement(SvgMeasure, null)), isExpanded:
|
|
205
|
+
React.createElement(SvgMeasure, null)), isExpanded: isCalculatedBlockExpanded, setIsExpanded: setIsCalculatedBlockExpanded },
|
|
204
206
|
React.createElement(CalculatedPropertyActionWithVisuals, { group: group, calculatedPropertyType: calculatedPropertyType, setCalculatedPropertyType: setCalculatedPropertyType })),
|
|
205
207
|
React.createElement(ScrollableExpandableBlock, { parentRef: actionContainerRef, ref: customCalculationActionRef, title: "Custom Calculation", endIcon: React.createElement(Icon, { fill: formula ? "informational" : "default" },
|
|
206
|
-
React.createElement(SvgFunction, null)), isExpanded:
|
|
208
|
+
React.createElement(SvgFunction, null)), isExpanded: isFormulaBlockExpanded, setIsExpanded: setIsFormulaBlockExpanded },
|
|
207
209
|
React.createElement(CustomCalculationAction, { formula: formula, setFormula: setFormula, formulaErrorMessage: formulaErrorMessage, forceValidation: forceValidation, disabled: isLoading }))),
|
|
208
210
|
React.createElement(ActionPanel, { onSave: handleSaveClick, onCancel: onClickCancel, onSaveCapture: clearAll, onCancelCapture: clearAll, isLoading: isLoading, isSavingDisabled: !propertyName || dataType === undefined || formulaErrorMessage !== undefined }),
|
|
209
211
|
React.createElement(GroupsPropertiesSelectionModal, { showModal: showPropertiesSelectionModal, setShowModal: setShowPropertiesSelectionModal, selectedProperties: selectedProperties, setSelectedProperties: setSelectedProperties, propertiesMetaData: propertiesMetaData }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupPropertyAction.js","sourceRoot":"","sources":["../../../../../src/components/Properties/GroupProperties/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 { PropertyValueFormat } from \"@itwin/presentation-common\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport { Alert, Button, Fieldset, Icon, LabeledInput, LabeledSelect, Text } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport ActionPanel from \"../../SharedComponents/ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport { DataType, QuantityType } from \"@itwin/insights-client\";\nimport type { CalculatedPropertyType, GroupMinimal, Property, PropertyModify } from \"@itwin/insights-client\";\nimport \"./GroupPropertyAction.scss\";\nimport type { PropertyMetaData } from \"./GroupPropertyUtils\";\nimport { convertPresentationFields, convertToECProperties, fetchPresentationDescriptor, findProperties } from \"./GroupPropertyUtils\";\nimport { clearAll, manufactureKeys } from \"../../../common/viewerUtils\";\nimport { SaveModal } from \"./SaveModal\";\nimport { GroupsPropertiesSelectionModal } from \"./GroupsPropertiesSelectionModal\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { GroupPropertyListItem } from \"./GroupPropertyListItem\";\nimport { usePropertiesClient } from \"../../context/PropertiesClientContext\";\nimport { SvgFunction, SvgLabel, SvgMeasure } from \"@itwin/itwinui-icons-react\";\nimport { CalculatedPropertyActionWithVisuals } from \"../CalculatedProperties/CalculatedPropertyActionWithVisuals\";\nimport { handleError } from \"../../../common/utils\";\nimport { CustomCalculationAction } from \"../CustomCalculations/CustomCalculationAction\";\nimport { usePropertiesQuery } from \"../hooks/usePropertiesQuery\";\nimport { useFormulaValidation } from \"../hooks/useFormulaValidation\";\nimport { ScrollableExpandableBlock } from \"../ScrollableExpandableBlock\";\n\n/**\n * Props for the {@link GroupPropertyAction} component.\n * @public\n */\nexport interface GroupPropertyActionProps {\n mappingId: string;\n group: GroupMinimal;\n groupProperty?: Property;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const quantityTypesSelectionOptions: SelectOption<QuantityType | undefined>[] = [\n { value: QuantityType.Area, label: \"Area\" },\n { value: QuantityType.Distance, label: \"Distance\" },\n { value: QuantityType.Force, label: \"Force\" },\n { value: QuantityType.Mass, label: \"Mass\" },\n { value: QuantityType.Monetary, label: \"Monetary\" },\n { value: QuantityType.Time, label: \"Time\" },\n { value: QuantityType.Volume, label: \"Volume\" },\n { value: undefined, label: \"No Quantity Type\" },\n];\n\n/**\n * Component to create or update a group.\n * @public\n */\nexport const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuccess, onClickCancel }: GroupPropertyActionProps) => {\n const actionContainerRef = useRef<HTMLDivElement>(null);\n const calculatedPropertyActionRef = useRef<HTMLDivElement>(null);\n const customCalculationActionRef = useRef<HTMLDivElement>(null);\n const propertiesClient = usePropertiesClient();\n const queryClient = useQueryClient();\n\n const [propertyName, setPropertyName] = useState<string>(\"\");\n const [oldPropertyName, setOldPropertyName] = useState<string>(\"\");\n const [dataType, setDataType] = useState<DataType>(groupProperty?.dataType ?? DataType.String);\n const [quantityType, setQuantityType] = useState<QuantityType | undefined>(groupProperty?.quantityType ?? undefined);\n const [selectedProperties, setSelectedProperties] = useState<PropertyMetaData[]>([]);\n const [propertiesMetaData, setPropertiesMetaData] = useState<PropertyMetaData[]>([]);\n const [propertiesNotFoundAlert, setPropertiesNotFoundAlert] = useState<boolean>(false);\n const [validator, showValidationMessage] = useValidator();\n const [showPropertiesSelectionModal, setShowPropertiesSelectionModal] = useState<boolean>(false);\n const [showSaveConfirmationModal, setShowSaveConfirmationModal] = useState<boolean>(false);\n const [calculatedPropertyType, setCalculatedPropertyType] = useState<CalculatedPropertyType | undefined>(groupProperty?.calculatedPropertyType ?? undefined);\n const [isCalculatedBlockExpanded, setIsCalculatedBlockExpanded] = useState<boolean>(!!calculatedPropertyType);\n const [formula, setFormula] = useState<string | undefined>(groupProperty?.formula ?? undefined);\n const [formulaErrorMessage, setFormulaErrorMessage] = useState<string | undefined>(undefined);\n\n const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();\n const { data: groupProperties, isFetching: isLoadingGroupProperties } = usePropertiesQuery(iModelId, mappingId, group.id, getAccessToken, propertiesClient);\n const { forceValidation } = useFormulaValidation(propertyName.toLowerCase(), formula, groupProperties?.properties ?? [], setFormulaErrorMessage, dataType);\n\n const reset = useCallback(() => {\n setPropertyName(\"\");\n setDataType(DataType.String);\n setQuantityType(undefined);\n setSelectedProperties([]);\n setCalculatedPropertyType(undefined);\n setFormula(undefined);\n }, []);\n\n const fetchPropertiesMetadata = useCallback(async () => {\n if (!iModelConnection) return;\n\n const result = await manufactureKeys(group.query, iModelConnection);\n const descriptor = await fetchPresentationDescriptor(iModelConnection, result);\n\n // Only allow primitives and structs\n const propertyFields =\n descriptor?.fields.filter((field) => field.type.valueFormat === PropertyValueFormat.Primitive || field.type.valueFormat === PropertyValueFormat.Struct) ??\n [];\n\n const propertiesMetaData = convertPresentationFields(propertyFields);\n\n let groupPropertyDetails = null;\n if (groupProperty) {\n const accessToken = await getAccessToken();\n groupPropertyDetails = await propertiesClient.getProperty(accessToken, mappingId, group.id, groupProperty.id);\n }\n\n return { propertiesMetaData, groupPropertyDetails };\n }, [getAccessToken, group.id, group.query, groupProperty, iModelConnection, mappingId, propertiesClient]);\n\n const scrollToFormulaErrorMessage = useCallback(() => {\n setTimeout(() => {\n if (actionContainerRef.current && customCalculationActionRef.current) {\n actionContainerRef.current.scrollTo({\n top: customCalculationActionRef.current.offsetTop,\n behavior: \"smooth\",\n });\n }\n }, 500);\n }, [actionContainerRef]);\n\n const {\n data,\n isFetching: isLoadingProperties,\n isSuccess: isLoadingPropertiesSuccessful,\n } = useQuery([\"properties\", iModelId, mappingId, group.id, groupProperty?.id, \"metadata\"], fetchPropertiesMetadata);\n\n useEffect(() => {\n if (isLoadingPropertiesSuccessful && data?.propertiesMetaData) {\n setPropertiesMetaData(data.propertiesMetaData);\n\n if (data.groupPropertyDetails) {\n setPropertyName(data.groupPropertyDetails.propertyName);\n setOldPropertyName(data.groupPropertyDetails.propertyName);\n setDataType(data.groupPropertyDetails.dataType);\n if (data.groupPropertyDetails.quantityType) setQuantityType(data.groupPropertyDetails.quantityType);\n\n if (data.groupPropertyDetails.ecProperties) {\n const properties = findProperties(data.groupPropertyDetails.ecProperties, data.propertiesMetaData);\n if (properties.length === 0) {\n setPropertiesNotFoundAlert(true);\n }\n setSelectedProperties(properties);\n }\n }\n }\n }, [data, isLoadingPropertiesSuccessful]);\n\n useEffect(() => {\n if (calculatedPropertyType) {\n setDataType(DataType.Double);\n }\n\n if (isCalculatedBlockExpanded === false || !calculatedPropertyType) {\n clearAll();\n }\n }, [calculatedPropertyType, isCalculatedBlockExpanded]);\n\n useEffect(() => {\n if (formulaErrorMessage) {\n scrollToFormulaErrorMessage();\n }\n }, [formulaErrorMessage, scrollToFormulaErrorMessage]);\n\n const { mutate: onSave, isLoading: isSaving } = useMutation({\n mutationFn: async () => {\n const accessToken = await getAccessToken();\n const newGroupProperty: PropertyModify = {\n propertyName,\n dataType,\n quantityType,\n ecProperties: selectedProperties.length > 0 ? selectedProperties.map((p) => convertToECProperties(p)).flat() : undefined,\n calculatedPropertyType,\n formula,\n };\n\n return groupProperty\n ? propertiesClient.updateProperty(accessToken, mappingId, group.id, groupProperty.id, newGroupProperty)\n : propertiesClient.createProperty(accessToken, mappingId, group.id, newGroupProperty);\n },\n onSuccess: async () => {\n onSaveSuccess();\n reset();\n await queryClient.invalidateQueries([\"properties\", iModelId, mappingId, group.id]);\n },\n onError(error: any) {\n handleError(error.status);\n },\n });\n\n const handleSaveClick = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n if (oldPropertyName !== propertyName && oldPropertyName !== \"\") {\n setShowSaveConfirmationModal(true);\n } else {\n onSave();\n }\n };\n\n const handleCloseSaveModal = () => {\n setShowSaveConfirmationModal(false);\n };\n\n const isLoading = isLoadingProperties || isSaving || isLoadingGroupProperties;\n\n return (\n <>\n <div className=\"gmw-group-property-action-container\" ref={actionContainerRef}>\n <Fieldset disabled={isLoading} className=\"gmw-property-options\" legend=\"Property Details\">\n <Text variant=\"small\" as=\"small\" className=\"gmw-field-legend\">\n Asterisk * indicates mandatory fields.\n </Text>\n <LabeledInput\n id=\"propertyName\"\n label=\"Property Name\"\n value={propertyName}\n required\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"propertyName\");\n }}\n message={validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS)}\n status={validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS) ? \"negative\" : undefined}\n onBlur={() => {\n validator.showMessageFor(\"propertyName\");\n }}\n />\n <LabeledSelect<DataType>\n label={\"Data Type\"}\n id=\"dataType\"\n options={[\n { value: DataType.Boolean, label: \"Boolean\" },\n { value: DataType.Integer, label: \"Integer\" },\n { value: DataType.Double, label: \"Double\" },\n { value: DataType.String, label: \"String\" },\n ]}\n required\n value={calculatedPropertyType ? DataType.Double : dataType}\n onChange={(value) => {\n validator.showMessageFor(\"dataType\");\n setDataType(value);\n }}\n message={validator.message(\"dataType\", propertyName, \"required\")}\n status={validator.message(\"dataType\", propertyName, \"required\") ? \"negative\" : undefined}\n onBlur={() => {\n validator.showMessageFor(\"dataType\");\n }}\n disabled={calculatedPropertyType ? true : false}\n onShow={() => {}}\n onHide={() => {}}\n />\n <LabeledSelect<QuantityType | undefined>\n label=\"Quantity Type\"\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => {}}\n onHide={() => {}}\n placeholder=\"No Quantity Type\"\n />\n </Fieldset>\n {propertiesNotFoundAlert && (\n <Alert type=\"warning\">\n Warning: Could not match saved properties from the current generated list. It does not confirm or deny validity. Overwriting will occur if a new\n selection is made and saved.\n </Alert>\n )}\n <ScrollableExpandableBlock\n title={\"Mapped Properties\"}\n endIcon={\n <Icon fill={selectedProperties.length > 0 ? \"informational\" : \"default\"}>\n <SvgLabel />\n </Icon>\n }\n isExpanded={selectedProperties.length > 0}\n setIsExpanded={() => {}}\n >\n <div className=\"gmw-property-view-container\">\n <div className=\"gmw-property-view-button\">\n <Button onClick={async () => setShowPropertiesSelectionModal(true)} disabled={isLoading}>\n Select Properties\n </Button>\n </div>\n <div className=\"gmw-properties-list\">\n {selectedProperties.length === 0 && !isLoading ? (\n <div className=\"gmw-empty-selection\">\n <Text>No properties selected.</Text>\n <Text>Press the "Select Properties" button for options.</Text>\n </div>\n ) : (\n selectedProperties.map((property) => (\n <GroupPropertyListItem\n key={property.key}\n content={`${property.displayLabel}`}\n title={`${property.actualECClassName}`}\n description={property.categoryLabel}\n />\n ))\n )}\n </div>\n </div>\n </ScrollableExpandableBlock>\n <ScrollableExpandableBlock\n parentRef={actionContainerRef}\n ref={calculatedPropertyActionRef}\n title={\"Calculated Property\"}\n endIcon={\n <Icon fill={calculatedPropertyType ? \"informational\" : \"default\"}>\n <SvgMeasure />\n </Icon>\n }\n isExpanded={!!calculatedPropertyType}\n setIsExpanded={setIsCalculatedBlockExpanded}\n >\n <CalculatedPropertyActionWithVisuals\n group={group}\n calculatedPropertyType={calculatedPropertyType}\n setCalculatedPropertyType={setCalculatedPropertyType}\n />\n </ScrollableExpandableBlock>\n <ScrollableExpandableBlock\n parentRef={actionContainerRef}\n ref={customCalculationActionRef}\n title={\"Custom Calculation\"}\n endIcon={\n <Icon fill={formula ? \"informational\" : \"default\"}>\n <SvgFunction />\n </Icon>\n }\n isExpanded={formula !== undefined}\n setIsExpanded={() => {}}\n >\n <CustomCalculationAction\n formula={formula}\n setFormula={setFormula}\n formulaErrorMessage={formulaErrorMessage}\n forceValidation={forceValidation}\n disabled={isLoading}\n />\n </ScrollableExpandableBlock>\n </div>\n <ActionPanel\n onSave={handleSaveClick}\n onCancel={onClickCancel}\n onSaveCapture={clearAll}\n onCancelCapture={clearAll}\n isLoading={isLoading}\n isSavingDisabled={!propertyName || dataType === undefined || formulaErrorMessage !== undefined}\n />\n <GroupsPropertiesSelectionModal\n showModal={showPropertiesSelectionModal}\n setShowModal={setShowPropertiesSelectionModal}\n selectedProperties={selectedProperties}\n setSelectedProperties={setSelectedProperties}\n propertiesMetaData={propertiesMetaData}\n />\n <SaveModal onSave={onSave} onClose={handleCloseSaveModal} showSaveModal={showSaveConfirmationModal} />\n </>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"GroupPropertyAction.js","sourceRoot":"","sources":["../../../../../src/components/Properties/GroupProperties/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 { PropertyValueFormat } from \"@itwin/presentation-common\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport { Alert, Button, Fieldset, Icon, LabeledInput, LabeledSelect, Text } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport ActionPanel from \"../../SharedComponents/ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport { DataType, QuantityType } from \"@itwin/insights-client\";\nimport type { CalculatedPropertyType, GroupMinimal, Property, PropertyModify } from \"@itwin/insights-client\";\nimport \"./GroupPropertyAction.scss\";\nimport type { PropertyMetaData } from \"./GroupPropertyUtils\";\nimport { convertPresentationFields, convertToECProperties, fetchPresentationDescriptor, findProperties } from \"./GroupPropertyUtils\";\nimport { clearAll, manufactureKeys } from \"../../../common/viewerUtils\";\nimport { SaveModal } from \"./SaveModal\";\nimport { GroupsPropertiesSelectionModal } from \"./GroupsPropertiesSelectionModal\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { GroupPropertyListItem } from \"./GroupPropertyListItem\";\nimport { usePropertiesClient } from \"../../context/PropertiesClientContext\";\nimport { SvgFunction, SvgLabel, SvgMeasure } from \"@itwin/itwinui-icons-react\";\nimport { CalculatedPropertyActionWithVisuals } from \"../CalculatedProperties/CalculatedPropertyActionWithVisuals\";\nimport { handleError } from \"../../../common/utils\";\nimport { CustomCalculationAction } from \"../CustomCalculations/CustomCalculationAction\";\nimport { usePropertiesQuery } from \"../hooks/usePropertiesQuery\";\nimport { useFormulaValidation } from \"../hooks/useFormulaValidation\";\nimport { ScrollableExpandableBlock } from \"../ScrollableExpandableBlock\";\n\n/**\n * Props for the {@link GroupPropertyAction} component.\n * @public\n */\nexport interface GroupPropertyActionProps {\n mappingId: string;\n group: GroupMinimal;\n groupProperty?: Property;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const quantityTypesSelectionOptions: SelectOption<QuantityType | undefined>[] = [\n { value: QuantityType.Area, label: \"Area\" },\n { value: QuantityType.Distance, label: \"Distance\" },\n { value: QuantityType.Force, label: \"Force\" },\n { value: QuantityType.Mass, label: \"Mass\" },\n { value: QuantityType.Monetary, label: \"Monetary\" },\n { value: QuantityType.Time, label: \"Time\" },\n { value: QuantityType.Volume, label: \"Volume\" },\n { value: undefined, label: \"No Quantity Type\" },\n];\n\n/**\n * Component to create or update a group.\n * @public\n */\nexport const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuccess, onClickCancel }: GroupPropertyActionProps) => {\n const actionContainerRef = useRef<HTMLDivElement>(null);\n const calculatedPropertyActionRef = useRef<HTMLDivElement>(null);\n const customCalculationActionRef = useRef<HTMLDivElement>(null);\n const propertiesClient = usePropertiesClient();\n const queryClient = useQueryClient();\n\n const [propertyName, setPropertyName] = useState<string>(\"\");\n const [oldPropertyName, setOldPropertyName] = useState<string>(\"\");\n const [dataType, setDataType] = useState<DataType>(groupProperty?.dataType ?? DataType.String);\n const [quantityType, setQuantityType] = useState<QuantityType | undefined>(groupProperty?.quantityType ?? undefined);\n const [selectedProperties, setSelectedProperties] = useState<PropertyMetaData[]>([]);\n const [propertiesMetaData, setPropertiesMetaData] = useState<PropertyMetaData[]>([]);\n const [propertiesNotFoundAlert, setPropertiesNotFoundAlert] = useState<boolean>(false);\n const [validator, showValidationMessage] = useValidator();\n const [showPropertiesSelectionModal, setShowPropertiesSelectionModal] = useState<boolean>(false);\n const [showSaveConfirmationModal, setShowSaveConfirmationModal] = useState<boolean>(false);\n const [calculatedPropertyType, setCalculatedPropertyType] = useState<CalculatedPropertyType | undefined>(groupProperty?.calculatedPropertyType ?? undefined);\n const [isCalculatedBlockExpanded, setIsCalculatedBlockExpanded] = useState<boolean>(!!calculatedPropertyType);\n const [isMappedBlockExpanded, setIsMappedBlockExpanded] = useState<boolean>((groupProperty?.ecProperties?.length ?? 0) > 0);\n const [isFormulaBlockExpanded, setIsFormulaBlockExpanded] = useState<boolean>(!!groupProperty?.formula);\n const [formula, setFormula] = useState<string | undefined>(groupProperty?.formula ?? undefined);\n const [formulaErrorMessage, setFormulaErrorMessage] = useState<string | undefined>(undefined);\n\n const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();\n const { data: groupProperties, isFetching: isLoadingGroupProperties } = usePropertiesQuery(iModelId, mappingId, group.id, getAccessToken, propertiesClient);\n const { forceValidation } = useFormulaValidation(propertyName.toLowerCase(), formula, groupProperties?.properties ?? [], setFormulaErrorMessage, dataType);\n\n const reset = useCallback(() => {\n setPropertyName(\"\");\n setDataType(DataType.String);\n setQuantityType(undefined);\n setSelectedProperties([]);\n setCalculatedPropertyType(undefined);\n setFormula(undefined);\n }, []);\n\n const fetchPropertiesMetadata = useCallback(async () => {\n if (!iModelConnection) return;\n\n const result = await manufactureKeys(group.query, iModelConnection);\n const descriptor = await fetchPresentationDescriptor(iModelConnection, result);\n\n // Only allow primitives and structs\n const propertyFields =\n descriptor?.fields.filter((field) => field.type.valueFormat === PropertyValueFormat.Primitive || field.type.valueFormat === PropertyValueFormat.Struct) ??\n [];\n\n const propertiesMetaData = convertPresentationFields(propertyFields);\n\n let groupPropertyDetails = null;\n if (groupProperty) {\n const accessToken = await getAccessToken();\n groupPropertyDetails = await propertiesClient.getProperty(accessToken, mappingId, group.id, groupProperty.id);\n }\n\n return { propertiesMetaData, groupPropertyDetails };\n }, [getAccessToken, group.id, group.query, groupProperty, iModelConnection, mappingId, propertiesClient]);\n\n const scrollToFormulaErrorMessage = useCallback(() => {\n setTimeout(() => {\n if (actionContainerRef.current && customCalculationActionRef.current) {\n actionContainerRef.current.scrollTo({\n top: customCalculationActionRef.current.offsetTop,\n behavior: \"smooth\",\n });\n }\n }, 500);\n }, [actionContainerRef]);\n\n const {\n data,\n isFetching: isLoadingProperties,\n isSuccess: isLoadingPropertiesSuccessful,\n } = useQuery([\"properties\", iModelId, mappingId, group.id, groupProperty?.id, \"metadata\"], fetchPropertiesMetadata);\n\n useEffect(() => {\n if (isLoadingPropertiesSuccessful && data?.propertiesMetaData) {\n setPropertiesMetaData(data.propertiesMetaData);\n\n if (data.groupPropertyDetails) {\n setPropertyName(data.groupPropertyDetails.propertyName);\n setOldPropertyName(data.groupPropertyDetails.propertyName);\n setDataType(data.groupPropertyDetails.dataType);\n if (data.groupPropertyDetails.quantityType) setQuantityType(data.groupPropertyDetails.quantityType);\n\n if (data.groupPropertyDetails.ecProperties) {\n const properties = findProperties(data.groupPropertyDetails.ecProperties, data.propertiesMetaData);\n if (properties.length === 0) {\n setPropertiesNotFoundAlert(true);\n }\n setSelectedProperties(properties);\n }\n }\n }\n }, [data, isLoadingPropertiesSuccessful]);\n\n useEffect(() => {\n if (calculatedPropertyType) {\n setDataType(DataType.Double);\n }\n\n if (isCalculatedBlockExpanded === false || !calculatedPropertyType) {\n clearAll();\n }\n }, [calculatedPropertyType, isCalculatedBlockExpanded]);\n\n useEffect(() => {\n if (formulaErrorMessage) {\n scrollToFormulaErrorMessage();\n }\n }, [formulaErrorMessage, scrollToFormulaErrorMessage]);\n\n const { mutate: onSave, isLoading: isSaving } = useMutation({\n mutationFn: async () => {\n const accessToken = await getAccessToken();\n const newGroupProperty: PropertyModify = {\n propertyName,\n dataType,\n quantityType,\n ecProperties: selectedProperties.length > 0 ? selectedProperties.map((p) => convertToECProperties(p)).flat() : undefined,\n calculatedPropertyType,\n formula,\n };\n\n return groupProperty\n ? propertiesClient.updateProperty(accessToken, mappingId, group.id, groupProperty.id, newGroupProperty)\n : propertiesClient.createProperty(accessToken, mappingId, group.id, newGroupProperty);\n },\n onSuccess: async () => {\n onSaveSuccess();\n reset();\n await queryClient.invalidateQueries([\"properties\", iModelId, mappingId, group.id]);\n },\n onError(error: any) {\n handleError(error.status);\n },\n });\n\n const handleSaveClick = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n if (oldPropertyName !== propertyName && oldPropertyName !== \"\") {\n setShowSaveConfirmationModal(true);\n } else {\n onSave();\n }\n };\n\n const handleCloseSaveModal = () => {\n setShowSaveConfirmationModal(false);\n };\n\n const isLoading = isLoadingProperties || isSaving || isLoadingGroupProperties;\n\n return (\n <>\n <div className=\"gmw-group-property-action-container\" ref={actionContainerRef}>\n <Fieldset disabled={isLoading} className=\"gmw-property-options\" legend=\"Property Details\">\n <Text variant=\"small\" as=\"small\" className=\"gmw-field-legend\">\n Asterisk * indicates mandatory fields.\n </Text>\n <LabeledInput\n id=\"propertyName\"\n label=\"Property Name\"\n value={propertyName}\n required\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"propertyName\");\n }}\n message={validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS)}\n status={validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS) ? \"negative\" : undefined}\n onBlur={() => {\n validator.showMessageFor(\"propertyName\");\n }}\n />\n <LabeledSelect<DataType>\n label={\"Data Type\"}\n id=\"dataType\"\n options={[\n { value: DataType.Boolean, label: \"Boolean\" },\n { value: DataType.Integer, label: \"Integer\" },\n { value: DataType.Double, label: \"Double\" },\n { value: DataType.String, label: \"String\" },\n ]}\n required\n value={calculatedPropertyType ? DataType.Double : dataType}\n onChange={(value) => {\n validator.showMessageFor(\"dataType\");\n setDataType(value);\n }}\n message={validator.message(\"dataType\", propertyName, \"required\")}\n status={validator.message(\"dataType\", propertyName, \"required\") ? \"negative\" : undefined}\n onBlur={() => {\n validator.showMessageFor(\"dataType\");\n }}\n disabled={calculatedPropertyType ? true : false}\n onShow={() => {}}\n onHide={() => {}}\n />\n <LabeledSelect<QuantityType | undefined>\n label=\"Quantity Type\"\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => {}}\n onHide={() => {}}\n placeholder=\"No Quantity Type\"\n />\n </Fieldset>\n {propertiesNotFoundAlert && (\n <Alert type=\"warning\">\n Warning: Could not match saved properties from the current generated list. It does not confirm or deny validity. Overwriting will occur if a new\n selection is made and saved.\n </Alert>\n )}\n <ScrollableExpandableBlock\n title={\"Mapped Properties\"}\n endIcon={\n <Icon fill={selectedProperties.length > 0 ? \"informational\" : \"default\"}>\n <SvgLabel />\n </Icon>\n }\n isExpanded={isMappedBlockExpanded}\n setIsExpanded={setIsMappedBlockExpanded}\n >\n <div className=\"gmw-property-view-container\">\n <div className=\"gmw-property-view-button\">\n <Button onClick={async () => setShowPropertiesSelectionModal(true)} disabled={isLoading}>\n Select Properties\n </Button>\n </div>\n <div className=\"gmw-properties-list\">\n {selectedProperties.length === 0 && !isLoading ? (\n <div className=\"gmw-empty-selection\">\n <Text>No properties selected.</Text>\n <Text>Press the "Select Properties" button for options.</Text>\n </div>\n ) : (\n selectedProperties.map((property) => (\n <GroupPropertyListItem\n key={property.key}\n content={`${property.displayLabel}`}\n title={`${property.actualECClassName}`}\n description={property.categoryLabel}\n />\n ))\n )}\n </div>\n </div>\n </ScrollableExpandableBlock>\n <ScrollableExpandableBlock\n parentRef={actionContainerRef}\n ref={calculatedPropertyActionRef}\n title={\"Calculated Property\"}\n endIcon={\n <Icon fill={calculatedPropertyType ? \"informational\" : \"default\"}>\n <SvgMeasure />\n </Icon>\n }\n isExpanded={isCalculatedBlockExpanded}\n setIsExpanded={setIsCalculatedBlockExpanded}\n >\n <CalculatedPropertyActionWithVisuals\n group={group}\n calculatedPropertyType={calculatedPropertyType}\n setCalculatedPropertyType={setCalculatedPropertyType}\n />\n </ScrollableExpandableBlock>\n <ScrollableExpandableBlock\n parentRef={actionContainerRef}\n ref={customCalculationActionRef}\n title={\"Custom Calculation\"}\n endIcon={\n <Icon fill={formula ? \"informational\" : \"default\"}>\n <SvgFunction />\n </Icon>\n }\n isExpanded={isFormulaBlockExpanded}\n setIsExpanded={setIsFormulaBlockExpanded}\n >\n <CustomCalculationAction\n formula={formula}\n setFormula={setFormula}\n formulaErrorMessage={formulaErrorMessage}\n forceValidation={forceValidation}\n disabled={isLoading}\n />\n </ScrollableExpandableBlock>\n </div>\n <ActionPanel\n onSave={handleSaveClick}\n onCancel={onClickCancel}\n onSaveCapture={clearAll}\n onCancelCapture={clearAll}\n isLoading={isLoading}\n isSavingDisabled={!propertyName || dataType === undefined || formulaErrorMessage !== undefined}\n />\n <GroupsPropertiesSelectionModal\n showModal={showPropertiesSelectionModal}\n setShowModal={setShowPropertiesSelectionModal}\n selectedProperties={selectedProperties}\n setSelectedProperties={setSelectedProperties}\n propertiesMetaData={propertiesMetaData}\n />\n <SaveModal onSave={onSave} onClose={handleCloseSaveModal} showSaveModal={showSaveConfirmationModal} />\n </>\n );\n};\n"]}
|