@itwin/grouping-mapping-widget 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js +1 -3
- package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -1
- package/lib/cjs/widget/components/GroupAction.d.ts +1 -0
- package/lib/cjs/widget/components/GroupAction.js +37 -71
- package/lib/cjs/widget/components/GroupAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupColorToggle.js +2 -2
- package/lib/cjs/widget/components/GroupColorToggle.js.map +1 -1
- package/lib/cjs/widget/components/GroupItem.d.ts +1 -1
- package/lib/cjs/widget/components/GroupItem.js +2 -2
- package/lib/cjs/widget/components/GroupItem.js.map +1 -1
- package/lib/cjs/widget/components/GroupMenuActions.d.ts +1 -1
- package/lib/cjs/widget/components/GroupMenuActions.js.map +1 -1
- package/lib/cjs/widget/components/GroupPropertyAction.js +1 -3
- package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupingMappingContext.d.ts +5 -0
- package/lib/cjs/widget/components/GroupingMappingContext.js +5 -2
- package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
- package/lib/cjs/widget/components/GroupingMappingRouter.js +1 -1
- package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -1
- package/lib/cjs/widget/components/GroupsVisualization.js +2 -6
- package/lib/cjs/widget/components/GroupsVisualization.js.map +1 -1
- package/lib/cjs/widget/components/Mapping.js +1 -1
- package/lib/cjs/widget/components/Mapping.js.map +1 -1
- package/lib/cjs/widget/components/QueryBuilderStep.d.ts +2 -1
- package/lib/cjs/widget/components/QueryBuilderStep.js +2 -1
- package/lib/cjs/widget/components/QueryBuilderStep.js.map +1 -1
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.d.ts +2 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.js +1 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.js.map +1 -1
- package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js +2 -2
- package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
- package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.scss +0 -1
- package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.scss +0 -1
- package/lib/cjs/widget/hooks/useVisualization.d.ts +11 -0
- package/lib/cjs/widget/hooks/useVisualization.js +68 -0
- package/lib/cjs/widget/hooks/useVisualization.js.map +1 -0
- package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js +1 -3
- package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -1
- package/lib/esm/widget/components/GroupAction.d.ts +1 -0
- package/lib/esm/widget/components/GroupAction.js +37 -71
- package/lib/esm/widget/components/GroupAction.js.map +1 -1
- package/lib/esm/widget/components/GroupColorToggle.js +2 -2
- package/lib/esm/widget/components/GroupColorToggle.js.map +1 -1
- package/lib/esm/widget/components/GroupItem.d.ts +1 -1
- package/lib/esm/widget/components/GroupItem.js +2 -2
- package/lib/esm/widget/components/GroupItem.js.map +1 -1
- package/lib/esm/widget/components/GroupMenuActions.d.ts +1 -1
- package/lib/esm/widget/components/GroupMenuActions.js.map +1 -1
- package/lib/esm/widget/components/GroupPropertyAction.js +1 -3
- package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
- package/lib/esm/widget/components/GroupingMappingContext.d.ts +5 -0
- package/lib/esm/widget/components/GroupingMappingContext.js +5 -2
- package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
- package/lib/esm/widget/components/GroupingMappingRouter.js +1 -1
- package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -1
- package/lib/esm/widget/components/GroupsVisualization.js +2 -6
- package/lib/esm/widget/components/GroupsVisualization.js.map +1 -1
- package/lib/esm/widget/components/Mapping.js +1 -1
- package/lib/esm/widget/components/Mapping.js.map +1 -1
- package/lib/esm/widget/components/QueryBuilderStep.d.ts +2 -1
- package/lib/esm/widget/components/QueryBuilderStep.js +3 -2
- package/lib/esm/widget/components/QueryBuilderStep.js.map +1 -1
- package/lib/esm/widget/components/context/GroupingApiConfigContext.d.ts +2 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.js +1 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.js.map +1 -1
- package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js +2 -2
- package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
- package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.scss +0 -1
- package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.scss +0 -1
- package/lib/esm/widget/hooks/useVisualization.d.ts +11 -0
- package/lib/esm/widget/hooks/useVisualization.js +64 -0
- package/lib/esm/widget/hooks/useVisualization.js.map +1 -0
- package/package.json +1 -1
|
@@ -25,7 +25,6 @@ exports.GroupQueryBuilderCustomUI = void 0;
|
|
|
25
25
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
26
26
|
*--------------------------------------------------------------------------------------------*/
|
|
27
27
|
const react_1 = __importStar(require("react"));
|
|
28
|
-
const appui_react_1 = require("@itwin/appui-react");
|
|
29
28
|
const presentation_frontend_1 = require("@itwin/presentation-frontend");
|
|
30
29
|
const presentation_common_1 = require("@itwin/presentation-common");
|
|
31
30
|
require("./GroupQueryBuilderCustomUI.scss");
|
|
@@ -36,6 +35,7 @@ const core_react_1 = require("@itwin/core-react");
|
|
|
36
35
|
const PropertyGridWrapperContext_1 = require("../context/PropertyGridWrapperContext");
|
|
37
36
|
const PropertyAction_1 = require("../PropertyAction");
|
|
38
37
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
38
|
+
const GroupingApiConfigContext_1 = require("../context/GroupingApiConfigContext");
|
|
39
39
|
const createPropertyDataProvider = (keys, iModelConnection) => {
|
|
40
40
|
const dataProvider = new presentation_components_1.PresentationPropertyDataProvider({
|
|
41
41
|
imodel: iModelConnection,
|
|
@@ -46,7 +46,7 @@ const createPropertyDataProvider = (keys, iModelConnection) => {
|
|
|
46
46
|
return dataProvider;
|
|
47
47
|
};
|
|
48
48
|
const GroupQueryBuilderCustomUI = ({ updateQuery, isUpdating, resetView, }) => {
|
|
49
|
-
const iModelConnection =
|
|
49
|
+
const { iModelConnection } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
|
|
50
50
|
if (!iModelConnection) {
|
|
51
51
|
throw new Error("This component requires an active iModelConnection.");
|
|
52
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupQueryBuilderCustomUI.js","sourceRoot":"","sources":["../../../../../src/widget/components/customUI/GroupQueryBuilderCustomUI.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,+CAAyE;AACzE,
|
|
1
|
+
{"version":3,"file":"GroupQueryBuilderCustomUI.js","sourceRoot":"","sources":["../../../../../src/widget/components/customUI/GroupQueryBuilderCustomUI.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 React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport { KeySet } from \"@itwin/presentation-common\";\nimport \"./GroupQueryBuilderCustomUI.scss\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport type { GroupingCustomUIProps } from \"./GroupingMappingCustomUI\";\nimport {\n DEFAULT_PROPERTY_GRID_RULESET,\n PresentationPropertyDataProvider,\n} from \"@itwin/presentation-components\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { ActionButtonRendererProps } from \"@itwin/components-react\";\nimport { VirtualizedPropertyGridWithDataProvider } from \"@itwin/components-react\";\nimport { ResizableContainerObserver } from \"@itwin/core-react\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyGridWrapperContext } from \"../context/PropertyGridWrapperContext\";\nimport { PropertyAction } from \"../PropertyAction\";\nimport { Alert, Button } from \"@itwin/itwinui-react\";\nimport { useGroupingMappingApiConfig } from \"../context/GroupingApiConfigContext\";\n\nconst createPropertyDataProvider = (\n keys: KeySet,\n iModelConnection: IModelConnection\n): PresentationPropertyDataProvider => {\n const dataProvider = new PresentationPropertyDataProvider({\n imodel: iModelConnection,\n ruleset: DEFAULT_PROPERTY_GRID_RULESET,\n });\n dataProvider.keys = keys;\n dataProvider.isNestedPropertyCategoryGroupingEnabled = true;\n return dataProvider;\n};\n\ninterface ContainerDimensions {\n width: number;\n height: number;\n}\n\nexport const GroupQueryBuilderCustomUI = ({\n updateQuery,\n isUpdating,\n resetView,\n}: GroupingCustomUIProps) => {\n const { iModelConnection } = useGroupingMappingApiConfig();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const [size, setSize] = useState<ContainerDimensions>({ width: 0, height: 0 });\n const [dataProvider, setDataProvider] =\n useState<PresentationPropertyDataProvider | undefined>(undefined);\n const [currentPropertyList, setCurrentPropertyList] = useState<PropertyRecord[]>([]);\n const [selectionKeySet, setSelectionKeyset] = useState<KeySet>(new KeySet());\n const [queryBuilder, setQueryBuilder] = useState<QueryBuilder | undefined>();\n\n useEffect(() => {\n const onSelectionChanged = async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider\n ) => {\n const selection = selectionProvider.getSelection(evt.imodel, evt.level);\n const keys = new KeySet(selection);\n setSelectionKeyset(keys);\n const dataProvider = createPropertyDataProvider(keys, iModelConnection);\n setDataProvider(dataProvider);\n setQueryBuilder(new QueryBuilder(dataProvider));\n };\n\n return iModelConnection\n ? Presentation.selection.selectionChange.addListener(onSelectionChanged)\n : () => { };\n }, [iModelConnection]);\n\n const onClickResetButton = async () => {\n queryBuilder?.resetQueryBuilder();\n updateQuery(\"\");\n setCurrentPropertyList([]);\n if (resetView)\n await resetView().catch((e) =>\n /* eslint-disable no-console */\n console.error(e)\n );\n };\n\n const resize = useCallback((width, height) => setSize({ width, height }), []);\n\n const propertyContextValues = useMemo(\n () => ({\n currentPropertyList,\n setCurrentPropertyList,\n queryBuilder,\n setQuery: updateQuery,\n isUpdating: isUpdating ?? false,\n }),\n [currentPropertyList, isUpdating, queryBuilder, updateQuery]\n );\n\n const actionButtonRenderers = useMemo(\n () => [\n ({ property }: ActionButtonRendererProps) => (\n <PropertyAction property={property} />\n ),\n ],\n []\n );\n\n return (\n <div className=\"gmw-select-query-generator-container\">\n {!dataProvider || selectionKeySet.size === 0 ? (\n <Alert type='informational'>\n Please select on an element within the viewer first, then select properties to generate a group query.\n </Alert>\n ) :\n <>\n <div className=\"gmw-select-property-grid-container\">\n <ResizableContainerObserver onResize={resize} />\n <PropertyGridWrapperContext.Provider value={propertyContextValues}>\n <VirtualizedPropertyGridWithDataProvider\n dataProvider={dataProvider}\n width={size.width}\n height={size.height}\n actionButtonRenderers={actionButtonRenderers}\n />\n </PropertyGridWrapperContext.Provider>\n </div>\n <div className=\"gmw-select-reset-button\">\n <Button\n styleType=\"default\"\n size=\"small\"\n onClick={onClickResetButton}\n >\n Reset\n </Button>\n </div>\n </>\n }\n </div>\n );\n};\n\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { IModelConnection } from "@itwin/core-frontend";
|
|
3
|
+
export declare const useVisualization: (shouldVisualize: boolean, iModelConnection: IModelConnection, query: string, queryGenerationType: string) => {
|
|
4
|
+
isRendering: boolean;
|
|
5
|
+
setIsRendering: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
6
|
+
simpleSelectionQuery: string;
|
|
7
|
+
setSimpleSelectionQuery: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
8
|
+
clearPresentationSelection: () => false | void;
|
|
9
|
+
resetView: () => Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=useVisualization.d.ts.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useVisualization = void 0;
|
|
4
|
+
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
5
|
+
const presentation_frontend_1 = require("@itwin/presentation-frontend");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const GroupHilitedElementsContext_1 = require("../components/context/GroupHilitedElementsContext");
|
|
8
|
+
const groupsHelpers_1 = require("../components/groupsHelpers");
|
|
9
|
+
const viewerUtils_1 = require("../components/viewerUtils");
|
|
10
|
+
const useVisualization = (shouldVisualize, iModelConnection, query, queryGenerationType) => {
|
|
11
|
+
const [isRendering, setIsRendering] = react_1.useState(false);
|
|
12
|
+
const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = GroupHilitedElementsContext_1.useGroupHilitedElementsContext();
|
|
13
|
+
const [simpleSelectionQuery, setSimpleSelectionQuery] = react_1.useState("");
|
|
14
|
+
const resetView = react_1.useCallback(async () => {
|
|
15
|
+
if (!shouldVisualize)
|
|
16
|
+
return;
|
|
17
|
+
if (showGroupColor) {
|
|
18
|
+
await groupsHelpers_1.visualizeGroupColors(iModelConnection, groups, hiddenGroupsIds, hilitedElementsQueryCache);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
viewerUtils_1.clearOverriddenElements();
|
|
22
|
+
}
|
|
23
|
+
viewerUtils_1.clearEmphasizedElements();
|
|
24
|
+
}, [groups, hiddenGroupsIds, hilitedElementsQueryCache, iModelConnection, showGroupColor, shouldVisualize]);
|
|
25
|
+
react_1.useEffect(() => {
|
|
26
|
+
if (!shouldVisualize)
|
|
27
|
+
return;
|
|
28
|
+
const removeListener = presentation_frontend_1.Presentation.selection.selectionChange.addListener(async (evt, selectionProvider) => {
|
|
29
|
+
if (queryGenerationType === "Selection") {
|
|
30
|
+
const selection = selectionProvider.getSelection(evt.imodel, evt.level);
|
|
31
|
+
const query = selection.instanceKeys.size > 0
|
|
32
|
+
? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`
|
|
33
|
+
: "";
|
|
34
|
+
setSimpleSelectionQuery(query);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return removeListener;
|
|
38
|
+
}, [iModelConnection, queryGenerationType, shouldVisualize]);
|
|
39
|
+
react_1.useEffect(() => {
|
|
40
|
+
if (!shouldVisualize)
|
|
41
|
+
return;
|
|
42
|
+
const reemphasize = async () => {
|
|
43
|
+
try {
|
|
44
|
+
if (!query || query === "") {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
setIsRendering(true);
|
|
48
|
+
viewerUtils_1.transparentOverriddenElements();
|
|
49
|
+
const resolvedHiliteIds = await viewerUtils_1.visualizeElementsByQuery(query, "red", iModelConnection);
|
|
50
|
+
await viewerUtils_1.zoomToElements(resolvedHiliteIds);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
itwinui_react_1.toaster.negative("Sorry, we have failed to generate a valid query. 😔");
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
setIsRendering(false);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
void reemphasize();
|
|
60
|
+
}, [iModelConnection, query, shouldVisualize]);
|
|
61
|
+
const clearPresentationSelection = react_1.useCallback(() => shouldVisualize && presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection), [iModelConnection, shouldVisualize]);
|
|
62
|
+
react_1.useEffect(() => {
|
|
63
|
+
clearPresentationSelection();
|
|
64
|
+
}, [clearPresentationSelection, iModelConnection]);
|
|
65
|
+
return { isRendering, setIsRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView };
|
|
66
|
+
};
|
|
67
|
+
exports.useVisualization = useVisualization;
|
|
68
|
+
//# sourceMappingURL=useVisualization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVisualization.js","sourceRoot":"","sources":["../../../../src/widget/hooks/useVisualization.ts"],"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 { toaster } from \"@itwin/itwinui-react\";\nimport type { ISelectionProvider, SelectionChangeEventArgs } from \"@itwin/presentation-frontend\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useGroupHilitedElementsContext } from \"../components/context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"../components/groupsHelpers\";\nimport { clearEmphasizedElements, clearOverriddenElements, transparentOverriddenElements, visualizeElementsByQuery, zoomToElements } from \"../components/viewerUtils\";\n\nexport const useVisualization = (shouldVisualize: boolean, iModelConnection: IModelConnection, query: string, queryGenerationType: string) => {\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n\n const resetView = useCallback(async () => {\n if (!shouldVisualize) return;\n if (showGroupColor) {\n await visualizeGroupColors(iModelConnection, groups, hiddenGroupsIds, hilitedElementsQueryCache);\n } else {\n clearOverriddenElements();\n }\n clearEmphasizedElements();\n }, [groups, hiddenGroupsIds, hilitedElementsQueryCache, iModelConnection, showGroupColor, shouldVisualize]);\n\n useEffect(() => {\n if (!shouldVisualize) return;\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(\n evt.imodel,\n evt.level,\n );\n const query = selection.instanceKeys.size > 0\n ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`\n : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return removeListener;\n }, [iModelConnection, queryGenerationType, shouldVisualize]);\n\n useEffect(() => {\n if (!shouldVisualize) return;\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\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, shouldVisualize]);\n\n const clearPresentationSelection = useCallback(() =>\n shouldVisualize && Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n ), [iModelConnection, shouldVisualize]);\n\n useEffect(() => {\n clearPresentationSelection();\n }, [clearPresentationSelection, iModelConnection]);\n\n return { isRendering, setIsRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView };\n\n};\n"]}
|
|
@@ -14,15 +14,13 @@ import "./CalculatedPropertyActionWithVisuals.scss";
|
|
|
14
14
|
import { useMappingClient } from "./context/MappingClientContext";
|
|
15
15
|
import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
|
|
16
16
|
import { useGroupHilitedElementsContext } from "./context/GroupHilitedElementsContext";
|
|
17
|
-
import { useActiveIModelConnection } from "@itwin/appui-react";
|
|
18
17
|
import { getHiliteIdsAndKeysetFromGroup } from "./groupsHelpers";
|
|
19
18
|
import { SharedCalculatedPropertyForms } from "./SharedCalculatedPropertyForms";
|
|
20
19
|
export const CalculatedPropertyActionWithVisuals = ({ mappingId, group, calculatedProperty, onSaveSuccess, onClickCancel, }) => {
|
|
21
20
|
var _a;
|
|
22
|
-
const { getAccessToken, iModelId } = useGroupingMappingApiConfig();
|
|
21
|
+
const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();
|
|
23
22
|
const mappingClient = useMappingClient();
|
|
24
23
|
const [propertyName, setPropertyName] = useState((_a = calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.propertyName) !== null && _a !== void 0 ? _a : "");
|
|
25
|
-
const iModelConnection = useActiveIModelConnection();
|
|
26
24
|
const [type, setType] = useState(calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.type);
|
|
27
25
|
const [bboxDecorator, setBboxDecorator] = useState();
|
|
28
26
|
const [isLoading, setIsLoading] = useState(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalculatedPropertyActionWithVisuals.js","sourceRoot":"","sources":["../../../../src/widget/components/CalculatedPropertyActionWithVisuals.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 { IModelApp } from \"@itwin/core-frontend\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Fieldset,\n MenuItem,\n Small,\n ToggleSwitch,\n} from \"@itwin/itwinui-react\";\nimport React, { useEffect, useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport {\n BboxDimension,\n BboxDimensionsDecorator,\n} from \"../../decorators/BboxDimensionsDecorator\";\nimport useValidator from \"../hooks/useValidator\";\nimport { handleError } from \"./utils\";\nimport { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements } from \"./viewerUtils\";\nimport \"./CalculatedPropertyActionWithVisuals.scss\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CalculatedProperty, CalculatedPropertyType, Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"./groupsHelpers\";\nimport { SharedCalculatedPropertyForms } from \"./SharedCalculatedPropertyForms\";\n\nexport interface CalculatedPropertyActionWithVisualsProps {\n mappingId: string;\n group: Group;\n calculatedProperty?: CalculatedProperty;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const CalculatedPropertyActionWithVisuals = ({\n mappingId,\n group,\n calculatedProperty,\n onSaveSuccess,\n onClickCancel,\n}: CalculatedPropertyActionWithVisualsProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\n calculatedProperty?.propertyName ?? \"\",\n );\n const iModelConnection = useActiveIModelConnection();\n const [type, setType] = useState<CalculatedPropertyType | undefined>(calculatedProperty?.type);\n const [bboxDecorator, setBboxDecorator] = useState<BboxDimensionsDecorator | undefined>();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const [inferredSpatialData, setInferredSpatialData] = useState<Map<BboxDimension, number> | undefined>();\n const [validator, showValidationMessage] = useValidator();\n const [resolvedHiliteIds, setResolvedHiliteIds] = useState<string[]>([]);\n const [colorProperty, setColorProperty] = useState<boolean>(false);\n\n useEffect(() => {\n const decorator = new BboxDimensionsDecorator();\n IModelApp.viewManager.addDecorator(decorator);\n setBboxDecorator(decorator);\n return () => {\n IModelApp.viewManager.dropDecorator(decorator);\n };\n }, []);\n\n useEffect(() => {\n const initialize = async () => {\n if (!iModelConnection) return;\n clearEmphasizedOverriddenElements();\n if (!colorProperty) return;\n setIsLoading(true);\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);\n setResolvedHiliteIds(result.ids);\n setIsLoading(false);\n };\n void initialize();\n }, [iModelConnection, hilitedElementsQueryCache, group, colorProperty]);\n\n useEffect(() => {\n if (!colorProperty || resolvedHiliteIds.length === 0) {\n return;\n }\n visualizeElements([resolvedHiliteIds[0]], \"red\");\n void zoomToElements([resolvedHiliteIds[0]]);\n }, [colorProperty, resolvedHiliteIds]);\n\n useEffect(() => {\n if (!colorProperty || resolvedHiliteIds.length === 0) {\n return;\n }\n const setContext = async () => {\n if (bboxDecorator) {\n await bboxDecorator.setContext(resolvedHiliteIds[0]);\n setInferredSpatialData(bboxDecorator.getInferredSpatialData());\n }\n };\n void setContext();\n }, [bboxDecorator, colorProperty, resolvedHiliteIds]);\n\n useEffect(() => {\n if (bboxDecorator && type && inferredSpatialData) {\n inferredSpatialData.has(BboxDimension[type as keyof typeof BboxDimension]) && colorProperty\n ? bboxDecorator.drawContext(\n BboxDimension[type as keyof typeof BboxDimension],\n )\n : bboxDecorator.clearContext();\n }\n }, [bboxDecorator, colorProperty, inferredSpatialData, type]);\n\n const onSave = async () => {\n if (!validator.allValid() || !type) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n\n const accessToken = await getAccessToken();\n\n calculatedProperty\n ? await mappingClient.updateCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n calculatedProperty.id,\n {\n propertyName,\n type,\n },\n )\n : await mappingClient.createCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n {\n propertyName,\n type,\n },\n );\n onSaveSuccess();\n setPropertyName(\"\");\n setType(undefined);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n const getSpatialData = (value: string) =>\n inferredSpatialData?.has(\n BboxDimension[value as keyof typeof BboxDimension],\n ) && (\n <div>\n {`${inferredSpatialData\n ?.get(BboxDimension[value as keyof typeof BboxDimension])\n ?.toPrecision(4)}m`}\n </div>\n );\n\n return (\n <>\n <div className='gmw-calculated-properties-action-container'>\n <Fieldset legend='Calculated Property Details' className='gmw-details-form'>\n <div className='gmw-field-legend-container'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <ToggleSwitch\n label='Visualize Dimensions'\n labelPosition='left'\n disabled={isLoading}\n checked={colorProperty}\n onChange={() => setColorProperty((b) => !b)}\n ></ToggleSwitch>\n </div>\n <SharedCalculatedPropertyForms\n validator={validator}\n propertyName={propertyName}\n setPropertyName={setPropertyName}\n type={type}\n setType={setType}\n itemRenderer={(option: SelectOption<string>) => (\n <MenuItem>\n <div className='gmw-gr-cp-menu-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n </MenuItem>\n )}\n selectedItemRenderer={(option: SelectOption<string>) => (\n <div className='gmw-select-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n )}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!(type && propertyName)}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"CalculatedPropertyActionWithVisuals.js","sourceRoot":"","sources":["../../../../src/widget/components/CalculatedPropertyActionWithVisuals.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 { IModelApp } from \"@itwin/core-frontend\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Fieldset,\n MenuItem,\n Small,\n ToggleSwitch,\n} from \"@itwin/itwinui-react\";\nimport React, { useEffect, useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport {\n BboxDimension,\n BboxDimensionsDecorator,\n} from \"../../decorators/BboxDimensionsDecorator\";\nimport useValidator from \"../hooks/useValidator\";\nimport { handleError } from \"./utils\";\nimport { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements } from \"./viewerUtils\";\nimport \"./CalculatedPropertyActionWithVisuals.scss\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CalculatedProperty, CalculatedPropertyType, Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"./groupsHelpers\";\nimport { SharedCalculatedPropertyForms } from \"./SharedCalculatedPropertyForms\";\n\nexport interface CalculatedPropertyActionWithVisualsProps {\n mappingId: string;\n group: Group;\n calculatedProperty?: CalculatedProperty;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const CalculatedPropertyActionWithVisuals = ({\n mappingId,\n group,\n calculatedProperty,\n onSaveSuccess,\n onClickCancel,\n}: CalculatedPropertyActionWithVisualsProps) => {\n const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\n calculatedProperty?.propertyName ?? \"\",\n );\n const [type, setType] = useState<CalculatedPropertyType | undefined>(calculatedProperty?.type);\n const [bboxDecorator, setBboxDecorator] = useState<BboxDimensionsDecorator | undefined>();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const [inferredSpatialData, setInferredSpatialData] = useState<Map<BboxDimension, number> | undefined>();\n const [validator, showValidationMessage] = useValidator();\n const [resolvedHiliteIds, setResolvedHiliteIds] = useState<string[]>([]);\n const [colorProperty, setColorProperty] = useState<boolean>(false);\n\n useEffect(() => {\n const decorator = new BboxDimensionsDecorator();\n IModelApp.viewManager.addDecorator(decorator);\n setBboxDecorator(decorator);\n return () => {\n IModelApp.viewManager.dropDecorator(decorator);\n };\n }, []);\n\n useEffect(() => {\n const initialize = async () => {\n if (!iModelConnection) return;\n clearEmphasizedOverriddenElements();\n if (!colorProperty) return;\n setIsLoading(true);\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);\n setResolvedHiliteIds(result.ids);\n setIsLoading(false);\n };\n void initialize();\n }, [iModelConnection, hilitedElementsQueryCache, group, colorProperty]);\n\n useEffect(() => {\n if (!colorProperty || resolvedHiliteIds.length === 0) {\n return;\n }\n visualizeElements([resolvedHiliteIds[0]], \"red\");\n void zoomToElements([resolvedHiliteIds[0]]);\n }, [colorProperty, resolvedHiliteIds]);\n\n useEffect(() => {\n if (!colorProperty || resolvedHiliteIds.length === 0) {\n return;\n }\n const setContext = async () => {\n if (bboxDecorator) {\n await bboxDecorator.setContext(resolvedHiliteIds[0]);\n setInferredSpatialData(bboxDecorator.getInferredSpatialData());\n }\n };\n void setContext();\n }, [bboxDecorator, colorProperty, resolvedHiliteIds]);\n\n useEffect(() => {\n if (bboxDecorator && type && inferredSpatialData) {\n inferredSpatialData.has(BboxDimension[type as keyof typeof BboxDimension]) && colorProperty\n ? bboxDecorator.drawContext(\n BboxDimension[type as keyof typeof BboxDimension],\n )\n : bboxDecorator.clearContext();\n }\n }, [bboxDecorator, colorProperty, inferredSpatialData, type]);\n\n const onSave = async () => {\n if (!validator.allValid() || !type) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n\n const accessToken = await getAccessToken();\n\n calculatedProperty\n ? await mappingClient.updateCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n calculatedProperty.id,\n {\n propertyName,\n type,\n },\n )\n : await mappingClient.createCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n {\n propertyName,\n type,\n },\n );\n onSaveSuccess();\n setPropertyName(\"\");\n setType(undefined);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n const getSpatialData = (value: string) =>\n inferredSpatialData?.has(\n BboxDimension[value as keyof typeof BboxDimension],\n ) && (\n <div>\n {`${inferredSpatialData\n ?.get(BboxDimension[value as keyof typeof BboxDimension])\n ?.toPrecision(4)}m`}\n </div>\n );\n\n return (\n <>\n <div className='gmw-calculated-properties-action-container'>\n <Fieldset legend='Calculated Property Details' className='gmw-details-form'>\n <div className='gmw-field-legend-container'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <ToggleSwitch\n label='Visualize Dimensions'\n labelPosition='left'\n disabled={isLoading}\n checked={colorProperty}\n onChange={() => setColorProperty((b) => !b)}\n ></ToggleSwitch>\n </div>\n <SharedCalculatedPropertyForms\n validator={validator}\n propertyName={propertyName}\n setPropertyName={setPropertyName}\n type={type}\n setType={setType}\n itemRenderer={(option: SelectOption<string>) => (\n <MenuItem>\n <div className='gmw-gr-cp-menu-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n </MenuItem>\n )}\n selectedItemRenderer={(option: SelectOption<string>) => (\n <div className='gmw-select-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n )}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!(type && propertyName)}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
|
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import { Presentation } from "@itwin/presentation-frontend";
|
|
2
|
-
import { useActiveIModelConnection } from "@itwin/appui-react";
|
|
3
1
|
import { Button, toaster, } from "@itwin/itwinui-react";
|
|
4
2
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
5
3
|
import { handleError, LoadingSpinner, } from "./utils";
|
|
6
4
|
import "./GroupAction.scss";
|
|
7
5
|
import useValidator from "../hooks/useValidator";
|
|
8
|
-
import { clearEmphasizedElements, clearOverriddenElements, transparentOverriddenElements, visualizeElementsByQuery, zoomToElements, } from "./viewerUtils";
|
|
9
6
|
import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
|
|
10
7
|
import { useMappingClient } from "./context/MappingClientContext";
|
|
11
8
|
import { useGroupingMappingCustomUI } from "./context/GroupingMappingCustomUIContext";
|
|
12
9
|
import { GroupingMappingCustomUIType } from "./customUI/GroupingMappingCustomUI";
|
|
13
|
-
import { useGroupHilitedElementsContext } from "./context/GroupHilitedElementsContext";
|
|
14
|
-
import { visualizeGroupColors } from "./groupsHelpers";
|
|
15
10
|
import { QueryBuilderStep } from "./QueryBuilderStep";
|
|
16
11
|
import { GroupDetailsStep } from "./GroupDetailsStep";
|
|
17
12
|
import { QueryBuilderActionPanel } from "./QueryBuilderActionPanel";
|
|
18
13
|
import { GroupDetailsActionPanel } from "./GroupDetailsActionPanel";
|
|
14
|
+
import { useVisualization } from "../hooks/useVisualization";
|
|
19
15
|
const defaultDisplayStrings = {
|
|
20
16
|
groupDetails: "Group Details",
|
|
21
17
|
groupBy: "Group By",
|
|
@@ -27,9 +23,10 @@ var GroupActionStep;
|
|
|
27
23
|
})(GroupActionStep || (GroupActionStep = {}));
|
|
28
24
|
export const GroupAction = (props) => {
|
|
29
25
|
var _a, _b, _c, _d;
|
|
30
|
-
const iModelConnection =
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();
|
|
27
|
+
if (!iModelConnection) {
|
|
28
|
+
throw new Error("This component requires an active iModelConnection.");
|
|
29
|
+
}
|
|
33
30
|
const mappingClient = useMappingClient();
|
|
34
31
|
const groupUIs = useGroupingMappingCustomUI().customUIs
|
|
35
32
|
.filter((p) => p.type === GroupingMappingCustomUIType.Grouping);
|
|
@@ -38,66 +35,51 @@ export const GroupAction = (props) => {
|
|
|
38
35
|
description: (_d = (_c = props.group) === null || _c === void 0 ? void 0 : _c.description) !== null && _d !== void 0 ? _d : "",
|
|
39
36
|
});
|
|
40
37
|
const [query, setQuery] = useState("");
|
|
41
|
-
const [
|
|
38
|
+
const [queryRowCount, setQueryRowCount] = useState(0);
|
|
42
39
|
const [validator, setShowValidationMessage] = useValidator();
|
|
43
40
|
const [isLoading, setIsLoading] = useState(false);
|
|
44
|
-
const [isRendering, setIsRendering] = useState(false);
|
|
45
41
|
const [queryGenerationType, setQueryGenerationType] = useState(props.queryGenerationType);
|
|
42
|
+
const { isRendering, setIsRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView, } = useVisualization(props.shouldVisualize, iModelConnection, query, queryGenerationType);
|
|
46
43
|
const isUpdating = isLoading || isRendering;
|
|
47
44
|
const [currentStep, setCurrentStep] = React.useState(GroupActionStep.QueryBuilder);
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
if (!iModelConnection) {
|
|
50
|
-
throw new Error("This component requires an active iModelConnection.");
|
|
51
|
-
}
|
|
52
|
-
}, [iModelConnection]);
|
|
53
45
|
const displayStrings = React.useMemo(() => ({ ...defaultDisplayStrings, ...props.displayStrings }), [props.displayStrings]);
|
|
54
46
|
useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);
|
|
55
|
-
const resetView = useCallback(async () => {
|
|
56
|
-
if (showGroupColor) {
|
|
57
|
-
await visualizeGroupColors(iModelConnection, groups, hiddenGroupsIds, hilitedElementsQueryCache);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
clearOverriddenElements();
|
|
61
|
-
}
|
|
62
|
-
clearEmphasizedElements();
|
|
63
|
-
}, [groups, hiddenGroupsIds, hilitedElementsQueryCache, iModelConnection, showGroupColor]);
|
|
64
47
|
useEffect(() => {
|
|
65
|
-
const
|
|
66
|
-
if (queryGenerationType === "Selection") {
|
|
67
|
-
const selection = selectionProvider.getSelection(evt.imodel, evt.level);
|
|
68
|
-
const query = selection.instanceKeys.size > 0
|
|
69
|
-
? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`
|
|
70
|
-
: "";
|
|
71
|
-
setSimpleSelectionQuery(query);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
return () => {
|
|
75
|
-
removeListener();
|
|
76
|
-
};
|
|
77
|
-
}, [iModelConnection, queryGenerationType]);
|
|
78
|
-
useEffect(() => {
|
|
79
|
-
const reemphasize = async () => {
|
|
48
|
+
const fetchQueryRowCount = async () => {
|
|
80
49
|
try {
|
|
81
50
|
if (!query || query === "") {
|
|
51
|
+
setQueryRowCount(0);
|
|
82
52
|
return;
|
|
83
53
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
await zoomToElements(resolvedHiliteIds);
|
|
54
|
+
setIsLoading(true);
|
|
55
|
+
const result = await iModelConnection.queryRowCount(query);
|
|
56
|
+
setQueryRowCount(result);
|
|
88
57
|
}
|
|
89
58
|
catch {
|
|
90
|
-
toaster.negative("
|
|
59
|
+
toaster.negative("Query failed to resolve.");
|
|
91
60
|
}
|
|
92
61
|
finally {
|
|
93
|
-
|
|
62
|
+
setIsLoading(false);
|
|
94
63
|
}
|
|
95
64
|
};
|
|
96
|
-
void
|
|
97
|
-
}, [iModelConnection, query]);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
65
|
+
void fetchQueryRowCount();
|
|
66
|
+
}, [iModelConnection, query, setIsRendering]);
|
|
67
|
+
const isBlockingActions = !(details.groupName &&
|
|
68
|
+
(query || simpleSelectionQuery) &&
|
|
69
|
+
!isRendering &&
|
|
70
|
+
!isLoading);
|
|
71
|
+
const getOptions = useMemo(() => groupUIs.map((ui) => ({
|
|
72
|
+
label: ui.displayLabel,
|
|
73
|
+
value: ui.name,
|
|
74
|
+
icon: ui.icon,
|
|
75
|
+
})), [groupUIs]);
|
|
76
|
+
const onChange = useCallback(async (value) => {
|
|
77
|
+
setQueryGenerationType(value);
|
|
78
|
+
clearPresentationSelection();
|
|
79
|
+
setQuery("");
|
|
80
|
+
setSimpleSelectionQuery("");
|
|
81
|
+
await resetView();
|
|
82
|
+
}, [clearPresentationSelection, resetView, setSimpleSelectionQuery]);
|
|
101
83
|
const save = useCallback(async () => {
|
|
102
84
|
var _a, _b, _c, _d, _e;
|
|
103
85
|
if (!validator.allValid()) {
|
|
@@ -114,7 +96,7 @@ export const GroupAction = (props) => {
|
|
|
114
96
|
...details,
|
|
115
97
|
query: currentQuery,
|
|
116
98
|
});
|
|
117
|
-
|
|
99
|
+
clearPresentationSelection();
|
|
118
100
|
setDetails({
|
|
119
101
|
groupName: (_c = (_b = props.group) === null || _b === void 0 ? void 0 : _b.groupName) !== null && _c !== void 0 ? _c : "",
|
|
120
102
|
description: (_e = (_d = props.group) === null || _d === void 0 ? void 0 : _d.description) !== null && _e !== void 0 ? _e : "",
|
|
@@ -129,36 +111,20 @@ export const GroupAction = (props) => {
|
|
|
129
111
|
finally {
|
|
130
112
|
setIsLoading(false);
|
|
131
113
|
}
|
|
132
|
-
}, [validator, setShowValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details,
|
|
133
|
-
const isBlockingActions = !(details.groupName &&
|
|
134
|
-
(query || simpleSelectionQuery) &&
|
|
135
|
-
!isRendering &&
|
|
136
|
-
!isLoading);
|
|
137
|
-
const getOptions = useMemo(() => groupUIs.map((ui) => ({
|
|
138
|
-
label: ui.displayLabel,
|
|
139
|
-
value: ui.name,
|
|
140
|
-
icon: ui.icon,
|
|
141
|
-
})), [groupUIs]);
|
|
142
|
-
const onChange = useCallback(async (value) => {
|
|
143
|
-
setQueryGenerationType(value);
|
|
144
|
-
Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
|
|
145
|
-
setQuery("");
|
|
146
|
-
setSimpleSelectionQuery("");
|
|
147
|
-
await resetView();
|
|
148
|
-
}, [iModelConnection, resetView]);
|
|
114
|
+
}, [validator, setShowValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, clearPresentationSelection]);
|
|
149
115
|
const isQueryBuilderStep = currentStep === GroupActionStep.QueryBuilder;
|
|
150
116
|
const isGroupDetailsStep = currentStep === GroupActionStep.GroupDetails;
|
|
151
117
|
return (React.createElement(React.Fragment, null,
|
|
152
118
|
React.createElement("div", { className: "gmw-group-add-modify-container" },
|
|
153
|
-
React.createElement(QueryBuilderStep, { isHidden: !isQueryBuilderStep, queryGenerationType: queryGenerationType, groupUIs: groupUIs, isUpdating: isUpdating, resetView: resetView, setQuery: setQuery, onChange: onChange, getOptions: getOptions, displayStrings: { ...displayStrings }, group: props.group }),
|
|
119
|
+
React.createElement(QueryBuilderStep, { queryRowCount: queryRowCount, isHidden: !isQueryBuilderStep, queryGenerationType: queryGenerationType, groupUIs: groupUIs, isUpdating: isUpdating, resetView: resetView, setQuery: setQuery, onChange: onChange, getOptions: getOptions, displayStrings: { ...displayStrings }, group: props.group }),
|
|
154
120
|
isGroupDetailsStep && React.createElement(GroupDetailsStep, { details: details, setDetails: setDetails, validator: validator, displayStrings: { ...displayStrings } })),
|
|
155
121
|
React.createElement("div", { className: 'gmw-action-panel' },
|
|
156
122
|
isLoading &&
|
|
157
123
|
React.createElement(LoadingSpinner, null),
|
|
158
124
|
isQueryBuilderStep && (React.createElement(QueryBuilderActionPanel, { onClickNext: () => setCurrentStep(GroupActionStep.GroupDetails) })),
|
|
159
125
|
isGroupDetailsStep && (React.createElement(GroupDetailsActionPanel, { isSaveDisabled: isBlockingActions, onClickSave: save, onClickBack: () => setCurrentStep(GroupActionStep.QueryBuilder) })),
|
|
160
|
-
props.onClickCancel && React.createElement(Button, { type: 'button', id: 'cancel', onClick:
|
|
161
|
-
|
|
126
|
+
props.onClickCancel && React.createElement(Button, { type: 'button', id: 'cancel', onClick: () => {
|
|
127
|
+
clearPresentationSelection();
|
|
162
128
|
props.onClickCancel && props.onClickCancel();
|
|
163
129
|
} }, "Cancel"))));
|
|
164
130
|
};
|
|
@@ -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 { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Button,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n handleError,\n LoadingSpinner,\n} from \"./utils\";\nimport \"./GroupAction.scss\";\nimport useValidator from \"../hooks/useValidator\";\nimport {\n clearEmphasizedElements,\n clearOverriddenElements,\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"./groupsHelpers\";\nimport { QueryBuilderStep } from \"./QueryBuilderStep\";\nimport { GroupDetailsStep } from \"./GroupDetailsStep\";\nimport { QueryBuilderActionPanel } from \"./QueryBuilderActionPanel\";\nimport { GroupDetailsActionPanel } from \"./GroupDetailsActionPanel\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nenum GroupActionStep {\n QueryBuilder,\n GroupDetails,\n}\n\nexport interface GroupActionProps {\n mappingId: string;\n group?: Group;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const GroupAction = (props: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n const [validator, setShowValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [queryGenerationType, setQueryGenerationType] = useState(\n props.queryGenerationType,\n );\n const isUpdating = isLoading || isRendering;\n const [currentStep, setCurrentStep] = React.useState(GroupActionStep.QueryBuilder);\n\n useEffect(() => {\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n }, [iModelConnection]);\n\n const displayStrings = React.useMemo(\n () => ({ ...defaultDisplayStrings, ...props.displayStrings }),\n [props.displayStrings]\n );\n\n useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);\n\n const resetView = useCallback(async () => {\n if (showGroupColor) {\n await visualizeGroupColors(iModelConnection, groups, hiddenGroupsIds, hilitedElementsQueryCache);\n } else {\n clearOverriddenElements();\n }\n clearEmphasizedElements();\n }, [groups, hiddenGroupsIds, hilitedElementsQueryCache, iModelConnection, showGroupColor]);\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(\n evt.imodel,\n evt.level,\n );\n const query = selection.instanceKeys.size > 0\n ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`\n : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection, queryGenerationType]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n 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]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n setShowValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n props.group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n props.mappingId,\n props.group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(\n accessToken,\n iModelId,\n props.mappingId,\n {\n ...details,\n query: currentQuery,\n },\n );\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n setCurrentStep(GroupActionStep.QueryBuilder);\n setShowValidationMessage(false);\n props.onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [validator, setShowValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, iModelConnection]);\n\n const isBlockingActions = !(\n details.groupName &&\n (query || simpleSelectionQuery) &&\n !isRendering &&\n !isLoading\n );\n\n const getOptions = useMemo(\n (): SelectOption<string>[] =>\n groupUIs.map((ui) => ({\n label: ui.displayLabel,\n value: ui.name,\n icon: ui.icon,\n })),\n [groupUIs]\n );\n\n const onChange = useCallback(\n async (value: string) => {\n setQueryGenerationType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n },\n [iModelConnection, resetView]\n );\n\n const isQueryBuilderStep = currentStep === GroupActionStep.QueryBuilder;\n const isGroupDetailsStep = currentStep === GroupActionStep.GroupDetails;\n return (\n <>\n <div className=\"gmw-group-add-modify-container\">\n <QueryBuilderStep\n isHidden={!isQueryBuilderStep}\n queryGenerationType={queryGenerationType}\n groupUIs={groupUIs}\n isUpdating={isUpdating}\n resetView={resetView}\n setQuery={setQuery}\n onChange={onChange}\n getOptions={getOptions}\n displayStrings={{ ...displayStrings }}\n group={props.group}\n />\n {isGroupDetailsStep && <GroupDetailsStep\n details={details}\n setDetails={setDetails}\n validator={validator}\n displayStrings={{ ...displayStrings }}\n />}\n </div>\n <div className='gmw-action-panel'>\n {isLoading &&\n <LoadingSpinner />\n }\n {isQueryBuilderStep && (\n <QueryBuilderActionPanel onClickNext={() => setCurrentStep(GroupActionStep.GroupDetails)} />\n )}\n {isGroupDetailsStep && (\n <GroupDetailsActionPanel\n isSaveDisabled={isBlockingActions}\n onClickSave={save}\n onClickBack={() => setCurrentStep(GroupActionStep.QueryBuilder)}\n />\n )}\n {props.onClickCancel && <Button\n type='button'\n id='cancel'\n onClick={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n props.onClickCancel && props.onClickCancel();\n }}\n >\n Cancel\n </Button>}\n </div>\n </>\n );\n};\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 {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Button,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n handleError,\n LoadingSpinner,\n} from \"./utils\";\nimport \"./GroupAction.scss\";\nimport useValidator from \"../hooks/useValidator\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { QueryBuilderStep } from \"./QueryBuilderStep\";\nimport { GroupDetailsStep } from \"./GroupDetailsStep\";\nimport { QueryBuilderActionPanel } from \"./QueryBuilderActionPanel\";\nimport { GroupDetailsActionPanel } from \"./GroupDetailsActionPanel\";\nimport { useVisualization } from \"../hooks/useVisualization\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nenum GroupActionStep {\n QueryBuilder,\n GroupDetails,\n}\n\nexport interface GroupActionProps {\n mappingId: string;\n shouldVisualize: boolean;\n group?: Group;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const GroupAction = (props: GroupActionProps) => {\n const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [queryRowCount, setQueryRowCount] = useState<number>(0);\n\n const [validator, setShowValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const [queryGenerationType, setQueryGenerationType] = useState(\n props.queryGenerationType,\n );\n const {\n isRendering,\n setIsRendering,\n simpleSelectionQuery,\n setSimpleSelectionQuery,\n clearPresentationSelection,\n resetView,\n } = useVisualization(\n props.shouldVisualize,\n iModelConnection,\n query,\n queryGenerationType\n );\n const isUpdating = isLoading || isRendering;\n const [currentStep, setCurrentStep] = React.useState(GroupActionStep.QueryBuilder);\n\n const displayStrings = React.useMemo(\n () => ({ ...defaultDisplayStrings, ...props.displayStrings }),\n [props.displayStrings]\n );\n\n useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);\n\n useEffect(() => {\n const fetchQueryRowCount = async () => {\n try {\n if (!query || query === \"\") {\n setQueryRowCount(0);\n return;\n }\n setIsLoading(true);\n const result = await iModelConnection.queryRowCount(query);\n setQueryRowCount(result);\n } catch {\n toaster.negative(\"Query failed to resolve.\");\n } finally {\n setIsLoading(false);\n }\n };\n\n void fetchQueryRowCount();\n }, [iModelConnection, query, setIsRendering]);\n\n const isBlockingActions = !(\n details.groupName &&\n (query || simpleSelectionQuery) &&\n !isRendering &&\n !isLoading\n );\n\n const getOptions = useMemo(\n (): SelectOption<string>[] =>\n groupUIs.map((ui) => ({\n label: ui.displayLabel,\n value: ui.name,\n icon: ui.icon,\n })),\n [groupUIs]\n );\n\n const onChange = useCallback(\n async (value: string) => {\n setQueryGenerationType(value);\n clearPresentationSelection();\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n },\n [clearPresentationSelection, resetView, setSimpleSelectionQuery]\n );\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n setShowValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n props.group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n props.mappingId,\n props.group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(\n accessToken,\n iModelId,\n props.mappingId,\n {\n ...details,\n query: currentQuery,\n },\n );\n clearPresentationSelection();\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n setCurrentStep(GroupActionStep.QueryBuilder);\n setShowValidationMessage(false);\n props.onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [validator, setShowValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, clearPresentationSelection]);\n\n const isQueryBuilderStep = currentStep === GroupActionStep.QueryBuilder;\n const isGroupDetailsStep = currentStep === GroupActionStep.GroupDetails;\n return (\n <>\n <div className=\"gmw-group-add-modify-container\">\n <QueryBuilderStep\n queryRowCount={queryRowCount}\n isHidden={!isQueryBuilderStep}\n queryGenerationType={queryGenerationType}\n groupUIs={groupUIs}\n isUpdating={isUpdating}\n resetView={resetView}\n setQuery={setQuery}\n onChange={onChange}\n getOptions={getOptions}\n displayStrings={{ ...displayStrings }}\n group={props.group}\n />\n {isGroupDetailsStep && <GroupDetailsStep\n details={details}\n setDetails={setDetails}\n validator={validator}\n displayStrings={{ ...displayStrings }}\n />}\n </div>\n <div className='gmw-action-panel'>\n {isLoading &&\n <LoadingSpinner />\n }\n {isQueryBuilderStep && (\n <QueryBuilderActionPanel onClickNext={() => setCurrentStep(GroupActionStep.GroupDetails)} />\n )}\n {isGroupDetailsStep && (\n <GroupDetailsActionPanel\n isSaveDisabled={isBlockingActions}\n onClickSave={save}\n onClickBack={() => setCurrentStep(GroupActionStep.QueryBuilder)}\n />\n )}\n {props.onClickCancel && <Button\n type='button'\n id='cancel'\n onClick={() => {\n clearPresentationSelection();\n props.onClickCancel && props.onClickCancel();\n }}\n >\n Cancel\n </Button>}\n </div>\n </>\n );\n};\n"]}
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import React, { useEffect, useState } from "react";
|
|
6
|
-
import { useActiveIModelConnection } from "@itwin/appui-react";
|
|
7
6
|
import { toaster, ToggleSwitch } from "@itwin/itwinui-react";
|
|
8
7
|
import { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements } from "./viewerUtils";
|
|
9
8
|
import { getHiliteIdsAndKeysetFromGroup } from "./groupsHelpers";
|
|
10
9
|
import { Presentation } from "@itwin/presentation-frontend";
|
|
11
10
|
import { useGroupHilitedElementsContext } from "./context/GroupHilitedElementsContext";
|
|
12
11
|
import { usePropertiesContext } from "./context/PropertiesContext";
|
|
12
|
+
import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
|
|
13
13
|
export const GroupColorToggle = ({ color, group, ...rest }) => {
|
|
14
14
|
const [isLoading, setIsLoading] = useState(false);
|
|
15
|
-
const iModelConnection =
|
|
15
|
+
const { iModelConnection } = useGroupingMappingApiConfig();
|
|
16
16
|
if (!iModelConnection) {
|
|
17
17
|
throw new Error("This component requires an active iModelConnection.");
|
|
18
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupColorToggle.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupColorToggle.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupColorToggle.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupColorToggle.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,iCAAiC,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACrG,OAAO,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAOjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,GAAG,IAAI,EACe,EAAE,EAAE;IAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC3D,MAAM,EAAE,gBAAgB,EAAE,GAAG,2BAA2B,EAAE,CAAC;IAC3D,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;IACD,MAAM,EAAE,yBAAyB,EAAE,GAAG,8BAA8B,EAAE,CAAC;IACvE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YAC3B,IAAI;gBACF,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,iCAAiC,EAAE,CAAC;gBACpC,IAAI,cAAc,EAAE;oBAClB,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAAC,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;oBACxG,YAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;oBACF,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACrC,MAAM,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBAClC;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC;gBAC1D,+BAA+B;gBAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACtB;oBAAS;gBACR,YAAY,CAAC,KAAK,CAAC,CAAC;aACrB;QACH,CAAC,CAAC;QACF,KAAK,SAAS,EAAE,CAAC;IACnB,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,yBAAyB,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9G,OAAO,CACL,oBAAC,YAAY,IACX,KAAK,EAAC,aAAa,EACnB,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KACxC,IAAI,GACM,CACjB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React, { useEffect, useState } from \"react\";\nimport type { ToggleSwitchProps } from \"@itwin/itwinui-react\";\nimport { toaster, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements } from \"./viewerUtils\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"./groupsHelpers\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { usePropertiesContext } from \"./context/PropertiesContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nexport interface GroupColorToggleProps extends Partial<ToggleSwitchProps> {\n color: string;\n group: Group;\n}\n\nexport const GroupColorToggle = ({\n color,\n group,\n ...rest\n}: GroupColorToggleProps) => {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const { iModelConnection } = useGroupingMappingApiConfig();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const { showGroupColor, setShowGroupColor } = usePropertiesContext();\n\n useEffect(() => {\n const visualize = async () => {\n try {\n setIsLoading(true);\n clearEmphasizedOverriddenElements();\n if (showGroupColor) {\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n visualizeElements(result.ids, color);\n await zoomToElements(result.ids);\n }\n } catch (error) {\n toaster.negative(\"There was an error visualizing group.\");\n /* eslint-disable no-console */\n console.error(error);\n } finally {\n setIsLoading(false);\n }\n };\n void visualize();\n }, [iModelConnection, group.query, group.groupName, group, hilitedElementsQueryCache, showGroupColor, color]);\n\n return (\n <ToggleSwitch\n label=\"Color Group\"\n disabled={isLoading}\n checked={showGroupColor}\n onChange={() => setShowGroupColor((b) => !b)}\n {...rest}\n ></ToggleSwitch>\n );\n};\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type { Group } from "@itwin/insights-client";
|
|
3
3
|
import type { ContextCustomUI, GroupingCustomUI } from "./customUI/GroupingMappingCustomUI";
|
|
4
4
|
import type { GroupingProps } from "./Grouping";
|
|
5
|
-
export interface GroupItemProps extends GroupingProps {
|
|
5
|
+
export interface GroupItemProps extends Omit<GroupingProps, "onClickAddGroup"> {
|
|
6
6
|
group: Group;
|
|
7
7
|
groupUIs: GroupingCustomUI[];
|
|
8
8
|
contextUIs: ContextCustomUI[];
|
|
@@ -3,10 +3,10 @@ import { HorizontalTile } from "./HorizontalTile";
|
|
|
3
3
|
import { GroupMenuActions } from "./GroupMenuActions";
|
|
4
4
|
export const GroupItem = ({ onClickGroupTitle, disableActions, group, ...rest }) => {
|
|
5
5
|
const onTitleClick = () => {
|
|
6
|
-
if (onClickGroupTitle
|
|
6
|
+
if (onClickGroupTitle) {
|
|
7
7
|
onClickGroupTitle(group);
|
|
8
8
|
}
|
|
9
9
|
};
|
|
10
|
-
return (React.createElement(HorizontalTile, { title: group.groupName, subText: group.description, actionGroup: React.createElement(GroupMenuActions, { group: group,
|
|
10
|
+
return (React.createElement(HorizontalTile, { title: group.groupName, subText: group.description, actionGroup: React.createElement(GroupMenuActions, { group: group, disableActions: disableActions, ...rest }), onClickTitle: onClickGroupTitle && !disableActions ? onTitleClick : undefined }));
|
|
11
11
|
};
|
|
12
12
|
//# sourceMappingURL=GroupItem.js.map
|