@itwin/grouping-mapping-widget 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/test/GroupPropertyUtils.test.js +61 -1
- package/lib/cjs/test/GroupPropertyUtils.test.js.map +1 -1
- package/lib/cjs/test/GroupingMappingCustomUI.test.js +44 -53
- package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
- package/lib/cjs/test/QueryBuilder.test.js +30 -2
- package/lib/cjs/test/QueryBuilder.test.js.map +1 -1
- package/lib/cjs/test/QueryBuilder.testdata.js +471 -7
- package/lib/cjs/test/QueryBuilder.testdata.js.map +1 -1
- package/lib/cjs/test/QueryBuilderTestData.d.ts +3 -1
- package/lib/cjs/test/QueryBuilderTestData.js.map +1 -1
- package/lib/cjs/widget/components/GroupAction.js +2 -21
- package/lib/cjs/widget/components/GroupAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupPropertyUtils.js +2 -1
- package/lib/cjs/widget/components/GroupPropertyUtils.js.map +1 -1
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.d.ts +3 -2
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.js +38 -45
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.js.map +1 -1
- package/lib/cjs/widget/components/Grouping.js +1 -1
- package/lib/cjs/widget/components/Grouping.js.map +1 -1
- package/lib/cjs/widget/components/Grouping.scss +1 -1
- package/lib/cjs/widget/components/QueryBuilder.d.ts +35 -21
- package/lib/cjs/widget/components/QueryBuilder.js +153 -181
- package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
- package/lib/cjs/widget/components/context/PropertyGridWrapperContext.d.ts +15 -0
- package/lib/cjs/widget/components/context/{GroupQueryBuilderContext.js → PropertyGridWrapperContext.js} +13 -9
- package/lib/cjs/widget/components/context/PropertyGridWrapperContext.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/PropertyGrid.d.ts +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGrid.js +2 -2
- package/lib/cjs/widget/components/property-grid/PropertyGrid.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.d.ts +10 -4
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +18 -8
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyView.d.ts +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyView.js +46 -60
- package/lib/cjs/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/cjs/widget/components/viewerUtils.js +1 -3
- package/lib/cjs/widget/components/viewerUtils.js.map +1 -1
- package/lib/esm/test/GroupPropertyUtils.test.js +61 -1
- package/lib/esm/test/GroupPropertyUtils.test.js.map +1 -1
- package/lib/esm/test/GroupingMappingCustomUI.test.js +45 -54
- package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
- package/lib/esm/test/QueryBuilder.test.js +31 -3
- package/lib/esm/test/QueryBuilder.test.js.map +1 -1
- package/lib/esm/test/QueryBuilder.testdata.js +471 -7
- package/lib/esm/test/QueryBuilder.testdata.js.map +1 -1
- package/lib/esm/test/QueryBuilderTestData.d.ts +3 -1
- package/lib/esm/test/QueryBuilderTestData.js.map +1 -1
- package/lib/esm/widget/components/GroupAction.js +2 -21
- package/lib/esm/widget/components/GroupAction.js.map +1 -1
- package/lib/esm/widget/components/GroupPropertyUtils.js +2 -1
- package/lib/esm/widget/components/GroupPropertyUtils.js.map +1 -1
- package/lib/esm/widget/components/GroupQueryBuilderContainer.d.ts +3 -2
- package/lib/esm/widget/components/GroupQueryBuilderContainer.js +34 -25
- package/lib/esm/widget/components/GroupQueryBuilderContainer.js.map +1 -1
- package/lib/esm/widget/components/Grouping.js +1 -1
- package/lib/esm/widget/components/Grouping.js.map +1 -1
- package/lib/esm/widget/components/Grouping.scss +1 -1
- package/lib/esm/widget/components/QueryBuilder.d.ts +35 -21
- package/lib/esm/widget/components/QueryBuilder.js +153 -181
- package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
- package/lib/esm/widget/components/context/PropertyGridWrapperContext.d.ts +15 -0
- package/lib/esm/widget/components/context/{GroupQueryBuilderContext.js → PropertyGridWrapperContext.js} +11 -8
- package/lib/esm/widget/components/context/PropertyGridWrapperContext.js.map +1 -0
- package/lib/esm/widget/components/property-grid/PropertyGrid.d.ts +1 -1
- package/lib/esm/widget/components/property-grid/PropertyGrid.js +2 -2
- package/lib/esm/widget/components/property-grid/PropertyGrid.js.map +1 -1
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.d.ts +10 -4
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +16 -6
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
- package/lib/esm/widget/components/property-grid/PropertyView.d.ts +1 -1
- package/lib/esm/widget/components/property-grid/PropertyView.js +32 -30
- package/lib/esm/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/esm/widget/components/viewerUtils.js +1 -3
- package/lib/esm/widget/components/viewerUtils.js.map +1 -1
- package/package.json +2 -2
- package/lib/cjs/api/GroupQueryBuilderApi.d.ts +0 -15
- package/lib/cjs/api/GroupQueryBuilderApi.js +0 -27
- package/lib/cjs/api/GroupQueryBuilderApi.js.map +0 -1
- package/lib/cjs/widget/components/context/GroupQueryBuilderContext.d.ts +0 -16
- package/lib/cjs/widget/components/context/GroupQueryBuilderContext.js.map +0 -1
- package/lib/esm/api/GroupQueryBuilderApi.d.ts +0 -15
- package/lib/esm/api/GroupQueryBuilderApi.js +0 -23
- package/lib/esm/api/GroupQueryBuilderApi.js.map +0 -1
- package/lib/esm/widget/components/context/GroupQueryBuilderContext.d.ts +0 -16
- package/lib/esm/widget/components/context/GroupQueryBuilderContext.js.map +0 -1
|
@@ -2,44 +2,53 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import
|
|
5
|
+
import { useEffect, useState } from "react";
|
|
6
6
|
import { useActiveIModelConnection } from "@itwin/appui-react";
|
|
7
|
+
import { Presentation } from "@itwin/presentation-frontend";
|
|
7
8
|
import { KeySet } from "@itwin/presentation-common";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { GroupQueryBuilderContext } from "./context/GroupQueryBuilderContext";
|
|
9
|
+
import { PropertyGridWrapper } from "./property-grid/PropertyGridWrapper";
|
|
10
|
+
import { PropertyGridWrapperContext } from "./context/PropertyGridWrapperContext";
|
|
11
11
|
import { Button } from "@itwin/itwinui-react";
|
|
12
12
|
import "./GroupQueryBuilder.scss";
|
|
13
|
-
|
|
13
|
+
import React from "react";
|
|
14
|
+
export const GroupQueryBuilderContainer = ({ isUpdating, resetView, updateQuery }) => {
|
|
14
15
|
const iModelConnection = useActiveIModelConnection();
|
|
15
|
-
const
|
|
16
|
-
const [
|
|
17
|
-
const [
|
|
16
|
+
const [keysState, setKeysState] = useState(new KeySet());
|
|
17
|
+
const [selected, setSelected] = useState(false);
|
|
18
|
+
const [queryBuilder, setQueryBuilder] = useState();
|
|
19
|
+
const [currentPropertyList, setCurrentPropertyList] = useState([]);
|
|
18
20
|
useEffect(() => {
|
|
19
21
|
const _onSelectionChanged = async (evt, selectionProvider) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
setSelected(true);
|
|
23
|
+
setCurrentPropertyList([]);
|
|
22
24
|
const selection = selectionProvider.getSelection(evt.imodel, evt.level);
|
|
23
25
|
const keys = new KeySet(selection);
|
|
24
26
|
setKeysState(keys);
|
|
25
27
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
/* eslint-disable no-console */
|
|
39
|
-
console.error(e));
|
|
28
|
+
return iModelConnection
|
|
29
|
+
? Presentation.selection.selectionChange.addListener(_onSelectionChanged) :
|
|
30
|
+
() => { };
|
|
31
|
+
}, [iModelConnection]);
|
|
32
|
+
const _onClickResetButton = async () => {
|
|
33
|
+
updateQuery("");
|
|
34
|
+
queryBuilder === null || queryBuilder === void 0 ? void 0 : queryBuilder.resetQuery();
|
|
35
|
+
setCurrentPropertyList([]);
|
|
36
|
+
if (resetView)
|
|
37
|
+
await resetView().catch((e) =>
|
|
38
|
+
/* eslint-disable no-console */
|
|
39
|
+
console.error(e));
|
|
40
40
|
};
|
|
41
41
|
return (React.createElement("div", { className: "gmw-find-similar-container" },
|
|
42
|
-
React.createElement(
|
|
42
|
+
React.createElement(PropertyGridWrapperContext.Provider, { value: {
|
|
43
|
+
currentPropertyList,
|
|
44
|
+
setCurrentPropertyList,
|
|
45
|
+
queryBuilder,
|
|
46
|
+
setQueryBuilder,
|
|
47
|
+
resetView: resetView !== null && resetView !== void 0 ? resetView : (async () => { }),
|
|
48
|
+
setQuery: updateQuery,
|
|
49
|
+
isUpdating: isUpdating !== null && isUpdating !== void 0 ? isUpdating : false,
|
|
50
|
+
} },
|
|
51
|
+
React.createElement(PropertyGridWrapper, { keys: keysState, imodel: iModelConnection })),
|
|
43
52
|
selected && (React.createElement("div", { className: "gmw-button-container" },
|
|
44
53
|
React.createElement(Button, { styleType: "default", size: "small", className: "gmw-reset-button", onClick: _onClickResetButton }, "Reset")))));
|
|
45
54
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupQueryBuilderContainer.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupQueryBuilderContainer.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,
|
|
1
|
+
{"version":3,"file":"GroupQueryBuilderContainer.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupQueryBuilderContainer.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 { useEffect, useState } from \"react\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport type { ISelectionProvider, SelectionChangeEventArgs } from \"@itwin/presentation-frontend\";\nimport { KeySet } from \"@itwin/presentation-common\";\nimport { PropertyGridWrapper } from \"./property-grid/PropertyGridWrapper\";\nimport { PropertyGridWrapperContext } from \"./context/PropertyGridWrapperContext\";\nimport { Button } from \"@itwin/itwinui-react\";\nimport \"./GroupQueryBuilder.scss\";\nimport type { QueryBuilder } from \"./QueryBuilder\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport type { GroupingCustomUIProps } from \"./customUI/GroupingMappingCustomUI\";\nimport React from \"react\";\n\nexport const GroupQueryBuilderContainer = ({ isUpdating, resetView, updateQuery }: GroupingCustomUIProps) => {\n const iModelConnection = useActiveIModelConnection();\n\n const [keysState, setKeysState] = useState<KeySet>(new KeySet());\n const [selected, setSelected] = useState<boolean>(false);\n\n const [queryBuilder, setQueryBuilder] = useState<QueryBuilder | undefined>();\n const [currentPropertyList, setCurrentPropertyList] = useState<PropertyRecord[]>([]);\n\n useEffect(() => {\n const _onSelectionChanged = async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider\n ) => {\n setSelected(true);\n setCurrentPropertyList([]);\n\n const selection = selectionProvider.getSelection(evt.imodel, evt.level);\n const keys = new KeySet(selection);\n setKeysState(keys);\n };\n\n return iModelConnection\n ? Presentation.selection.selectionChange.addListener(_onSelectionChanged) :\n () => { };\n }, [iModelConnection]);\n\n const _onClickResetButton = async () => {\n updateQuery(\"\");\n queryBuilder?.resetQuery();\n setCurrentPropertyList([]);\n if (resetView)\n await resetView().catch((e) =>\n /* eslint-disable no-console */\n console.error(e)\n );\n };\n\n return (\n <div className=\"gmw-find-similar-container\">\n <PropertyGridWrapperContext.Provider\n value={{\n currentPropertyList,\n setCurrentPropertyList,\n queryBuilder,\n setQueryBuilder,\n resetView: resetView ?? (async () => { }),\n setQuery: updateQuery,\n isUpdating: isUpdating ?? false,\n }}>\n <PropertyGridWrapper keys={keysState} imodel={iModelConnection} />\n </PropertyGridWrapperContext.Provider>\n {\n selected && (\n <div className=\"gmw-button-container\">\n <Button\n styleType=\"default\"\n size=\"small\"\n className=\"gmw-reset-button\"\n onClick={_onClickResetButton}\n >\n Reset\n </Button>\n </div>\n )\n }\n </div >\n );\n};\n"]}
|
|
@@ -84,7 +84,7 @@ export const Groupings = ({ mapping, goBack }) => {
|
|
|
84
84
|
const [selectedContextCustomUI, setSelectedContextCustomUI] = useState(undefined);
|
|
85
85
|
useEffect(() => {
|
|
86
86
|
void fetchGroups(setGroups, iModelId, mapping.id, setIsLoading, getAccessToken, mappingClient);
|
|
87
|
-
}, [getAccessToken, mappingClient, iModelId, mapping.id
|
|
87
|
+
}, [getAccessToken, mappingClient, iModelId, mapping.id]);
|
|
88
88
|
const getGroupColor = function (index) {
|
|
89
89
|
return `hsl(${index * goldenAngle + 60}, 100%, 50%)`;
|
|
90
90
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grouping.js","sourceRoot":"","sources":["../../../../src/widget/components/Grouping.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 { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport {\n Button,\n ButtonGroup,\n DropdownMenu,\n IconButton,\n MenuItem,\n ProgressRadial,\n Surface,\n toaster,\n ToggleSwitch,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgAdd,\n SvgCursor,\n SvgDelete,\n SvgDraw,\n SvgEdit,\n SvgList,\n SvgMore,\n SvgSearch,\n SvgVisibilityHide,\n SvgVisibilityShow,\n} from \"@itwin/itwinui-icons-react\";\nimport DeleteModal from \"./DeleteModal\";\nimport \"./Grouping.scss\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { PropertyMenu } from \"./PropertyMenu\";\nimport {\n clearEmphasizedElements,\n clearEmphasizedOverriddenElements,\n clearHiddenElements,\n clearOverriddenElements,\n emphasizeElements,\n getHiliteIds,\n hideElements,\n hideElementsByQuery,\n overrideElements,\n zoomToElements,\n} from \"./viewerUtils\";\nimport {\n EmptyMessage,\n handleError,\n LoadingOverlay,\n WidgetHeader,\n} from \"./utils\";\nimport GroupAction from \"./GroupAction\";\nimport type { Group, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { FeatureOverrideType } from \"@itwin/core-common\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport type { GetAccessTokenFn } from \"./context/GroupingApiConfigContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { ContextCustomUI, GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\n\nexport type IGroupTyped = CreateTypeFromInterface<Group>;\n\nexport const defaultUIMetadata = [\n {\n name: \"Selection\",\n displayLabel: \"Selection\",\n icon: <SvgCursor />,\n },\n {\n name: \"Search\",\n displayLabel: \"Query Keywords\",\n icon: <SvgSearch />,\n },\n {\n name: \"Manual\",\n displayLabel: \"Manual Query\",\n icon: <SvgDraw />,\n },\n];\n\nenum GroupsView {\n Add, // Add group view\n Groups, // Group list page\n CustomUI, // Context custom UI view\n Modifying, // Modify group view\n Properties, // Group properties view\n}\n\ninterface GroupsTreeProps {\n mapping: Mapping;\n goBack: () => Promise<void>;\n}\n\nconst goldenAngle = 180 * (3 - Math.sqrt(5));\n\nconst fetchGroups = async (\n setGroups: React.Dispatch<React.SetStateAction<IGroupTyped[]>>,\n iModelId: string,\n mappingId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient,\n): Promise<Group[] | undefined> => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const groups = await mappingsClient.getGroups(\n accessToken,\n iModelId,\n mappingId,\n );\n setGroups(groups);\n return groups;\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n return undefined;\n};\n\nexport const Groupings = ({ mapping, goBack }: GroupsTreeProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const iModelId = useActiveIModelConnection()?.iModelId as string;\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI()\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const contextUIs: ContextCustomUI[] = useGroupingMappingCustomUI()\n .filter((p) => p.type === GroupingMappingCustomUIType.Context) as ContextCustomUI[];\n\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [groupsView, setGroupsView] = useState<GroupsView>(GroupsView.Groups);\n const [selectedGroup, setSelectedGroup] = useState<IGroupTyped | undefined>(\n undefined,\n );\n const hilitedElements = useRef<Map<string, string[]>>(new Map());\n const [isLoadingQuery, setLoadingQuery] = useState<boolean>(false);\n const [groups, setGroups] = useState<Group[]>([]);\n const [hiddenGroupsIds, setHiddenGroupsIds] = useState<string[]>([]);\n const [showGroupColor, setShowGroupColor] = useState<boolean>(false);\n\n const [queryGenerationType, setQueryGenerationType] =\n useState<string>(\"Selection\");\n const [selectedContextCustomUI, setSelectedContextCustomUI] = useState<ContextCustomUI | undefined>(undefined);\n\n useEffect(() => {\n void fetchGroups(\n setGroups,\n iModelId,\n mapping.id,\n setIsLoading,\n getAccessToken,\n mappingClient,\n );\n }, [getAccessToken, mappingClient, iModelId, mapping.id, setIsLoading]);\n\n const getGroupColor = function (index: number) {\n return `hsl(${index * goldenAngle + 60}, 100%, 50%)`;\n };\n\n const getHiliteIdsFromGroups = useCallback(\n async (groups: Group[]) => {\n let allIds: string[] = [];\n for (const group of groups) {\n const query = group.query;\n let currentIds: string[] = [];\n if (hilitedElements.current.has(query)) {\n currentIds = hilitedElements.current.get(query) ?? [];\n } else {\n try {\n const queryRowCount = await iModelConnection.queryRowCount(query);\n if (queryRowCount === 0) {\n toaster.warning(\n `${group.groupName}'s query is valid but produced no results.`,\n );\n }\n currentIds = await getHiliteIds(query, iModelConnection);\n hilitedElements.current.set(query, currentIds);\n } catch {\n toaster.negative(\n `Could not hide/show ${group.groupName}. Query could not be resolved.`,\n );\n }\n }\n allIds = allIds.concat(currentIds);\n }\n return allIds;\n },\n [iModelConnection, hilitedElements],\n );\n\n const visualizeGroupColors = useCallback(\n async (viewGroups: Group[]) => {\n setLoadingQuery(true);\n clearEmphasizedOverriddenElements();\n let allIds: string[] = [];\n for (const group of viewGroups) {\n const index =\n viewGroups.length > groups.length\n ? viewGroups.findIndex((g) => g.id === group.id)\n : groups.findIndex((g) => g.id === group.id);\n const hilitedIds = await getHiliteIdsFromGroups([group]);\n overrideElements(\n hilitedIds,\n getGroupColor(index),\n FeatureOverrideType.ColorAndAlpha,\n );\n emphasizeElements(hilitedIds, undefined);\n if (!hiddenGroupsIds.includes(group.id)) {\n allIds = allIds.concat(hilitedIds);\n }\n }\n\n await zoomToElements(allIds);\n setLoadingQuery(false);\n },\n [groups, hiddenGroupsIds, getHiliteIdsFromGroups],\n );\n\n const hideGroups = useCallback(\n async (viewGroups: Group[]) => {\n setLoadingQuery(true);\n for (const viewGroup of viewGroups) {\n const query = viewGroup.query;\n if (hilitedElements.current.has(query)) {\n const hilitedIds = hilitedElements.current.get(query) ?? [];\n hideElements(hilitedIds);\n } else {\n try {\n const queryRowCount = await iModelConnection.queryRowCount(query);\n if (queryRowCount === 0) {\n toaster.warning(\n `${viewGroup.groupName}'s query is valid but produced no results.`,\n );\n }\n const hiliteIds = await hideElementsByQuery(\n query,\n iModelConnection,\n false,\n );\n hilitedElements.current.set(query, hiliteIds);\n } catch {\n toaster.negative(\n `Could not hide/show ${viewGroup.groupName}. Query could not be resolved.`,\n );\n }\n }\n }\n setLoadingQuery(false);\n },\n [iModelConnection],\n );\n\n const showGroup = useCallback(\n async (viewGroup: Group) => {\n clearHiddenElements();\n\n // hide group Ids filter\n const newHiddenGroups: Group[] = hiddenGroupsIds\n .map((id) => groups.find((g) => g.id === id))\n .filter((g): g is Group => !!g && g.id !== viewGroup.id);\n\n // view group Ids filter\n const viewIds = await getHiliteIdsFromGroups(\n groups.filter((g) => !newHiddenGroups.find((hg) => hg.id === g.id)),\n );\n let hiddenIds = await getHiliteIdsFromGroups(newHiddenGroups);\n hiddenIds = hiddenIds.filter((id) => !viewIds.includes(id));\n hideElements(hiddenIds);\n },\n [groups, hiddenGroupsIds, getHiliteIdsFromGroups],\n );\n\n const addGroup = (type: string) => {\n setQueryGenerationType(type);\n clearEmphasizedElements();\n setGroupsView(GroupsView.Add);\n };\n\n const onModify = async (group: Group, type: string) => {\n setQueryGenerationType(type);\n setSelectedGroup(group);\n setGroupsView(GroupsView.Modifying);\n if (group.id && hiddenGroupsIds.includes(group.id)) {\n await showGroup(group);\n setHiddenGroupsIds(hiddenGroupsIds.filter((id) => id !== group.id));\n }\n clearEmphasizedElements();\n };\n\n const openProperties = async (group: Group) => {\n setSelectedGroup(group);\n setGroupsView(GroupsView.Properties);\n if (group.id && hiddenGroupsIds.includes(group.id)) {\n await showGroup(group);\n setHiddenGroupsIds(hiddenGroupsIds.filter((id) => id !== group.id));\n }\n };\n\n const refresh = useCallback(async () => {\n setGroupsView(GroupsView.Groups);\n setSelectedGroup(undefined);\n setSelectedContextCustomUI(undefined);\n setGroups([]);\n const groups = await fetchGroups(\n setGroups,\n iModelId,\n mapping.id,\n setIsLoading,\n getAccessToken,\n mappingClient,\n );\n if (groups) {\n if (showGroupColor) {\n await visualizeGroupColors(groups);\n } else {\n clearEmphasizedOverriddenElements();\n }\n }\n }, [\n getAccessToken,\n mappingClient,\n iModelId,\n mapping.id,\n setGroups,\n showGroupColor,\n visualizeGroupColors,\n ]);\n\n const resetView = async () => {\n if (groups) {\n if (showGroupColor) {\n await visualizeGroupColors(groups);\n } else {\n clearOverriddenElements();\n }\n clearEmphasizedElements();\n }\n };\n\n const showAll = async () => {\n setLoadingQuery(true);\n\n clearHiddenElements();\n setHiddenGroupsIds([]);\n const allIds = await getHiliteIdsFromGroups(groups);\n await zoomToElements(allIds);\n\n setLoadingQuery(false);\n };\n\n const hideAll = useCallback(async () => {\n await hideGroups(groups);\n setHiddenGroupsIds(\n groups.map((g) => g.id).filter((id): id is string => !!id),\n );\n const allIds = await getHiliteIdsFromGroups(groups);\n await zoomToElements(allIds);\n }, [setHiddenGroupsIds, groups, hideGroups, getHiliteIdsFromGroups]);\n\n const toggleGroupColor = useCallback(\n async (e: any) => {\n if (e.target.checked) {\n await visualizeGroupColors(groups);\n setShowGroupColor(true);\n } else {\n clearEmphasizedOverriddenElements();\n setShowGroupColor(false);\n }\n },\n [groups, visualizeGroupColors, setShowGroupColor],\n );\n\n const propertyMenuGoBack = useCallback(async () => {\n setGroupsView(GroupsView.Groups);\n await refresh();\n }, [refresh]);\n\n switch (groupsView) {\n case GroupsView.Add:\n return (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id}\n queryGenerationType={queryGenerationType}\n goBack={async () => {\n setGroupsView(GroupsView.Groups);\n await refresh();\n }}\n resetView={resetView}\n />\n );\n case GroupsView.Modifying:\n return selectedGroup ? (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id}\n group={selectedGroup}\n queryGenerationType={queryGenerationType}\n goBack={async () => {\n setGroupsView(GroupsView.Groups);\n await refresh();\n }}\n resetView={resetView}\n />\n ) : null;\n case GroupsView.Properties:\n return selectedGroup ? (\n <PropertyMenu\n iModelId={iModelId}\n mappingId={mapping.id}\n group={selectedGroup}\n goBack={propertyMenuGoBack}\n />\n ) : null;\n case GroupsView.Groups:\n return (\n <>\n <WidgetHeader\n title={mapping.mappingName}\n disabled={isLoading || isLoadingQuery}\n returnFn={async () => {\n clearEmphasizedOverriddenElements();\n await goBack();\n }}\n />\n\n <Surface className='gmw-groups-container'>\n <div className='gmw-toolbar'>\n <DropdownMenu\n className='gmw-custom-ui-dropdown'\n disabled={isLoadingQuery}\n menuItems={() =>\n (groupUIs.length > 0\n ? groupUIs\n : defaultUIMetadata)\n .map((p, index) => (\n <MenuItem\n key={index}\n onClick={() => addGroup(p.name)}\n icon={p.icon}\n className='gmw-menu-item'\n data-testid={`gmw-add-${index}`}\n >\n {p.displayLabel}\n </MenuItem>\n ))\n }\n >\n <Button\n data-testid=\"gmw-add-group-button\"\n className='add-load-button'\n startIcon={\n isLoadingQuery ? (\n <ProgressRadial size='small' indeterminate />\n ) : (\n <SvgAdd />\n )\n }\n styleType='high-visibility'\n disabled={isLoadingQuery}\n >\n {isLoadingQuery ? \"Loading\" : \"Add Group\"}\n </Button>\n </DropdownMenu>\n <ButtonGroup className='gmw-toolbar-buttons'>\n <ToggleSwitch\n label='Color by Group'\n labelPosition='left'\n className='gmw-toggle'\n disabled={isLoadingQuery}\n checked={showGroupColor}\n onChange={toggleGroupColor}\n ></ToggleSwitch>\n <IconButton\n title='Show All'\n onClick={showAll}\n disabled={isLoadingQuery}\n styleType='borderless'\n className='gmw-group-view-icon'\n >\n <SvgVisibilityShow />\n </IconButton>\n <IconButton\n title='Hide All'\n onClick={hideAll}\n disabled={isLoadingQuery}\n styleType='borderless'\n className='gmw-group-view-icon'\n >\n <SvgVisibilityHide />\n </IconButton>\n </ButtonGroup>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : groups.length === 0 ? (\n <EmptyMessage message='No Groups available.' />\n ) : (\n <div className='gmw-group-list'>\n {groups\n .sort(\n (a, b) =>\n a.groupName?.localeCompare(b.groupName ?? \"\") ?? 1,\n )\n .map((g) => (\n <HorizontalTile\n key={g.id}\n title={g.groupName ? g.groupName : \"Untitled\"}\n subText={g.description}\n actionGroup={\n <div className='gmw-actions'>\n {showGroupColor && (\n <IconButton\n styleType='borderless'\n className='gmw-group-view-icon'\n >\n <div\n className=\"gmw-color-legend\"\n style={{\n backgroundColor: getGroupColor(groups.findIndex((group) => g.id === group.id)),\n }}\n />\n </IconButton>\n )}\n {g.id && hiddenGroupsIds.includes(g.id) ? (\n <IconButton\n disabled={isLoadingQuery}\n styleType='borderless'\n className='gmw-group-view-icon'\n onClick={async () => {\n await showGroup(g);\n setHiddenGroupsIds(\n hiddenGroupsIds.filter((id) => g.id !== id),\n );\n }}\n >\n <SvgVisibilityHide />\n </IconButton>\n ) : (\n <IconButton\n disabled={isLoadingQuery}\n styleType='borderless'\n className='gmw-group-view-icon'\n onClick={async () => {\n await hideGroups([g]);\n setHiddenGroupsIds(\n hiddenGroupsIds.concat(g.id ? [g.id] : []),\n );\n }}\n >\n <SvgVisibilityShow />\n </IconButton>\n )}\n <DropdownMenu\n className='gmw-custom-ui-dropdown'\n disabled={isLoadingQuery}\n menuItems={(close: () => void) =>\n [\n <MenuItem\n key={0}\n icon={<SvgEdit />}\n disabled={isLoadingQuery}\n data-testid=\"gmw-context-menu-item\"\n subMenuItems={\n (groupUIs.length > 0\n ? groupUIs\n : defaultUIMetadata)\n .map((p, index) => (\n <MenuItem\n key={index}\n className='gmw-menu-item'\n data-testid={`gmw-edit-${index}`}\n onClick={async () => onModify(g, p.name)}\n icon={p.icon}\n >\n {p.displayLabel}\n </MenuItem>\n ))\n }\n >\n Edit\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={async () => openProperties(g)}\n icon={<SvgList />}\n data-testid=\"gmw-context-menu-item\"\n >\n Properties\n </MenuItem>,\n <MenuItem\n key={2}\n onClick={() => {\n setSelectedGroup(g);\n setShowDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n data-testid=\"gmw-context-menu-item\"\n >\n Remove\n </MenuItem>,\n ].concat(\n contextUIs.map((p) => {\n return <MenuItem\n key={p.name}\n onClick={() => {\n if(p.uiComponent) {\n setSelectedGroup(g);\n setSelectedContextCustomUI(p);\n setGroupsView(GroupsView.CustomUI);\n }\n if(p.onClick) {\n p.onClick(g.id, mapping.id, iModelId);\n }\n close();\n }}\n icon={p.icon}\n data-testid=\"gmw-context-menu-item\"\n >\n {p.displayLabel}\n </MenuItem>;\n })\n )\n }\n >\n <IconButton\n disabled={isLoadingQuery}\n styleType='borderless'\n data-testid=\"gmw-more-button\"\n >\n <SvgMore />\n </IconButton>\n </DropdownMenu>\n </div>\n }\n onClickTitle={\n isLoadingQuery\n ? undefined\n : async () => openProperties(g)\n }\n />\n ))}\n </div>\n )}\n </Surface>\n <DeleteModal\n entityName={selectedGroup?.groupName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteGroup(\n accessToken,\n iModelId,\n mapping.id,\n selectedGroup?.id ?? \"\",\n );\n }}\n refresh={refresh}\n />\n </>\n );\n case GroupsView.CustomUI:\n return selectedContextCustomUI && selectedContextCustomUI.uiComponent && selectedGroup\n ? (\n <>\n <WidgetHeader\n title={selectedContextCustomUI.displayLabel}\n returnFn={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await refresh();\n }}\n />\n {React.createElement(selectedContextCustomUI.uiComponent, {\n iModelId,\n mappingId: mapping.id,\n groupId: selectedGroup.id,\n })}\n </>\n )\n : null;\n default:\n return (\n <EmptyMessage message=\"No given group view\"/>\n );\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Grouping.js","sourceRoot":"","sources":["../../../../src/widget/components/Grouping.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 { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport {\n Button,\n ButtonGroup,\n DropdownMenu,\n IconButton,\n MenuItem,\n ProgressRadial,\n Surface,\n toaster,\n ToggleSwitch,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgAdd,\n SvgCursor,\n SvgDelete,\n SvgDraw,\n SvgEdit,\n SvgList,\n SvgMore,\n SvgSearch,\n SvgVisibilityHide,\n SvgVisibilityShow,\n} from \"@itwin/itwinui-icons-react\";\nimport DeleteModal from \"./DeleteModal\";\nimport \"./Grouping.scss\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { PropertyMenu } from \"./PropertyMenu\";\nimport {\n clearEmphasizedElements,\n clearEmphasizedOverriddenElements,\n clearHiddenElements,\n clearOverriddenElements,\n emphasizeElements,\n getHiliteIds,\n hideElements,\n hideElementsByQuery,\n overrideElements,\n zoomToElements,\n} from \"./viewerUtils\";\nimport {\n EmptyMessage,\n handleError,\n LoadingOverlay,\n WidgetHeader,\n} from \"./utils\";\nimport GroupAction from \"./GroupAction\";\nimport type { Group, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { FeatureOverrideType } from \"@itwin/core-common\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport type { GetAccessTokenFn } from \"./context/GroupingApiConfigContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { ContextCustomUI, GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\n\nexport type IGroupTyped = CreateTypeFromInterface<Group>;\n\nexport const defaultUIMetadata = [\n {\n name: \"Selection\",\n displayLabel: \"Selection\",\n icon: <SvgCursor />,\n },\n {\n name: \"Search\",\n displayLabel: \"Query Keywords\",\n icon: <SvgSearch />,\n },\n {\n name: \"Manual\",\n displayLabel: \"Manual Query\",\n icon: <SvgDraw />,\n },\n];\n\nenum GroupsView {\n Add, // Add group view\n Groups, // Group list page\n CustomUI, // Context custom UI view\n Modifying, // Modify group view\n Properties, // Group properties view\n}\n\ninterface GroupsTreeProps {\n mapping: Mapping;\n goBack: () => Promise<void>;\n}\n\nconst goldenAngle = 180 * (3 - Math.sqrt(5));\n\nconst fetchGroups = async (\n setGroups: React.Dispatch<React.SetStateAction<IGroupTyped[]>>,\n iModelId: string,\n mappingId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient,\n): Promise<Group[] | undefined> => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const groups = await mappingsClient.getGroups(\n accessToken,\n iModelId,\n mappingId,\n );\n setGroups(groups);\n return groups;\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n return undefined;\n};\n\nexport const Groupings = ({ mapping, goBack }: GroupsTreeProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const iModelId = useActiveIModelConnection()?.iModelId as string;\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI()\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const contextUIs: ContextCustomUI[] = useGroupingMappingCustomUI()\n .filter((p) => p.type === GroupingMappingCustomUIType.Context) as ContextCustomUI[];\n\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [groupsView, setGroupsView] = useState<GroupsView>(GroupsView.Groups);\n const [selectedGroup, setSelectedGroup] = useState<IGroupTyped | undefined>(\n undefined,\n );\n const hilitedElements = useRef<Map<string, string[]>>(new Map());\n const [isLoadingQuery, setLoadingQuery] = useState<boolean>(false);\n const [groups, setGroups] = useState<Group[]>([]);\n const [hiddenGroupsIds, setHiddenGroupsIds] = useState<string[]>([]);\n const [showGroupColor, setShowGroupColor] = useState<boolean>(false);\n\n const [queryGenerationType, setQueryGenerationType] =\n useState<string>(\"Selection\");\n const [selectedContextCustomUI, setSelectedContextCustomUI] = useState<ContextCustomUI | undefined>(undefined);\n\n useEffect(() => {\n void fetchGroups(\n setGroups,\n iModelId,\n mapping.id,\n setIsLoading,\n getAccessToken,\n mappingClient,\n );\n }, [getAccessToken, mappingClient, iModelId, mapping.id]);\n\n const getGroupColor = function (index: number) {\n return `hsl(${index * goldenAngle + 60}, 100%, 50%)`;\n };\n\n const getHiliteIdsFromGroups = useCallback(\n async (groups: Group[]) => {\n let allIds: string[] = [];\n for (const group of groups) {\n const query = group.query;\n let currentIds: string[] = [];\n if (hilitedElements.current.has(query)) {\n currentIds = hilitedElements.current.get(query) ?? [];\n } else {\n try {\n const queryRowCount = await iModelConnection.queryRowCount(query);\n if (queryRowCount === 0) {\n toaster.warning(\n `${group.groupName}'s query is valid but produced no results.`,\n );\n }\n currentIds = await getHiliteIds(query, iModelConnection);\n hilitedElements.current.set(query, currentIds);\n } catch {\n toaster.negative(\n `Could not hide/show ${group.groupName}. Query could not be resolved.`,\n );\n }\n }\n allIds = allIds.concat(currentIds);\n }\n return allIds;\n },\n [iModelConnection, hilitedElements],\n );\n\n const visualizeGroupColors = useCallback(\n async (viewGroups: Group[]) => {\n setLoadingQuery(true);\n clearEmphasizedOverriddenElements();\n let allIds: string[] = [];\n for (const group of viewGroups) {\n const index =\n viewGroups.length > groups.length\n ? viewGroups.findIndex((g) => g.id === group.id)\n : groups.findIndex((g) => g.id === group.id);\n const hilitedIds = await getHiliteIdsFromGroups([group]);\n overrideElements(\n hilitedIds,\n getGroupColor(index),\n FeatureOverrideType.ColorAndAlpha,\n );\n emphasizeElements(hilitedIds, undefined);\n if (!hiddenGroupsIds.includes(group.id)) {\n allIds = allIds.concat(hilitedIds);\n }\n }\n\n await zoomToElements(allIds);\n setLoadingQuery(false);\n },\n [groups, hiddenGroupsIds, getHiliteIdsFromGroups],\n );\n\n const hideGroups = useCallback(\n async (viewGroups: Group[]) => {\n setLoadingQuery(true);\n for (const viewGroup of viewGroups) {\n const query = viewGroup.query;\n if (hilitedElements.current.has(query)) {\n const hilitedIds = hilitedElements.current.get(query) ?? [];\n hideElements(hilitedIds);\n } else {\n try {\n const queryRowCount = await iModelConnection.queryRowCount(query);\n if (queryRowCount === 0) {\n toaster.warning(\n `${viewGroup.groupName}'s query is valid but produced no results.`,\n );\n }\n const hiliteIds = await hideElementsByQuery(\n query,\n iModelConnection,\n false,\n );\n hilitedElements.current.set(query, hiliteIds);\n } catch {\n toaster.negative(\n `Could not hide/show ${viewGroup.groupName}. Query could not be resolved.`,\n );\n }\n }\n }\n setLoadingQuery(false);\n },\n [iModelConnection],\n );\n\n const showGroup = useCallback(\n async (viewGroup: Group) => {\n clearHiddenElements();\n\n // hide group Ids filter\n const newHiddenGroups: Group[] = hiddenGroupsIds\n .map((id) => groups.find((g) => g.id === id))\n .filter((g): g is Group => !!g && g.id !== viewGroup.id);\n\n // view group Ids filter\n const viewIds = await getHiliteIdsFromGroups(\n groups.filter((g) => !newHiddenGroups.find((hg) => hg.id === g.id)),\n );\n let hiddenIds = await getHiliteIdsFromGroups(newHiddenGroups);\n hiddenIds = hiddenIds.filter((id) => !viewIds.includes(id));\n hideElements(hiddenIds);\n },\n [groups, hiddenGroupsIds, getHiliteIdsFromGroups],\n );\n\n const addGroup = (type: string) => {\n setQueryGenerationType(type);\n clearEmphasizedElements();\n setGroupsView(GroupsView.Add);\n };\n\n const onModify = async (group: Group, type: string) => {\n setQueryGenerationType(type);\n setSelectedGroup(group);\n setGroupsView(GroupsView.Modifying);\n if (group.id && hiddenGroupsIds.includes(group.id)) {\n await showGroup(group);\n setHiddenGroupsIds(hiddenGroupsIds.filter((id) => id !== group.id));\n }\n clearEmphasizedElements();\n };\n\n const openProperties = async (group: Group) => {\n setSelectedGroup(group);\n setGroupsView(GroupsView.Properties);\n if (group.id && hiddenGroupsIds.includes(group.id)) {\n await showGroup(group);\n setHiddenGroupsIds(hiddenGroupsIds.filter((id) => id !== group.id));\n }\n };\n\n const refresh = useCallback(async () => {\n setGroupsView(GroupsView.Groups);\n setSelectedGroup(undefined);\n setSelectedContextCustomUI(undefined);\n setGroups([]);\n const groups = await fetchGroups(\n setGroups,\n iModelId,\n mapping.id,\n setIsLoading,\n getAccessToken,\n mappingClient,\n );\n if (groups) {\n if (showGroupColor) {\n await visualizeGroupColors(groups);\n } else {\n clearEmphasizedOverriddenElements();\n }\n }\n }, [\n getAccessToken,\n mappingClient,\n iModelId,\n mapping.id,\n setGroups,\n showGroupColor,\n visualizeGroupColors,\n ]);\n\n const resetView = async () => {\n if (groups) {\n if (showGroupColor) {\n await visualizeGroupColors(groups);\n } else {\n clearOverriddenElements();\n }\n clearEmphasizedElements();\n }\n };\n\n const showAll = async () => {\n setLoadingQuery(true);\n\n clearHiddenElements();\n setHiddenGroupsIds([]);\n const allIds = await getHiliteIdsFromGroups(groups);\n await zoomToElements(allIds);\n\n setLoadingQuery(false);\n };\n\n const hideAll = useCallback(async () => {\n await hideGroups(groups);\n setHiddenGroupsIds(\n groups.map((g) => g.id).filter((id): id is string => !!id),\n );\n const allIds = await getHiliteIdsFromGroups(groups);\n await zoomToElements(allIds);\n }, [setHiddenGroupsIds, groups, hideGroups, getHiliteIdsFromGroups]);\n\n const toggleGroupColor = useCallback(\n async (e: any) => {\n if (e.target.checked) {\n await visualizeGroupColors(groups);\n setShowGroupColor(true);\n } else {\n clearEmphasizedOverriddenElements();\n setShowGroupColor(false);\n }\n },\n [groups, visualizeGroupColors, setShowGroupColor],\n );\n\n const propertyMenuGoBack = useCallback(async () => {\n setGroupsView(GroupsView.Groups);\n await refresh();\n }, [refresh]);\n\n switch (groupsView) {\n case GroupsView.Add:\n return (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id}\n queryGenerationType={queryGenerationType}\n goBack={async () => {\n setGroupsView(GroupsView.Groups);\n await refresh();\n }}\n resetView={resetView}\n />\n );\n case GroupsView.Modifying:\n return selectedGroup ? (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id}\n group={selectedGroup}\n queryGenerationType={queryGenerationType}\n goBack={async () => {\n setGroupsView(GroupsView.Groups);\n await refresh();\n }}\n resetView={resetView}\n />\n ) : null;\n case GroupsView.Properties:\n return selectedGroup ? (\n <PropertyMenu\n iModelId={iModelId}\n mappingId={mapping.id}\n group={selectedGroup}\n goBack={propertyMenuGoBack}\n />\n ) : null;\n case GroupsView.Groups:\n return (\n <>\n <WidgetHeader\n title={mapping.mappingName}\n disabled={isLoading || isLoadingQuery}\n returnFn={async () => {\n clearEmphasizedOverriddenElements();\n await goBack();\n }}\n />\n\n <Surface className='gmw-groups-container'>\n <div className='gmw-toolbar'>\n <DropdownMenu\n className='gmw-custom-ui-dropdown'\n disabled={isLoadingQuery}\n menuItems={() =>\n (groupUIs.length > 0\n ? groupUIs\n : defaultUIMetadata)\n .map((p, index) => (\n <MenuItem\n key={index}\n onClick={() => addGroup(p.name)}\n icon={p.icon}\n className='gmw-menu-item'\n data-testid={`gmw-add-${index}`}\n >\n {p.displayLabel}\n </MenuItem>\n ))\n }\n >\n <Button\n data-testid=\"gmw-add-group-button\"\n className='add-load-button'\n startIcon={\n isLoadingQuery ? (\n <ProgressRadial size='small' indeterminate />\n ) : (\n <SvgAdd />\n )\n }\n styleType='high-visibility'\n disabled={isLoadingQuery}\n >\n {isLoadingQuery ? \"Loading\" : \"Add Group\"}\n </Button>\n </DropdownMenu>\n <ButtonGroup className='gmw-toolbar-buttons'>\n <ToggleSwitch\n label='Color by Group'\n labelPosition='left'\n className='gmw-toggle'\n disabled={isLoadingQuery}\n checked={showGroupColor}\n onChange={toggleGroupColor}\n ></ToggleSwitch>\n <IconButton\n title='Show All'\n onClick={showAll}\n disabled={isLoadingQuery}\n styleType='borderless'\n className='gmw-group-view-icon'\n >\n <SvgVisibilityShow />\n </IconButton>\n <IconButton\n title='Hide All'\n onClick={hideAll}\n disabled={isLoadingQuery}\n styleType='borderless'\n className='gmw-group-view-icon'\n >\n <SvgVisibilityHide />\n </IconButton>\n </ButtonGroup>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : groups.length === 0 ? (\n <EmptyMessage message='No Groups available.' />\n ) : (\n <div className='gmw-group-list'>\n {groups\n .sort(\n (a, b) =>\n a.groupName?.localeCompare(b.groupName ?? \"\") ?? 1,\n )\n .map((g) => (\n <HorizontalTile\n key={g.id}\n title={g.groupName ? g.groupName : \"Untitled\"}\n subText={g.description}\n actionGroup={\n <div className='gmw-actions'>\n {showGroupColor && (\n <IconButton\n styleType='borderless'\n className='gmw-group-view-icon'\n >\n <div\n className=\"gmw-color-legend\"\n style={{\n backgroundColor: getGroupColor(groups.findIndex((group) => g.id === group.id)),\n }}\n />\n </IconButton>\n )}\n {g.id && hiddenGroupsIds.includes(g.id) ? (\n <IconButton\n disabled={isLoadingQuery}\n styleType='borderless'\n className='gmw-group-view-icon'\n onClick={async () => {\n await showGroup(g);\n setHiddenGroupsIds(\n hiddenGroupsIds.filter((id) => g.id !== id),\n );\n }}\n >\n <SvgVisibilityHide />\n </IconButton>\n ) : (\n <IconButton\n disabled={isLoadingQuery}\n styleType='borderless'\n className='gmw-group-view-icon'\n onClick={async () => {\n await hideGroups([g]);\n setHiddenGroupsIds(\n hiddenGroupsIds.concat(g.id ? [g.id] : []),\n );\n }}\n >\n <SvgVisibilityShow />\n </IconButton>\n )}\n <DropdownMenu\n className='gmw-custom-ui-dropdown'\n disabled={isLoadingQuery}\n menuItems={(close: () => void) =>\n [\n <MenuItem\n key={0}\n icon={<SvgEdit />}\n disabled={isLoadingQuery}\n data-testid=\"gmw-context-menu-item\"\n subMenuItems={\n (groupUIs.length > 0\n ? groupUIs\n : defaultUIMetadata)\n .map((p, index) => (\n <MenuItem\n key={index}\n className='gmw-menu-item'\n data-testid={`gmw-edit-${index}`}\n onClick={async () => onModify(g, p.name)}\n icon={p.icon}\n >\n {p.displayLabel}\n </MenuItem>\n ))\n }\n >\n Edit\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={async () => openProperties(g)}\n icon={<SvgList />}\n data-testid=\"gmw-context-menu-item\"\n >\n Properties\n </MenuItem>,\n <MenuItem\n key={2}\n onClick={() => {\n setSelectedGroup(g);\n setShowDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n data-testid=\"gmw-context-menu-item\"\n >\n Remove\n </MenuItem>,\n ].concat(\n contextUIs.map((p) => {\n return <MenuItem\n key={p.name}\n onClick={() => {\n if (p.uiComponent) {\n setSelectedGroup(g);\n setSelectedContextCustomUI(p);\n setGroupsView(GroupsView.CustomUI);\n }\n if (p.onClick) {\n p.onClick(g.id, mapping.id, iModelId);\n }\n close();\n }}\n icon={p.icon}\n data-testid=\"gmw-context-menu-item\"\n >\n {p.displayLabel}\n </MenuItem>;\n })\n )\n }\n >\n <IconButton\n disabled={isLoadingQuery}\n styleType='borderless'\n data-testid=\"gmw-more-button\"\n >\n <SvgMore />\n </IconButton>\n </DropdownMenu>\n </div>\n }\n onClickTitle={\n isLoadingQuery\n ? undefined\n : async () => openProperties(g)\n }\n />\n ))}\n </div>\n )}\n </Surface>\n <DeleteModal\n entityName={selectedGroup?.groupName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteGroup(\n accessToken,\n iModelId,\n mapping.id,\n selectedGroup?.id ?? \"\",\n );\n }}\n refresh={refresh}\n />\n </>\n );\n case GroupsView.CustomUI:\n return selectedContextCustomUI && selectedContextCustomUI.uiComponent && selectedGroup\n ? (\n <>\n <WidgetHeader\n title={selectedContextCustomUI.displayLabel}\n returnFn={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await refresh();\n }}\n />\n {React.createElement(selectedContextCustomUI.uiComponent, {\n iModelId,\n mappingId: mapping.id,\n groupId: selectedGroup.id,\n })}\n </>\n )\n : null;\n default:\n return (\n <EmptyMessage message=\"No given group view\" />\n );\n }\n};\n"]}
|
|
@@ -1,46 +1,60 @@
|
|
|
1
1
|
import type { PresentationPropertyDataProvider } from "@itwin/presentation-components";
|
|
2
|
+
import type { PropertiesField } from "@itwin/presentation-common";
|
|
2
3
|
import type { Primitives, PropertyRecord } from "@itwin/appui-abstract";
|
|
3
4
|
export interface Query {
|
|
4
5
|
unions: QueryUnion[];
|
|
5
6
|
}
|
|
6
7
|
export interface QueryUnion {
|
|
7
8
|
classes: QueryClass[];
|
|
9
|
+
properties: QueryProperty[];
|
|
8
10
|
}
|
|
9
11
|
export interface QueryClass {
|
|
10
12
|
className: string;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
classJoins: ClassJoin[];
|
|
14
|
+
}
|
|
15
|
+
export interface ClassJoin {
|
|
16
|
+
classProperty: string;
|
|
17
|
+
joinClassName: string;
|
|
18
|
+
joinClassProperty: string;
|
|
14
19
|
}
|
|
15
20
|
export interface QueryProperty {
|
|
21
|
+
className: string;
|
|
22
|
+
classProperties: ClassProperty[];
|
|
23
|
+
isCategory: boolean;
|
|
24
|
+
isAspect: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface ClassProperty {
|
|
16
27
|
name: string;
|
|
17
28
|
value: Primitives.Value;
|
|
18
29
|
needsQuote: boolean;
|
|
19
|
-
|
|
30
|
+
}
|
|
31
|
+
export interface AddedProperty {
|
|
32
|
+
propertyRecord: PropertyRecord;
|
|
33
|
+
propertiesField: PropertiesField;
|
|
20
34
|
}
|
|
21
35
|
export declare class QueryBuilder {
|
|
22
|
-
static readonly MULTI_ASPECT_PRIMARY_CLASS
|
|
23
|
-
static readonly UNIQUE_ASPECT_PRIMARY_CLASS
|
|
24
|
-
static readonly DEFAULT_DOUBLE_PRECISION
|
|
25
|
-
dataProvider
|
|
26
|
-
query
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
*/
|
|
30
|
-
constructor(provider: PresentationPropertyDataProvider | undefined);
|
|
36
|
+
private static readonly MULTI_ASPECT_PRIMARY_CLASS;
|
|
37
|
+
private static readonly UNIQUE_ASPECT_PRIMARY_CLASS;
|
|
38
|
+
private static readonly DEFAULT_DOUBLE_PRECISION;
|
|
39
|
+
private dataProvider;
|
|
40
|
+
private query;
|
|
41
|
+
constructor(provider: PresentationPropertyDataProvider);
|
|
42
|
+
resetQuery: () => void;
|
|
31
43
|
private isCategory;
|
|
44
|
+
private _propertyMap;
|
|
45
|
+
private regenerateQuery;
|
|
32
46
|
addProperty(prop: PropertyRecord): Promise<boolean>;
|
|
47
|
+
removeProperty(prop: PropertyRecord): Promise<void>;
|
|
48
|
+
private buildProperty;
|
|
33
49
|
private needsQuote;
|
|
34
|
-
private
|
|
35
|
-
private
|
|
50
|
+
private addRelatedToQuery;
|
|
51
|
+
private addClassToQuery;
|
|
36
52
|
private addPropertyToQuery;
|
|
37
|
-
removeProperty(prop: PropertyRecord): Promise<void>;
|
|
38
|
-
private removeRelatedProperty;
|
|
39
|
-
private removePropertyFromQuery;
|
|
40
53
|
buildQueryString(): string;
|
|
41
|
-
private
|
|
42
|
-
private
|
|
43
|
-
private
|
|
54
|
+
private selectClause;
|
|
55
|
+
private relationalJoinSegments;
|
|
56
|
+
private propertyQuerySegment;
|
|
57
|
+
private categoryWhereQuery;
|
|
44
58
|
private isFloat;
|
|
45
59
|
}
|
|
46
60
|
//# sourceMappingURL=QueryBuilder.d.ts.map
|