@itwin/grouping-mapping-widget 0.5.4 → 0.5.7
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/widget/components/ActionPanel.js +2 -2
- package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
- package/lib/cjs/widget/components/ActionPanel.scss +1 -1
- package/lib/cjs/widget/components/BlockingOverlay.js +2 -2
- package/lib/cjs/widget/components/BlockingOverlay.js.map +1 -1
- package/lib/cjs/widget/components/BlockingOverlay.scss +3 -3
- package/lib/cjs/widget/components/CalculatedPropertyAction.js +5 -5
- package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
- package/lib/cjs/widget/components/CalculatedPropertyAction.scss +4 -4
- package/lib/cjs/widget/components/ConfirmMappingsImport.js +12 -12
- package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
- package/lib/cjs/widget/components/ConfirmMappingsImport.scss +10 -10
- package/lib/cjs/widget/components/CustomCalculationAction.js +3 -3
- package/lib/cjs/widget/components/CustomCalculationAction.js.map +1 -1
- package/lib/cjs/widget/components/CustomCalculationAction.scss +2 -2
- package/lib/cjs/widget/components/DeleteModal.js +2 -2
- package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
- package/lib/cjs/widget/components/DeleteModal.scss +2 -2
- package/lib/cjs/widget/components/GroupAction.js +9 -10
- package/lib/cjs/widget/components/GroupAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupAction.scss +6 -6
- package/lib/cjs/widget/components/GroupPropertyAction.js +6 -6
- package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupPropertyAction.scss +6 -10
- package/lib/cjs/widget/components/GroupQueryBuilder.scss +4 -4
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.js +3 -3
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.js.map +1 -1
- package/lib/cjs/widget/components/Grouping.js +23 -28
- package/lib/cjs/widget/components/Grouping.js.map +1 -1
- package/lib/cjs/widget/components/Grouping.scss +8 -7
- package/lib/cjs/widget/components/GroupingMapping.js +1 -1
- package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
- package/lib/cjs/widget/components/GroupingMapping.scss +3 -6
- package/lib/cjs/widget/components/HorizontalTile.d.ts +13 -0
- package/lib/cjs/widget/components/HorizontalTile.js +18 -0
- package/lib/cjs/widget/components/HorizontalTile.js.map +1 -0
- package/lib/{esm/widget/components/GroupTile.scss → cjs/widget/components/HorizontalTile.scss} +4 -4
- package/lib/cjs/widget/components/Mapping.js +38 -58
- package/lib/cjs/widget/components/Mapping.js.map +1 -1
- package/lib/cjs/widget/components/Mapping.scss +22 -8
- package/lib/cjs/widget/components/MappingAction.js +3 -3
- package/lib/cjs/widget/components/MappingAction.js.map +1 -1
- package/lib/cjs/widget/components/MappingAction.scss +2 -2
- package/lib/cjs/widget/components/MappingImportWizardModal.js +2 -2
- package/lib/cjs/widget/components/MappingImportWizardModal.js.map +1 -1
- package/lib/cjs/widget/components/MappingImportWizardModal.scss +3 -3
- package/lib/cjs/widget/components/PropertyMenu.js +13 -12
- package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
- package/lib/cjs/widget/components/PropertyMenu.scss +7 -7
- package/lib/cjs/widget/components/SelectIModel.js +3 -3
- package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
- package/lib/cjs/widget/components/SelectIModel.scss +2 -6
- package/lib/cjs/widget/components/SelectMapping.scss +2 -2
- package/lib/cjs/widget/components/SelectMappings.js +3 -3
- package/lib/cjs/widget/components/SelectMappings.js.map +1 -1
- package/lib/cjs/widget/components/SelectProject.js +28 -20
- package/lib/cjs/widget/components/SelectProject.js.map +1 -1
- package/lib/cjs/widget/components/SelectProject.scss +5 -5
- package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.d.ts +0 -1
- package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.js +0 -1
- package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGrid.js +6 -6
- package/lib/cjs/widget/components/property-grid/PropertyGrid.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGrid.scss +12 -12
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyList.js +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyList.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyView.js +5 -5
- package/lib/cjs/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyView.scss +13 -62
- package/lib/cjs/widget/components/utils.js +6 -6
- package/lib/cjs/widget/components/utils.js.map +1 -1
- package/lib/cjs/widget/components/utils.scss +6 -6
- package/lib/cjs/widget/components/viewerUtils.d.ts +7 -7
- package/lib/cjs/widget/components/viewerUtils.js +32 -51
- package/lib/cjs/widget/components/viewerUtils.js.map +1 -1
- package/lib/esm/widget/components/ActionPanel.js +2 -2
- package/lib/esm/widget/components/ActionPanel.js.map +1 -1
- package/lib/esm/widget/components/ActionPanel.scss +1 -1
- package/lib/esm/widget/components/BlockingOverlay.js +2 -2
- package/lib/esm/widget/components/BlockingOverlay.js.map +1 -1
- package/lib/esm/widget/components/BlockingOverlay.scss +3 -3
- package/lib/esm/widget/components/CalculatedPropertyAction.js +5 -5
- package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
- package/lib/esm/widget/components/CalculatedPropertyAction.scss +4 -4
- package/lib/esm/widget/components/ConfirmMappingsImport.js +12 -12
- package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
- package/lib/esm/widget/components/ConfirmMappingsImport.scss +10 -10
- package/lib/esm/widget/components/CustomCalculationAction.js +3 -3
- package/lib/esm/widget/components/CustomCalculationAction.js.map +1 -1
- package/lib/esm/widget/components/CustomCalculationAction.scss +2 -2
- package/lib/esm/widget/components/DeleteModal.js +2 -2
- package/lib/esm/widget/components/DeleteModal.js.map +1 -1
- package/lib/esm/widget/components/DeleteModal.scss +2 -2
- package/lib/esm/widget/components/GroupAction.js +11 -12
- package/lib/esm/widget/components/GroupAction.js.map +1 -1
- package/lib/esm/widget/components/GroupAction.scss +6 -6
- package/lib/esm/widget/components/GroupPropertyAction.js +6 -6
- package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
- package/lib/esm/widget/components/GroupPropertyAction.scss +6 -10
- package/lib/esm/widget/components/GroupQueryBuilder.scss +4 -4
- package/lib/esm/widget/components/GroupQueryBuilderContainer.js +3 -3
- package/lib/esm/widget/components/GroupQueryBuilderContainer.js.map +1 -1
- package/lib/esm/widget/components/Grouping.js +25 -30
- package/lib/esm/widget/components/Grouping.js.map +1 -1
- package/lib/esm/widget/components/Grouping.scss +8 -7
- package/lib/esm/widget/components/GroupingMapping.js +1 -1
- package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
- package/lib/esm/widget/components/GroupingMapping.scss +3 -6
- package/lib/esm/widget/components/HorizontalTile.d.ts +13 -0
- package/lib/esm/widget/components/HorizontalTile.js +11 -0
- package/lib/esm/widget/components/HorizontalTile.js.map +1 -0
- package/lib/{cjs/widget/components/GroupTile.scss → esm/widget/components/HorizontalTile.scss} +4 -4
- package/lib/esm/widget/components/Mapping.js +41 -61
- package/lib/esm/widget/components/Mapping.js.map +1 -1
- package/lib/esm/widget/components/Mapping.scss +22 -8
- package/lib/esm/widget/components/MappingAction.js +3 -3
- package/lib/esm/widget/components/MappingAction.js.map +1 -1
- package/lib/esm/widget/components/MappingAction.scss +2 -2
- package/lib/esm/widget/components/MappingImportWizardModal.js +2 -2
- package/lib/esm/widget/components/MappingImportWizardModal.js.map +1 -1
- package/lib/esm/widget/components/MappingImportWizardModal.scss +3 -3
- package/lib/esm/widget/components/PropertyMenu.js +14 -13
- package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
- package/lib/esm/widget/components/PropertyMenu.scss +7 -7
- package/lib/esm/widget/components/SelectIModel.js +3 -3
- package/lib/esm/widget/components/SelectIModel.js.map +1 -1
- package/lib/esm/widget/components/SelectIModel.scss +2 -6
- package/lib/esm/widget/components/SelectMapping.scss +2 -2
- package/lib/esm/widget/components/SelectMappings.js +3 -3
- package/lib/esm/widget/components/SelectMappings.js.map +1 -1
- package/lib/esm/widget/components/SelectProject.js +30 -22
- package/lib/esm/widget/components/SelectProject.js.map +1 -1
- package/lib/esm/widget/components/SelectProject.scss +5 -5
- package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.d.ts +0 -1
- package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.js +0 -1
- package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.js.map +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/PropertyGrid.scss +12 -12
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +1 -1
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
- package/lib/esm/widget/components/property-grid/PropertyList.js +1 -1
- package/lib/esm/widget/components/property-grid/PropertyList.js.map +1 -1
- package/lib/esm/widget/components/property-grid/PropertyView.js +5 -5
- package/lib/esm/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/esm/widget/components/property-grid/PropertyView.scss +13 -62
- package/lib/esm/widget/components/utils.js +6 -6
- package/lib/esm/widget/components/utils.js.map +1 -1
- package/lib/esm/widget/components/utils.scss +6 -6
- package/lib/esm/widget/components/viewerUtils.d.ts +7 -7
- package/lib/esm/widget/components/viewerUtils.js +27 -46
- package/lib/esm/widget/components/viewerUtils.js.map +1 -1
- package/package.json +2 -1
- package/lib/cjs/widget/components/GroupTile.d.ts +0 -13
- package/lib/cjs/widget/components/GroupTile.js +0 -18
- package/lib/cjs/widget/components/GroupTile.js.map +0 -1
- package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.scss +0 -16
- package/lib/esm/widget/components/GroupTile.d.ts +0 -13
- package/lib/esm/widget/components/GroupTile.js +0 -11
- package/lib/esm/widget/components/GroupTile.js.map +0 -1
- package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.scss +0 -16
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
@import '~@itwin/itwinui-css/scss/variables';
|
|
6
6
|
|
|
7
|
-
.custom-calculation-action-container {
|
|
7
|
+
.gmw-custom-calculation-action-container {
|
|
8
8
|
overflow-x: auto;
|
|
9
9
|
height: 100%;
|
|
10
10
|
|
|
11
|
-
.details-form {
|
|
11
|
+
.gmw-details-form {
|
|
12
12
|
display: flex;
|
|
13
13
|
flex-direction: column;
|
|
14
14
|
gap: $iui-baseline;
|
|
@@ -26,12 +26,12 @@ export const DeleteModal = ({ entityName, show, setShow, onDelete, refresh, }) =
|
|
|
26
26
|
React.createElement(Modal, { title: 'Confirm', modalRootId: 'grouping-mapping-widget', isOpen: show, isDismissible: !isLoading, onClose: () => {
|
|
27
27
|
setShow(false);
|
|
28
28
|
} },
|
|
29
|
-
React.createElement("div", { className: "delete-modal-body-text" },
|
|
29
|
+
React.createElement("div", { className: "gmw-delete-modal-body-text" },
|
|
30
30
|
React.createElement(Leading, null, "Are you sure you want to delete"),
|
|
31
31
|
React.createElement("strong", null, React.createElement(MiddleTextTruncation, { text: `${entityName}?` }))),
|
|
32
32
|
React.createElement(ModalButtonBar, null,
|
|
33
33
|
isLoading &&
|
|
34
|
-
React.createElement("div", { className: "loading-delete" },
|
|
34
|
+
React.createElement("div", { className: "gmw-loading-delete" },
|
|
35
35
|
React.createElement(LoadingSpinner, null)),
|
|
36
36
|
React.createElement(Button, { styleType: 'high-visibility', onClick: deleteCallback, disabled: isLoading }, "Delete"),
|
|
37
37
|
React.createElement(Button, { styleType: 'default', onClick: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteModal.js","sourceRoot":"","sources":["../../../../src/widget/components/DeleteModal.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EACL,MAAM,EACN,OAAO,EACP,oBAAoB,EACpB,KAAK,EACL,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAUtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,OAAO,GACU,EAAE,EAAE;IACrB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE3D,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,MAAM,OAAO,EAAE,CAAC;SACjB;QAAC,OAAO,KAAU,EAAE;YACnB,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;gBAAS;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;IAEF,OAAO,CACL;QACE,oBAAC,KAAK,IACJ,KAAK,EAAC,SAAS,EACf,WAAW,EAAC,yBAAyB,EACrC,MAAM,EAAE,IAAI,EACZ,aAAa,EAAE,CAAC,SAAS,EACzB,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAED,6BAAK,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"DeleteModal.js","sourceRoot":"","sources":["../../../../src/widget/components/DeleteModal.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EACL,MAAM,EACN,OAAO,EACP,oBAAoB,EACpB,KAAK,EACL,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAUtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,OAAO,GACU,EAAE,EAAE;IACrB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE3D,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,MAAM,OAAO,EAAE,CAAC;SACjB;QAAC,OAAO,KAAU,EAAE;YACnB,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;gBAAS;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;IAEF,OAAO,CACL;QACE,oBAAC,KAAK,IACJ,KAAK,EAAC,SAAS,EACf,WAAW,EAAC,yBAAyB,EACrC,MAAM,EAAE,IAAI,EACZ,aAAa,EAAE,CAAC,SAAS,EACzB,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAED,6BAAK,SAAS,EAAC,4BAA4B;gBACzC,oBAAC,OAAO,0CAEE;gBACV,oCACG,oBAAC,oBAAoB,IAAC,IAAI,EAAE,GAAG,UAAU,GAAG,GAAI,CAC1C,CACL;YACN,oBAAC,cAAc;gBACZ,SAAS;oBACR,6BAAK,SAAS,EAAC,oBAAoB;wBACjC,oBAAC,cAAc,OAAG,CACd;gBACR,oBAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,aAEvE;gBACT,oBAAC,MAAM,IACL,SAAS,EAAC,SAAS,EACnB,OAAO,EAAE,GAAG,EAAE;wBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC,EACD,QAAQ,EAAE,SAAS,aAGZ,CACM,CACX,CACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport {\n Button,\n Leading,\n MiddleTextTruncation,\n Modal,\n ModalButtonBar,\n} from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport \"./DeleteModal.scss\";\nimport { handleError, LoadingSpinner } from \"./utils\";\n\nexport interface DeleteModalProps {\n entityName: string;\n show: boolean;\n setShow: React.Dispatch<React.SetStateAction<boolean>>;\n onDelete: () => Promise<void>;\n refresh: () => Promise<void>;\n}\n\nexport const DeleteModal = ({\n entityName,\n show,\n setShow,\n onDelete,\n refresh,\n}: DeleteModalProps) => {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const deleteCallback = async () => {\n try {\n setIsLoading(true);\n await onDelete();\n setShow(false);\n await refresh();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <Modal\n title='Confirm'\n modalRootId='grouping-mapping-widget'\n isOpen={show}\n isDismissible={!isLoading}\n onClose={() => {\n setShow(false);\n }}\n >\n <div className=\"gmw-delete-modal-body-text\">\n <Leading>\n Are you sure you want to delete\n </Leading>\n <strong>\n {<MiddleTextTruncation text={`${entityName}?`} />}\n </strong>\n </div>\n <ModalButtonBar>\n {isLoading &&\n <div className=\"gmw-loading-delete\">\n <LoadingSpinner />\n </div>}\n <Button styleType='high-visibility' onClick={deleteCallback} disabled={isLoading}>\n Delete\n </Button>\n <Button\n styleType='default'\n onClick={() => {\n setShow(false);\n }}\n disabled={isLoading}\n >\n Cancel\n </Button>\n </ModalButtonBar>\n </Modal>\n </>\n );\n};\n\nexport default DeleteModal;\n"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
@import '~@itwin/itwinui-css/scss/variables';
|
|
6
6
|
|
|
7
|
-
.delete-modal-body-text {
|
|
7
|
+
.gmw-delete-modal-body-text {
|
|
8
8
|
display: flex;
|
|
9
9
|
gap: 4px;
|
|
10
10
|
flex-wrap: wrap;
|
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
.loading-delete {
|
|
16
|
+
.gmw-loading-delete {
|
|
17
17
|
margin-right: $iui-s;
|
|
18
18
|
}
|
|
@@ -2,13 +2,13 @@ import { Presentation, } from "@itwin/presentation-frontend";
|
|
|
2
2
|
import { useActiveIModelConnection } from "@itwin/appui-react";
|
|
3
3
|
import { Button, Fieldset, LabeledInput, LabeledTextarea, RadioTile, RadioTileGroup, Small, Text, toaster } from "@itwin/itwinui-react";
|
|
4
4
|
import React, { useCallback, useEffect, useState } from "react";
|
|
5
|
-
import {
|
|
5
|
+
import { handleError, handleInputChange, LoadingSpinner, WidgetHeader } from "./utils";
|
|
6
6
|
import "./GroupAction.scss";
|
|
7
7
|
import ActionPanel from "./ActionPanel";
|
|
8
8
|
import useValidator, { NAME_REQUIREMENTS } from "../hooks/useValidator";
|
|
9
9
|
import { GroupQueryBuilderContainer } from "./GroupQueryBuilderContainer";
|
|
10
10
|
import { QueryBuilder } from "./QueryBuilder";
|
|
11
|
-
import { transparentOverriddenElements,
|
|
11
|
+
import { transparentOverriddenElements, visualizeElementsByQuery, zoomToElements, } from "./viewerUtils";
|
|
12
12
|
import { SvgCursor, SvgSearch } from "@itwin/itwinui-icons-react";
|
|
13
13
|
import { GroupQueryBuilderContext } from "./context/GroupQueryBuilderContext";
|
|
14
14
|
import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
|
|
@@ -62,8 +62,7 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, resetView, }) => {
|
|
|
62
62
|
}
|
|
63
63
|
setIsRendering(true);
|
|
64
64
|
transparentOverriddenElements();
|
|
65
|
-
const
|
|
66
|
-
const resolvedHiliteIds = await visualizeElementsById(ids, "red", iModelConnection);
|
|
65
|
+
const resolvedHiliteIds = await visualizeElementsByQuery(query, "red", iModelConnection);
|
|
67
66
|
await zoomToElements(resolvedHiliteIds);
|
|
68
67
|
}
|
|
69
68
|
catch {
|
|
@@ -140,9 +139,9 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, resetView, }) => {
|
|
|
140
139
|
Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
|
|
141
140
|
await goBack();
|
|
142
141
|
} }),
|
|
143
|
-
React.createElement("div", { className: 'group-add-modify-container' },
|
|
144
|
-
React.createElement(Fieldset, { legend: 'Group Details', className: 'group-details' },
|
|
145
|
-
React.createElement(Small, { className: 'field-legend' }, "Asterisk * indicates mandatory fields."),
|
|
142
|
+
React.createElement("div", { className: 'gmw-group-add-modify-container' },
|
|
143
|
+
React.createElement(Fieldset, { legend: 'Group Details', className: 'gmw-group-details' },
|
|
144
|
+
React.createElement(Small, { className: 'gmw-field-legend' }, "Asterisk * indicates mandatory fields."),
|
|
146
145
|
React.createElement(LabeledInput, { id: 'groupName', name: 'groupName', label: 'Name', value: details.groupName, required: true, onChange: (event) => {
|
|
147
146
|
handleInputChange(event, details, setDetails);
|
|
148
147
|
validator.showMessageFor("groupName");
|
|
@@ -157,8 +156,8 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, resetView, }) => {
|
|
|
157
156
|
React.createElement(LabeledInput, { id: 'description', name: 'description', label: 'Description', value: details.description, onChange: (event) => {
|
|
158
157
|
handleInputChange(event, details, setDetails);
|
|
159
158
|
} })),
|
|
160
|
-
React.createElement(Fieldset, { legend: 'Group By', className: 'query-builder-container' },
|
|
161
|
-
React.createElement(RadioTileGroup, { className: "radio-group-tile", required: true },
|
|
159
|
+
React.createElement(Fieldset, { legend: 'Group By', className: 'gmw-query-builder-container' },
|
|
160
|
+
React.createElement(RadioTileGroup, { className: "gmw-radio-group-tile", required: true },
|
|
162
161
|
React.createElement(RadioTile, { name: "groupby", icon: React.createElement(SvgCursor, null), onChange: changeGroupByType, defaultChecked: true, value: "Selection", label: "Selection", disabled: isLoading || isRendering }),
|
|
163
162
|
React.createElement(RadioTile, { icon: React.createElement(SvgSearch, null), name: "groupby", onChange: changeGroupByType, value: "Query Keywords", label: "Query Keywords", disabled: isLoading || isRendering })),
|
|
164
163
|
queryGenerationType === "Selection" ?
|
|
@@ -174,10 +173,10 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, resetView, }) => {
|
|
|
174
173
|
resetView,
|
|
175
174
|
} },
|
|
176
175
|
React.createElement(GroupQueryBuilderContainer, null)) :
|
|
177
|
-
React.createElement("div", { className: "search-form" },
|
|
176
|
+
React.createElement("div", { className: "gmw-search-form" },
|
|
178
177
|
React.createElement(Text, null, "Generate a query by keywords. Keywords wrapped in double quotes will be considered a required criteria."),
|
|
179
178
|
React.createElement(LabeledTextarea, { label: "Query Keywords", required: true, value: searchInput, onChange: (event) => setSearchInput(event.target.value), disabled: isLoading || isRendering, placeholder: `E.g. "red" chair` }),
|
|
180
|
-
React.createElement("div", { className: "search-actions" },
|
|
179
|
+
React.createElement("div", { className: "gmw-search-actions" },
|
|
181
180
|
isRendering &&
|
|
182
181
|
React.createElement(LoadingSpinner, null),
|
|
183
182
|
React.createElement(Button, { disabled: isLoading || isRendering, onClick: () => generateSearchQuery(searchInput ? searchInput.replace(/(\r\n|\n|\r)/gm, "").trim().split(" ") : []) }, "Generate Query"),
|
|
@@ -191,7 +190,7 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, resetView, }) => {
|
|
|
191
190
|
}, onCancel: async () => {
|
|
192
191
|
Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
|
|
193
192
|
await goBack();
|
|
194
|
-
}, isSavingDisabled: isBlockingActions,
|
|
193
|
+
}, isSavingDisabled: isBlockingActions, isLoading: isLoading })));
|
|
195
194
|
};
|
|
196
195
|
export default GroupAction;
|
|
197
196
|
//# sourceMappingURL=GroupAction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport {\n Presentation,\n} from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { Button, Fieldset, LabeledInput, LabeledTextarea, RadioTile, RadioTileGroup, Small, Text, toaster } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { fetchIdsFromQuery, handleError, handleInputChange, LoadingSpinner, WidgetHeader } from \"./utils\";\nimport type { GroupType } from \"./Grouping\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { GroupQueryBuilderContainer } from \"./GroupQueryBuilderContainer\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport {\n transparentOverriddenElements,\n visualizeElementsById,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { SvgCursor, SvgSearch } from \"@itwin/itwinui-icons-react\";\nimport { GroupQueryBuilderContext } from \"./context/GroupQueryBuilderContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\n\ninterface GroupActionProps {\n iModelId: string;\n mappingId: string;\n group?: GroupType;\n goBack: () => Promise<void>;\n resetView: () => Promise<void>;\n}\n\nconst GroupAction = ({\n iModelId,\n mappingId,\n group,\n goBack,\n resetView,\n}: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [details, setDetails] = useState({\n groupName: group?.groupName ?? \"\",\n description: group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [currentPropertyList, setCurrentPropertyList] = React.useState<PropertyRecord[]>([]);\n const [queryBuilder, setQueryBuilder] = React.useState<QueryBuilder>(\n new QueryBuilder(undefined),\n );\n const [queryGenerationType, setQueryGenerationType] = React.useState(\"Selection\");\n const [searchInput, setSearchInput] = React.useState(\"\");\n\n const changeGroupByType = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const {\n target: { value },\n } = event;\n setQueryGenerationType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n };\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(evt.imodel, evt.level);\n const query = selection.instanceKeys.size > 0 ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}` : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection, queryGenerationType]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n\n if (queryGenerationType === \"Selection\" && currentPropertyList.length === 0) {\n return;\n }\n\n setIsRendering(true);\n transparentOverriddenElements();\n const ids = await fetchIdsFromQuery(query ?? \"\", iModelConnection);\n const resolvedHiliteIds = await visualizeElementsById(\n ids,\n \"red\",\n iModelConnection,\n );\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(\"Sorry, we have failed to generate a valid query. 😔\");\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query, currentPropertyList, queryGenerationType]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const isWrappedInQuotes = (text: string) => {\n return text.startsWith(`\"`) && text.endsWith(`\"`);\n };\n\n const needsAndOperator = (token: string, index: number, searchQuery: string[]) => isWrappedInQuotes(token) || (index === 1 && isWrappedInQuotes(searchQuery[0]));\n // Temporary until ECViews become available for use.\n const generateSearchQuery = (searchQuery: string[]) => {\n if (searchQuery.length === 0) {\n setQuery(\"\");\n return;\n }\n\n let generatedSearchQuery =\n `SELECT be.ECInstanceId, be.ECClassId FROM bis.geometricelement3d be `;\n generatedSearchQuery += `LEFT JOIN bis.SpatialCategory cat ON be.Category.Id = cat.ECInstanceID LEFT JOIN ecdbmeta.ECClassDef ecc ON be.ECClassId = ecc.ECInstanceId `;\n generatedSearchQuery += `LEFT JOIN bis.PhysicalType pt ON be.TypeDefinition.Id = pt.ECInstanceID`;\n generatedSearchQuery += ` WHERE `;\n generatedSearchQuery += `((${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} be.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} be.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})) OR ((${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} cat.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} cat.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} ecc.name LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})`;\n // Physical Types\n generatedSearchQuery += ` OR ((${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} pt.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} pt.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})) `;\n\n setQuery(generatedSearchQuery);\n };\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n mappingId,\n group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(accessToken, iModelId, mappingId, {\n ...details,\n query: currentQuery,\n });\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n }, [\n details,\n goBack,\n group,\n iModelConnection,\n iModelId,\n mappingId,\n query,\n showValidationMessage,\n simpleSelectionQuery,\n validator,\n getAccessToken,\n mappingClient,\n ]);\n\n const isBlockingActions = !(details.groupName && (query || simpleSelectionQuery) && !isRendering && !isLoading);\n\n return (\n <>\n <WidgetHeader\n title={group ? group.groupName ?? \"\" : \"Add Group\"}\n returnFn={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n }}\n />\n <div className='group-add-modify-container'>\n <Fieldset legend='Group Details' className='group-details'>\n <Small className='field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='groupName'\n name='groupName'\n label='Name'\n value={details.groupName}\n required\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n message={validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )}\n status={\n validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"groupName\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={details.description}\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n }}\n />\n </Fieldset>\n <Fieldset legend='Group By' className='query-builder-container'>\n <RadioTileGroup\n className=\"radio-group-tile\"\n required>\n <RadioTile\n name={\"groupby\"}\n icon={<SvgCursor />}\n onChange={changeGroupByType}\n defaultChecked\n value={\"Selection\"}\n label={\"Selection\"}\n disabled={isLoading || isRendering}\n />\n <RadioTile\n icon={<SvgSearch />}\n name={\"groupby\"}\n onChange={changeGroupByType}\n value={\"Query Keywords\"}\n label={\"Query Keywords\"}\n disabled={isLoading || isRendering}\n />\n </RadioTileGroup>\n {queryGenerationType === \"Selection\" ?\n <GroupQueryBuilderContext.Provider\n value={{\n currentPropertyList,\n setCurrentPropertyList,\n query,\n setQuery,\n queryBuilder,\n setQueryBuilder,\n isLoading,\n isRendering,\n resetView,\n }}\n >\n <GroupQueryBuilderContainer />\n </GroupQueryBuilderContext.Provider> :\n <div className=\"search-form\">\n <Text>Generate a query by keywords. Keywords wrapped in double quotes will be considered a required criteria.</Text>\n <LabeledTextarea\n label=\"Query Keywords\"\n required\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n disabled={isLoading || isRendering}\n placeholder={`E.g. \"red\" chair`} />\n <div className=\"search-actions\">\n {isRendering &&\n <LoadingSpinner />\n }\n <Button disabled={isLoading || isRendering} onClick={() => generateSearchQuery(searchInput ? searchInput.replace(/(\\r\\n|\\n|\\r)/gm, \"\").trim().split(\" \") : [])}>Generate Query</Button>\n <Button disabled={isLoading || isRendering} onClick={async () => {\n setQuery(\"\");\n setSearchInput(\"\");\n await resetView();\n }}>Clear</Button>\n </div>\n </div>\n }\n </Fieldset>\n </div>\n <ActionPanel\n onSave={async () => {\n await save();\n }}\n onCancel={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n }}\n isSavingDisabled={\n isBlockingActions\n }\n isCancelDisabled={isBlockingActions}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default GroupAction;\n"]}
|
|
1
|
+
{"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport {\n Presentation,\n} from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { Button, Fieldset, LabeledInput, LabeledTextarea, RadioTile, RadioTileGroup, Small, Text, toaster } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { handleError, handleInputChange, LoadingSpinner, WidgetHeader } from \"./utils\";\nimport type { GroupType } from \"./Grouping\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { GroupQueryBuilderContainer } from \"./GroupQueryBuilderContainer\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport {\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { SvgCursor, SvgSearch } from \"@itwin/itwinui-icons-react\";\nimport { GroupQueryBuilderContext } from \"./context/GroupQueryBuilderContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\n\ninterface GroupActionProps {\n iModelId: string;\n mappingId: string;\n group?: GroupType;\n goBack: () => Promise<void>;\n resetView: () => Promise<void>;\n}\n\nconst GroupAction = ({\n iModelId,\n mappingId,\n group,\n goBack,\n resetView,\n}: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [details, setDetails] = useState({\n groupName: group?.groupName ?? \"\",\n description: group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [currentPropertyList, setCurrentPropertyList] = React.useState<PropertyRecord[]>([]);\n const [queryBuilder, setQueryBuilder] = React.useState<QueryBuilder>(\n new QueryBuilder(undefined),\n );\n const [queryGenerationType, setQueryGenerationType] = React.useState(\"Selection\");\n const [searchInput, setSearchInput] = React.useState(\"\");\n\n const changeGroupByType = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const {\n target: { value },\n } = event;\n setQueryGenerationType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n };\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(evt.imodel, evt.level);\n const query = selection.instanceKeys.size > 0 ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}` : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection, queryGenerationType]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n\n if (queryGenerationType === \"Selection\" && currentPropertyList.length === 0) {\n return;\n }\n\n setIsRendering(true);\n transparentOverriddenElements();\n const resolvedHiliteIds = await visualizeElementsByQuery(\n query,\n \"red\",\n iModelConnection,\n );\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(\"Sorry, we have failed to generate a valid query. 😔\");\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query, currentPropertyList, queryGenerationType]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const isWrappedInQuotes = (text: string) => {\n return text.startsWith(`\"`) && text.endsWith(`\"`);\n };\n\n const needsAndOperator = (token: string, index: number, searchQuery: string[]) => isWrappedInQuotes(token) || (index === 1 && isWrappedInQuotes(searchQuery[0]));\n // Temporary until ECViews become available for use.\n const generateSearchQuery = (searchQuery: string[]) => {\n if (searchQuery.length === 0) {\n setQuery(\"\");\n return;\n }\n\n let generatedSearchQuery =\n `SELECT be.ECInstanceId, be.ECClassId FROM bis.geometricelement3d be `;\n generatedSearchQuery += `LEFT JOIN bis.SpatialCategory cat ON be.Category.Id = cat.ECInstanceID LEFT JOIN ecdbmeta.ECClassDef ecc ON be.ECClassId = ecc.ECInstanceId `;\n generatedSearchQuery += `LEFT JOIN bis.PhysicalType pt ON be.TypeDefinition.Id = pt.ECInstanceID`;\n generatedSearchQuery += ` WHERE `;\n generatedSearchQuery += `((${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} be.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} be.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})) OR ((${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} cat.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} cat.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} ecc.name LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})`;\n // Physical Types\n generatedSearchQuery += ` OR ((${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} pt.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}) OR (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : needsAndOperator(token, index, searchQuery) ? \"AND\" : \"OR\"} pt.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")})) `;\n\n setQuery(generatedSearchQuery);\n };\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n mappingId,\n group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(accessToken, iModelId, mappingId, {\n ...details,\n query: currentQuery,\n });\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n }, [\n details,\n goBack,\n group,\n iModelConnection,\n iModelId,\n mappingId,\n query,\n showValidationMessage,\n simpleSelectionQuery,\n validator,\n getAccessToken,\n mappingClient,\n ]);\n\n const isBlockingActions = !(details.groupName && (query || simpleSelectionQuery) && !isRendering && !isLoading);\n\n return (\n <>\n <WidgetHeader\n title={group ? group.groupName ?? \"\" : \"Add Group\"}\n returnFn={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n }}\n />\n <div className='gmw-group-add-modify-container'>\n <Fieldset legend='Group Details' className='gmw-group-details'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='groupName'\n name='groupName'\n label='Name'\n value={details.groupName}\n required\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n message={validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )}\n status={\n validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"groupName\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={details.description}\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n }}\n />\n </Fieldset>\n <Fieldset legend='Group By' className='gmw-query-builder-container'>\n <RadioTileGroup\n className=\"gmw-radio-group-tile\"\n required>\n <RadioTile\n name={\"groupby\"}\n icon={<SvgCursor />}\n onChange={changeGroupByType}\n defaultChecked\n value={\"Selection\"}\n label={\"Selection\"}\n disabled={isLoading || isRendering}\n />\n <RadioTile\n icon={<SvgSearch />}\n name={\"groupby\"}\n onChange={changeGroupByType}\n value={\"Query Keywords\"}\n label={\"Query Keywords\"}\n disabled={isLoading || isRendering}\n />\n </RadioTileGroup>\n {queryGenerationType === \"Selection\" ?\n <GroupQueryBuilderContext.Provider\n value={{\n currentPropertyList,\n setCurrentPropertyList,\n query,\n setQuery,\n queryBuilder,\n setQueryBuilder,\n isLoading,\n isRendering,\n resetView,\n }}\n >\n <GroupQueryBuilderContainer />\n </GroupQueryBuilderContext.Provider> :\n <div className=\"gmw-search-form\">\n <Text>Generate a query by keywords. Keywords wrapped in double quotes will be considered a required criteria.</Text>\n <LabeledTextarea\n label=\"Query Keywords\"\n required\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n disabled={isLoading || isRendering}\n placeholder={`E.g. \"red\" chair`} />\n <div className=\"gmw-search-actions\">\n {isRendering &&\n <LoadingSpinner />\n }\n <Button disabled={isLoading || isRendering} onClick={() => generateSearchQuery(searchInput ? searchInput.replace(/(\\r\\n|\\n|\\r)/gm, \"\").trim().split(\" \") : [])}>Generate Query</Button>\n <Button disabled={isLoading || isRendering} onClick={async () => {\n setQuery(\"\");\n setSearchInput(\"\");\n await resetView();\n }}>Clear</Button>\n </div>\n </div>\n }\n </Fieldset>\n </div>\n <ActionPanel\n onSave={async () => {\n await save();\n }}\n onCancel={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n }}\n isSavingDisabled={\n isBlockingActions\n }\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default GroupAction;\n"]}
|
|
@@ -4,35 +4,35 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
@import '~@itwin/itwinui-css/scss/variables';
|
|
6
6
|
|
|
7
|
-
.group-add-modify-container {
|
|
7
|
+
.gmw-group-add-modify-container {
|
|
8
8
|
display: flex;
|
|
9
9
|
flex-direction: column;
|
|
10
10
|
gap: $iui-baseline;
|
|
11
11
|
overflow-x: auto;
|
|
12
12
|
height: 100%;
|
|
13
13
|
|
|
14
|
-
.group-details {
|
|
14
|
+
.gmw-group-details {
|
|
15
15
|
display: flex;
|
|
16
16
|
flex-direction: column;
|
|
17
17
|
gap: $iui-baseline;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
.query-builder-container {
|
|
20
|
+
.gmw-query-builder-container {
|
|
21
21
|
display: flex;
|
|
22
22
|
flex-direction: column;
|
|
23
23
|
gap: $iui-baseline;
|
|
24
24
|
|
|
25
|
-
.radio-group-tile {
|
|
25
|
+
.gmw-radio-group-tile {
|
|
26
26
|
display: flex;
|
|
27
27
|
justify-content: center;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
.search-form {
|
|
30
|
+
.gmw-search-form {
|
|
31
31
|
display: flex;
|
|
32
32
|
flex-direction: column;
|
|
33
33
|
gap: $iui-baseline;
|
|
34
34
|
margin-top: $iui-baseline;
|
|
35
|
-
> .search-actions {
|
|
35
|
+
> .gmw-search-actions {
|
|
36
36
|
display: flex;
|
|
37
37
|
justify-content: flex-end;
|
|
38
38
|
gap: $iui-s;
|
|
@@ -325,9 +325,9 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
|
|
|
325
325
|
}, [classToPropertiesMapping, ecProperties]);
|
|
326
326
|
return (React.createElement(React.Fragment, null,
|
|
327
327
|
React.createElement(WidgetHeader, { title: groupPropertyName !== null && groupPropertyName !== void 0 ? groupPropertyName : "Add Property", returnFn: async () => returnFn(false) }),
|
|
328
|
-
React.createElement("div", { className: 'group-property-action-container' },
|
|
329
|
-
React.createElement(Fieldset, { className: 'property-options', legend: 'Property Details' },
|
|
330
|
-
React.createElement(Small, { className: 'field-legend' }, "Asterisk * indicates mandatory fields."),
|
|
328
|
+
React.createElement("div", { className: 'gmw-group-property-action-container' },
|
|
329
|
+
React.createElement(Fieldset, { className: 'gmw-property-options', legend: 'Property Details' },
|
|
330
|
+
React.createElement(Small, { className: 'gmw-field-legend' }, "Asterisk * indicates mandatory fields."),
|
|
331
331
|
React.createElement(LabeledInput, { id: 'propertyName', label: 'Property Name', value: propertyName, required: true, disabled: isLoading, onChange: (event) => {
|
|
332
332
|
setPropertyName(event.target.value);
|
|
333
333
|
validator.showMessageFor("propertyName");
|
|
@@ -349,17 +349,17 @@ const GroupPropertyAction = ({ iModelId, mappingId, groupId, groupPropertyId, gr
|
|
|
349
349
|
validator.showMessageFor("dataType");
|
|
350
350
|
}, onShow: () => { }, onHide: () => { } }),
|
|
351
351
|
React.createElement(LabeledSelect, { label: 'Quantity Type', disabled: isLoading, options: quantityTypesSelectionOptions, value: quantityType, onChange: setQuantityType, onShow: () => { }, onHide: () => { } })),
|
|
352
|
-
React.createElement(Fieldset, { className: 'property-selection-container', legend: 'Properties' },
|
|
352
|
+
React.createElement(Fieldset, { className: 'gmw-property-selection-container', legend: 'Properties' },
|
|
353
353
|
propertyAlert && (React.createElement(Alert, { type: "negative" }, "Please select at least one property.")),
|
|
354
354
|
isLoading &&
|
|
355
355
|
Array(3)
|
|
356
356
|
.fill(null)
|
|
357
357
|
.map((_, index) => (React.createElement(Text, { key: index, variant: 'headline', isSkeleton: true }, "LOADING SKELETON"))), ecProperties === null || ecProperties === void 0 ? void 0 :
|
|
358
358
|
ecProperties.map((ecProperty, index) => {
|
|
359
|
-
return (React.createElement("div", { className: 'property-select-item', key: `${ecProperty.ecSchemaName}${ecProperty.ecClassName}` },
|
|
359
|
+
return (React.createElement("div", { className: 'gmw-property-select-item', key: `${ecProperty.ecSchemaName}${ecProperty.ecClassName}` },
|
|
360
360
|
React.createElement(Text, { variant: 'leading' }, ecProperty.ecClassName),
|
|
361
361
|
React.createElement(Text, { isMuted: true, variant: 'small' }, ecProperty.ecSchemaName),
|
|
362
|
-
React.createElement("div", { className: 'selection-and-reorder' },
|
|
362
|
+
React.createElement("div", { className: 'gmw-selection-and-reorder' },
|
|
363
363
|
React.createElement(Select, { options: propertyOptions[index], value: getValue(ecProperty, index), onChange: (value) => { value && onChange(value, index); }, placeholder: "<No Property Mapped>", style: { width: "100%" }, onShow: () => { }, onHide: () => { } }),
|
|
364
364
|
React.createElement(IconButton, { onClick: () => {
|
|
365
365
|
const updatedEcPropertyList = [...ecProperties];
|
|
@@ -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 { SelectOption } from \"@itwin/itwinui-react\";\nimport {\n Alert,\n Fieldset,\n IconButton,\n LabeledInput,\n LabeledSelect,\n Select,\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 <Select<string>\n options={propertyOptions[index]}\n value={getValue(ecProperty, index)}\n onChange={(value) => { value && onChange(value, index); }}\n placeholder=\"<No Property Mapped>\"\n style={{ width: \"100%\" }}\n onShow={() => { }}\n onHide={() => { }}\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":"AAeA,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,SAAS,GACV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,SAAS,GACV,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,KAAK,EACL,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,aAAa,EACb,MAAM,EACN,KAAK,EACL,IAAI,GACL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,YAAY,EAAE,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,4BAA4B,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAYjF,MAAM,CAAC,MAAM,6BAA6B,GAA2B;IACnE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE;CAClD,CAAC;AAYF,MAAM,gBAAgB,GAAG,CACvB,eAAgC,EAChC,wBAAiD,EACjD,UAA+B,EAC/B,EAAE;;IACF,iGAAiG;IACjG,qEAAqE;IACrE,MAAM,SAAS,GACb,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,aAAa,mCACzB,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;IACxD,qEAAqE;IACrE,IAAI,CAAC,SAAS,EAAE;QACd,OAAO;KACR;IAED,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QAC5C,wBAAwB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;KAC7C;IAED,uDAAuD;IACvD,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC,GAAG,UAAU,CAAC,cAAc,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC/E,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,UAAU;QACtB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,KAAK,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,cAAc,GAAG;QAC5D,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC;IAE1B,iDAAiD;IACjD,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,KAAK,YAAY,EAAE;QAClD,OAAO;KACR;SAAM;QACL,MAAA,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,0CAAE,IAAI,CAAC;YAC5C,IAAI,EAAE,YAAY;YAClB,KAAK;YACL,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;SAClD,CAAC,CAAC;KACJ;AACH,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC9B,IAAY,EACZ,SAAiB,EACjB,wBAAiD,EACjD,OAAuC,EACvC,EAAE;;IACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,mBAAmB,CAAC,SAAS,EAAE;YAC7D,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBAC5C,wBAAwB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;aAC7C;YAED,MAAA,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,0CAAE,IAAI,CAAC;gBAC5C,IAAI,EAAE,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE;gBAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;aAC3B,CAAC,CAAC;SACJ;aAAM,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,mBAAmB,CAAC,MAAM,EAAE;YACjE,uBAAuB,CACrB,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,EACxB,SAAS,EACT,wBAAwB,EACxB,MAAM,CAAC,IAAI,CAAC,OAAO,CACpB,CAAC;SACH;KACF;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,UAAmB,EACnB,wBAAiD,EACjD,UAA+B,EAC/B,EAAE;;IACF,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;QACjC,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;YACjC,KAAK,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBAClC,gBAAgB,CACd,QAA2B,EAC3B,wBAAwB,EACxB,UAAU,CACX,CAAC;gBACF,MAAM;aACP;YACD,cAAc;YACd,KAAK,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBAC/B,MAAM,kBAAkB,GAAG,QAA8B,CAAC;gBAC1D,sFAAsF;gBACtF,IACE,kBAAkB,CAAC,kBAAkB;oBACrC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAChD;oBACA,MAAM;iBACP;gBAED,QAAQ,kBAAkB,CAAC,mBAAmB,EAAE;oBAC9C,KAAK,mBAAmB,CAAC,YAAY,CAAC,CAAC;wBACrC,4DAA4D;wBAC5D,IACE,CAAC,UAAU;4BACX,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB;iCACvD,IAAI,KAAK,iCAAiC;gCAC3C,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB;qCACtD,IAAI,KAAK,iCAAiC,CAAC,EAChD;4BACA,MAAM,SAAS,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC;4BAC3D,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gCAC5C,wBAAwB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;6BAC7C;4BAED,iBAAiB,CACf,kBAAkB,CAAC,YAAY,EAC/B,wBAAwB,EACxB,UAAU,CACX,CAAC;yBACH;wBAED,MAAM;qBACP;oBACD,wBAAwB;oBACxB,KAAK,mBAAmB,CAAC,eAAe,CAAC,CAAC;wBACxC;wBACE,6BAA6B;wBAC7B,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI;4BAC9D,6CAA6C,EAC7C;4BACA,MAAM,SAAS,GACb,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;4BAChE,iBAAiB,CACf,kBAAkB,CAAC,YAAY,EAC/B,wBAAwB,EACxB;gCACE,cAAc,EAAE,gBAAgB;gCAChC,aAAa,EAAE,SAAS;6BACzB,CACF,CAAC;4BACF,mEAAmE;4BACnE,MAAA,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,0CAAE,IAAI,CAAC;gCAC5C,IAAI,EAAE,+CAA+C;gCACrD,KAAK,EAAE,kCAAkC;gCACzC,IAAI,EAAE,QAAQ;6BACf,CAAC,CAAC;4BAEH,MAAA,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,0CAAE,IAAI,CAAC;gCAC5C,IAAI,EAAE,+CAA+C;gCACrD,KAAK,EAAE,kCAAkC;gCACzC,IAAI,EAAE,QAAQ;6BACf,CAAC,CAAC;yBAEJ;wBACD,MAAM;qBACP;oBACD,OAAO,CAAC,CAAC;wBACP,6EAA6E;wBAC7E,uCAAuC;wBACvC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE;4BAC1C,MAAM,UAAU,GAAI,QAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;iCAC3D,QAAQ,CAAC,IAAI,CAAC;4BACjB,MAAM,SAAS,GAAI,QAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;iCAC1D,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;4BAC3B,uBAAuB,CACrB,UAAU;gCACR,CAAC,CAAC,GAAG,UAAU,CAAC,cAAc,IAAI,UAAU,EAAE;gCAC9C,CAAC,CAAC,UAAU,EACd,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EACjD,wBAAwB,EACxB,QAAQ,CAAC,IAAI,CAAC,OAAO,CACtB,CAAC;yBAEH;qBACF;iBACF;aACF;SACF;KACF;AACH,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,MAAM,EACN,QAAQ,GACiB,EAAE,EAAE;IAC7B,MAAM,gBAAgB,GAAG,yBAAyB,EAAsB,CAAC;IACzE,MAAM,EAAE,cAAc,EAAE,GAAG,2BAA2B,EAAE,CAAC;IACzD,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,EAAsB,CAAC;IAC/D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAS,WAAW,CAAC,CAAC;IACtE,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC,GAC3D,QAAQ,EAA2B,CAAC;IACtC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAC9C,EAAE,CACH,CAAC;IACF,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,YAAY,EAAE,CAAC;IAC1D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACnE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;;YAC5B,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,OAAO,GAAY;gBACvB,EAAE,EAAE,oBAAoB;gBACxB,KAAK,EAAE;oBACL;wBACE,QAAQ,EAAE,SAAS,CAAC,OAAO;wBAC3B,cAAc,EAAE;4BACd;gCACE,QAAQ,EAAE,yBAAyB,CAAC,qBAAqB;6BAC1D;yBACF;qBACF;iBAAC;aACL,CAAC;YACF,MAAM,cAAc,GAA+E;gBACjG,MAAM,EAAE,gBAAgB;gBACxB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,OAAO;gBACpB,WAAW,EAAE,0BAA0B,CAAC,YAAY;aACrD,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,oBAAoB,CAClE,cAAc,CACf,CAAC;YAEF,sCAAsC;YACtC,MAAM,UAAU,GACd,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC,MAAM,CACpB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,mBAAmB,CAAC,SAAS;gBACxD,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,mBAAmB,CAAC,MAAM,CACxD,mCAAI,EAAE,CAAC;YAEV,kCAAkC;YAClC,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAsB,CAAC;YAE/D,iBAAiB,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;YAExD,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAE9D,2CAA2C;YAC3C,MAAA,wBAAwB,CAAC,GAAG,CAAC,aAAa,CAAC,0CAAE,IAAI,CAAC;gBAChD,IAAI,EAAE,gCAAgC;gBACtC,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YAEH,MAAA,wBAAwB,CAAC,GAAG,CAAC,aAAa,CAAC,0CAAE,IAAI,CAAC;gBAChD,IAAI,EAAE,gCAAgC;gBACtC,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YAEH,MAAA,wBAAwB,CAAC,GAAG,CAAC,aAAa,CAAC,0CAAE,IAAI,CAAC;gBAChD,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YAEH,MAAA,wBAAwB,CAAC,GAAG,CAAC,aAAa,CAAC,0CAAE,IAAI,CAAC;gBAChD,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YAEH,2BAA2B,CAAC,wBAAwB,CAAC,CAAC;YAEtD,IAAI,eAA6B,CAAC;YAClC,8EAA8E;YAC9E,IAAI,eAAe,EAAE;gBACnB,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;gBAC3C,IAAI,QAAyC,CAAC;gBAC9C,IAAI;oBACF,QAAQ,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAC7C,WAAW,EACX,QAAQ,EACR,SAAS,EACT,OAAO,EACP,eAAe,CAChB,CAAC;iBACH;gBAAC,OAAO,KAAU,EAAE;oBACnB,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;iBAC3B;gBAED,IAAI,CAAC,QAAQ,EAAE;oBACb,OAAO;iBACR;gBACD,eAAe,GAAG,MAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,YAAY,mCAAI,EAAE,CAAC;gBAExD,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;gBACjE,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE;oBACxC,IAAI,GAAG,IAAI,CAAC,MAAM,CAChB,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,WAAW,EAAE,KAAK,GAAG,CACjE,CAAC;iBACH;gBAED,eAAe,CAAC,IAAI,CAClB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACpB,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC/B,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC9B,8BAA8B;oBAC9B,cAAc,EAAE,EAAE;oBAClB,cAAc,EAAE,EAAE;iBACnB,CAAC,CAAC,CACJ,CAAC;gBAEF,eAAe,CAAC,MAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,YAAY,mCAAI,EAAE,CAAC,CAAC;gBACvD,WAAW,CAAC,MAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,QAAQ,mCAAI,EAAE,CAAC,CAAC;gBAC/C,eAAe,CAAC,MAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,YAAY,mCAAI,EAAE,CAAC,CAAC;aACxD;iBAAM;gBACL,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC;qBACnD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;oBACf,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC/B,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC9B,8BAA8B;oBAC9B,cAAc,EAAE,EAAE;oBAClB,cAAc,EAAE,EAAE;iBACnB,CAAC,CAAC;qBACF,OAAO,EAAE,CAAC;aACd;YAED,eAAe,CAAC,eAAe,CAAC,CAAC;YAEjC,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;QACF,KAAK,UAAU,EAAE,CAAC;IACpB,CAAC,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7G,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,MAAM,oBAAoB,GAAG,YAAY,CAAC,MAAM,CAC9C,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,IAAI,UAAU,CAAC,cAAc,CACvE,CAAC;QACF,IAAI,CAAC,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,MAAM,CAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;YAC1D,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,MAAM,CAAA,EAAE;gBACjC,gBAAgB,CAAC,IAAI,CAAC,CAAC;aACxB;YACD,OAAO;SACR;QACD,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YAC3C,MAAM,aAAa,GAAwB;gBACzC,YAAY;gBACZ,QAAQ;gBACR,YAAY;gBACZ,YAAY,EAAE,oBAAoB;aACnC,CAAC;YACF,eAAe;gBACb,CAAC,CAAC,MAAM,aAAa,CAAC,mBAAmB,CACvC,WAAW,EACX,QAAQ,EACR,SAAS,EACT,OAAO,EACP,eAAe,EACf,aAAa,CACd;gBACD,CAAC,CAAC,MAAM,aAAa,CAAC,mBAAmB,CACvC,WAAW,EACX,QAAQ,EACR,SAAS,EACT,OAAO,EACP,aAAa,CACd,CAAC;YACJ,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;SACtB;QAAC,OAAO,KAAU,EAAE;YACnB,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;QAC5D,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,eAAe,CAAC,CAAC,YAAY,EAAE,EAAE;YAC/B,MAAM,mBAAmB,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;YAC9C,mBAAmB,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC;YAE1D,eAAe;YACf,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,QAAQ,QAAQ,CAAC,IAAI,EAAE;gBACrB,KAAK,MAAM;oBACT,IAAI,GAAG,SAAS,CAAC;oBACjB,MAAM;gBACR;oBACE,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;aACxB;YAED,mBAAmB,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC;YACjD,OAAO,mBAAmB,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE;QACnC,OAAO,YAAY,CAAC,GAAG,CACrB,CAAC,UAAsB,EAAE,EAAE;;YACzB,OAAA,MAAA,MAAA,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CACpB,GAAG,CAAC,GAAG,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,0CAC3D,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACnB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;iBACpB,CAAC;gBACF,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC,CAAC,mCAAI,EAAE,CAAA;SAAA,CACd,CAAC;IACJ,CAAC,EAAE,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,UAAsB,EAAE,KAAa,EAAE,EAAE;;QACxC,MAAM,QAAQ,GAAG,MAAA,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CACrC,GAAG,CAAC,GAAG,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,0CAC3D,IAAI,CACJ,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC,cAAc,CACnE,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5B,IAAI,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI;YACpB,IAAI,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI;SACrB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,CAAC,wBAAwB,EAAE,YAAY,CAAC,CACzC,CAAC;IAEF,OAAO,CACL;QACE,oBAAC,YAAY,IACX,KAAK,EAAE,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,cAAc,EAC1C,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GACrC;QACF,6BAAK,SAAS,EAAC,qCAAqC;YAClD,oBAAC,QAAQ,IAAC,SAAS,EAAC,sBAAsB,EAAC,MAAM,EAAC,kBAAkB;gBAClE,oBAAC,KAAK,IAAC,SAAS,EAAC,kBAAkB,6CAE3B;gBACR,oBAAC,YAAY,IACX,EAAE,EAAC,cAAc,EACjB,KAAK,EAAC,eAAe,EACrB,KAAK,EAAE,YAAY,EACnB,QAAQ,QACR,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACpC,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;oBAC3C,CAAC,EACD,OAAO,EAAE,SAAS,CAAC,OAAO,CACxB,cAAc,EACd,YAAY,EACZ,iBAAiB,CAClB,EACD,MAAM,EACJ,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,EAAE,iBAAiB,CAAC;wBAChE,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,SAAS,EAEf,MAAM,EAAE,GAAG,EAAE;wBACX,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;oBAC3C,CAAC,GACD;gBACF,oBAAC,aAAa,IACZ,KAAK,EAAE,WAAW,EAClB,EAAE,EAAC,UAAU,EACb,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE;wBACP,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;wBACtC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACpC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;qBACrC,EACD,QAAQ,QACR,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;wBACrC,WAAW,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC,EACD,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,EAChE,MAAM,EACJ,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC;wBACrD,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,SAAS,EAEf,MAAM,EAAE,GAAG,EAAE;wBACX,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;oBACvC,CAAC,EACD,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EACjB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GACjB;gBACF,oBAAC,aAAa,IACZ,KAAK,EAAC,eAAe,EACrB,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,6BAA6B,EACtC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EACjB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GACjB,CACO;YACX,oBAAC,QAAQ,IAAC,SAAS,EAAC,kCAAkC,EAAC,MAAM,EAAC,YAAY;gBACvE,aAAa,IAAI,CAChB,oBAAC,KAAK,IAAC,IAAI,EAAE,UAAU,2CAEf,CACT;gBACA,SAAS;oBACR,KAAK,CAAC,CAAC,CAAC;yBACL,IAAI,CAAC,IAAI,CAAC;yBACV,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CACjB,oBAAC,IAAI,IAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAC,UAAU,EAAC,UAAU,6BAExC,CACR,CAAC,EACL,YAAY,aAAZ,YAAY;gBAAZ,YAAY,CAAE,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;oBACvC,OAAO,CACL,6BACE,SAAS,EAAC,0BAA0B,EACpC,GAAG,EAAE,GAAG,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,WAAW,EAAE;wBAE1D,oBAAC,IAAI,IAAC,OAAO,EAAC,SAAS,IAAE,UAAU,CAAC,WAAW,CAAQ;wBACvD,oBAAC,IAAI,IAAC,OAAO,QAAC,OAAO,EAAC,OAAO,IAC1B,UAAU,CAAC,YAAY,CACnB;wBAEP,6BAAK,SAAS,EAAC,2BAA2B;4BACxC,oBAAC,MAAM,IACL,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,EAC/B,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,EAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EACzD,WAAW,EAAC,sBAAsB,EAClC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EACjB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GACjB;4BACF,oBAAC,UAAU,IACT,OAAO,EAAE,GAAG,EAAE;oCACZ,MAAM,qBAAqB,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;oCAChD,qBAAqB,CAAC,KAAK,CAAC,GAAG;wCAC7B,GAAG,qBAAqB,CAAC,KAAK,CAAC;wCAC/B,cAAc,EAAE,EAAE;wCAClB,cAAc,EAAE,EAAE;qCACnB,CAAC;oCACF,eAAe,CAAC,qBAAqB,CAAC,CAAC;gCACzC,CAAC,EACD,QAAQ,EACN,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,cAAc;gCAG1D,oBAAC,SAAS,OAAG,CACF;4BACb,oBAAC,UAAU,IACT,OAAO,EAAE,GAAG,EAAE;oCACZ,MAAM,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;oCAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oCAClC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oCAClC,eAAe,CAAC,GAAG,CAAC,CAAC;gCACvB,CAAC,EACD,QAAQ,EAAE,KAAK,KAAK,CAAC;gCAErB,oBAAC,YAAY,OAAG,CACL;4BACb,oBAAC,UAAU,IACT,OAAO,EAAE,GAAG,EAAE;oCACZ,MAAM,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;oCAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oCAClC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oCAClC,eAAe,CAAC,GAAG,CAAC,CAAC;gCACvB,CAAC,EACD,QAAQ,EAAE,KAAK,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC;gCAE3C,oBAAC,cAAc,OAAG,CACP,CACT,CACF,CACP,CAAC;gBACJ,CAAC,CAAC,CACO,CACP;QAEN,oBAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,GAAI,CAC3F,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n 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 { SelectOption } from \"@itwin/itwinui-react\";\nimport {\n Alert,\n Fieldset,\n IconButton,\n LabeledInput,\n LabeledSelect,\n Select,\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='gmw-group-property-action-container'>\n <Fieldset className='gmw-property-options' legend='Property Details'>\n <Small className='gmw-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='gmw-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='gmw-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='gmw-selection-and-reorder'>\n <Select<string>\n options={propertyOptions[index]}\n value={getValue(ecProperty, index)}\n onChange={(value) => { value && onChange(value, index); }}\n placeholder=\"<No Property Mapped>\"\n style={{ width: \"100%\" }}\n onShow={() => { }}\n onHide={() => { }}\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,33 +4,29 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
@import '~@itwin/itwinui-css/scss/variables';
|
|
6
6
|
|
|
7
|
-
.group-property-action-container {
|
|
7
|
+
.gmw-group-property-action-container {
|
|
8
8
|
display: flex;
|
|
9
9
|
flex-direction: column;
|
|
10
10
|
overflow-x: auto;
|
|
11
11
|
height: 100%;
|
|
12
12
|
|
|
13
|
-
.property-options {
|
|
13
|
+
.gmw-property-options {
|
|
14
14
|
display: inherit;
|
|
15
15
|
flex-direction: inherit;
|
|
16
16
|
gap: $iui-baseline;
|
|
17
17
|
margin-bottom: $iui-baseline * 4;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
.property-selection-container {
|
|
20
|
+
.gmw-property-selection-container {
|
|
21
21
|
display: flex;
|
|
22
22
|
flex-direction: column;
|
|
23
23
|
gap: $iui-baseline;
|
|
24
24
|
|
|
25
|
-
.property-select-item {
|
|
26
|
-
.selection-and-reorder {
|
|
25
|
+
.gmw-property-select-item {
|
|
26
|
+
.gmw-selection-and-reorder {
|
|
27
27
|
display: flex;
|
|
28
28
|
gap: $iui-s;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.iui-text-leading {
|
|
35
|
-
margin: 0;
|
|
36
|
-
}
|
|
32
|
+
}
|
|
@@ -4,19 +4,19 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
@import '~@itwin/itwinui-css/scss/variables';
|
|
6
6
|
|
|
7
|
-
.find-similar-container {
|
|
7
|
+
.gmw-find-similar-container {
|
|
8
8
|
color: var(--buic-foreground-body);
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
.button-container {
|
|
11
|
+
.gmw-button-container {
|
|
12
12
|
text-align: right;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
.reset-button {
|
|
15
|
+
.gmw-reset-button {
|
|
16
16
|
margin-left: 10px;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
.select-element-hint {
|
|
19
|
+
.gmw-select-element-hint {
|
|
20
20
|
display: flex;
|
|
21
21
|
height: 300px;
|
|
22
22
|
justify-content: center;
|