@itwin/grouping-mapping-widget 0.13.0 → 0.14.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.
Files changed (161) hide show
  1. package/lib/cjs/grouping-mapping-widget.d.ts +3 -0
  2. package/lib/cjs/grouping-mapping-widget.js +7 -1
  3. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  4. package/lib/cjs/test/GroupingMappingCustomUI.test.js +2 -2
  5. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  6. package/lib/cjs/widget/components/CalculatedPropertyAction.js +7 -119
  7. package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
  8. package/lib/cjs/widget/components/CalculatedPropertyAction.scss +1 -12
  9. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.d.ts +12 -0
  10. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js +154 -0
  11. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -0
  12. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.scss +27 -0
  13. package/lib/cjs/widget/components/GroupAction.js +2 -2
  14. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  15. package/lib/cjs/widget/components/GroupColorLegend.d.ts +10 -0
  16. package/lib/cjs/widget/components/GroupColorLegend.js +20 -0
  17. package/lib/cjs/widget/components/GroupColorLegend.js.map +1 -0
  18. package/lib/cjs/widget/components/GroupColorLegend.scss +9 -0
  19. package/lib/cjs/widget/components/GroupColorToggle.d.ts +9 -0
  20. package/lib/cjs/widget/components/GroupColorToggle.js +69 -0
  21. package/lib/cjs/widget/components/GroupColorToggle.js.map +1 -0
  22. package/lib/cjs/widget/components/GroupItem.d.ts +12 -0
  23. package/lib/cjs/widget/components/GroupItem.js +19 -0
  24. package/lib/cjs/widget/components/GroupItem.js.map +1 -0
  25. package/lib/cjs/widget/components/GroupMenuActions.d.ts +13 -0
  26. package/lib/cjs/widget/components/GroupMenuActions.js +68 -0
  27. package/lib/cjs/widget/components/GroupMenuActions.js.map +1 -0
  28. package/lib/cjs/widget/components/GroupMenuActions.scss +13 -0
  29. package/lib/cjs/widget/components/Grouping.d.ts +9 -5
  30. package/lib/cjs/widget/components/Grouping.js +14 -142
  31. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  32. package/lib/cjs/widget/components/Grouping.scss +0 -16
  33. package/lib/cjs/widget/components/GroupingMapping.js +3 -5
  34. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  35. package/lib/cjs/widget/components/GroupingMappingContent.js +1 -1
  36. package/lib/cjs/widget/components/GroupingMappingContent.js.map +1 -1
  37. package/lib/cjs/widget/components/GroupingMappingContext.js +1 -1
  38. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
  39. package/lib/cjs/widget/components/GroupingMappingRouter.js +20 -21
  40. package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -1
  41. package/lib/cjs/widget/components/GroupsAddButton.d.ts +3 -2
  42. package/lib/cjs/widget/components/GroupsAddButton.js +4 -3
  43. package/lib/cjs/widget/components/GroupsAddButton.js.map +1 -1
  44. package/lib/cjs/widget/components/GroupsAddButton.scss +2 -0
  45. package/lib/cjs/widget/components/GroupsShowHideButtons.d.ts +11 -0
  46. package/lib/cjs/widget/components/GroupsShowHideButtons.js +45 -0
  47. package/lib/cjs/widget/components/GroupsShowHideButtons.js.map +1 -0
  48. package/lib/cjs/widget/components/GroupsVisualization.d.ts +9 -0
  49. package/lib/cjs/widget/components/GroupsVisualization.js +137 -0
  50. package/lib/cjs/widget/components/GroupsVisualization.js.map +1 -0
  51. package/lib/cjs/widget/components/GroupsVisualization.scss +12 -0
  52. package/lib/cjs/widget/components/GroupsVisualizationActions.d.ts +10 -0
  53. package/lib/cjs/widget/components/GroupsVisualizationActions.js +27 -0
  54. package/lib/cjs/widget/components/GroupsVisualizationActions.js.map +1 -0
  55. package/lib/cjs/widget/components/GroupsVisualizationActions.scss +9 -0
  56. package/lib/cjs/widget/components/PropertyMenu.d.ts +1 -2
  57. package/lib/cjs/widget/components/PropertyMenu.js +6 -49
  58. package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
  59. package/lib/cjs/widget/components/PropertyMenu.scss +2 -17
  60. package/lib/cjs/widget/components/PropertyMenuWithVisualization.d.ts +8 -0
  61. package/lib/cjs/widget/components/PropertyMenuWithVisualization.js +45 -0
  62. package/lib/cjs/widget/components/PropertyMenuWithVisualization.js.map +1 -0
  63. package/lib/cjs/widget/components/PropertyMenuWithVisualization.scss +16 -0
  64. package/lib/cjs/widget/components/QueryBuilderCustomUI.d.ts +3 -1
  65. package/lib/cjs/widget/components/QueryBuilderCustomUI.js +2 -1
  66. package/lib/cjs/widget/components/QueryBuilderCustomUI.js.map +1 -1
  67. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.d.ts +16 -0
  68. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.js +62 -0
  69. package/lib/cjs/widget/components/SharedCalculatedPropertyForms.js.map +1 -0
  70. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.d.ts +2 -2
  71. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js +1 -1
  72. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  73. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.d.ts +4 -0
  74. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  75. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -1
  76. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js +2 -2
  77. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  78. package/lib/cjs/widget/components/groupsHelpers.d.ts +1 -1
  79. package/lib/cjs/widget/components/groupsHelpers.js +11 -14
  80. package/lib/cjs/widget/components/groupsHelpers.js.map +1 -1
  81. package/lib/esm/grouping-mapping-widget.d.ts +3 -0
  82. package/lib/esm/grouping-mapping-widget.js +3 -0
  83. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  84. package/lib/esm/test/GroupingMappingCustomUI.test.js +2 -2
  85. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  86. package/lib/esm/widget/components/CalculatedPropertyAction.js +9 -121
  87. package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
  88. package/lib/esm/widget/components/CalculatedPropertyAction.scss +1 -12
  89. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.d.ts +12 -0
  90. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js +128 -0
  91. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -0
  92. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.scss +27 -0
  93. package/lib/esm/widget/components/GroupAction.js +2 -2
  94. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  95. package/lib/esm/widget/components/GroupColorLegend.d.ts +10 -0
  96. package/lib/esm/widget/components/GroupColorLegend.js +13 -0
  97. package/lib/esm/widget/components/GroupColorLegend.js.map +1 -0
  98. package/lib/esm/widget/components/GroupColorLegend.scss +9 -0
  99. package/lib/esm/widget/components/GroupColorToggle.d.ts +9 -0
  100. package/lib/esm/widget/components/GroupColorToggle.js +46 -0
  101. package/lib/esm/widget/components/GroupColorToggle.js.map +1 -0
  102. package/lib/esm/widget/components/GroupItem.d.ts +12 -0
  103. package/lib/esm/widget/components/GroupItem.js +12 -0
  104. package/lib/esm/widget/components/GroupItem.js.map +1 -0
  105. package/lib/esm/widget/components/GroupMenuActions.d.ts +13 -0
  106. package/lib/esm/widget/components/GroupMenuActions.js +45 -0
  107. package/lib/esm/widget/components/GroupMenuActions.js.map +1 -0
  108. package/lib/esm/widget/components/GroupMenuActions.scss +13 -0
  109. package/lib/esm/widget/components/Grouping.d.ts +9 -5
  110. package/lib/esm/widget/components/Grouping.js +17 -145
  111. package/lib/esm/widget/components/Grouping.js.map +1 -1
  112. package/lib/esm/widget/components/Grouping.scss +0 -16
  113. package/lib/esm/widget/components/GroupingMapping.js +3 -5
  114. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  115. package/lib/esm/widget/components/GroupingMappingContent.js +1 -1
  116. package/lib/esm/widget/components/GroupingMappingContent.js.map +1 -1
  117. package/lib/esm/widget/components/GroupingMappingContext.js +1 -1
  118. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
  119. package/lib/esm/widget/components/GroupingMappingRouter.js +20 -21
  120. package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -1
  121. package/lib/esm/widget/components/GroupsAddButton.d.ts +3 -2
  122. package/lib/esm/widget/components/GroupsAddButton.js +5 -4
  123. package/lib/esm/widget/components/GroupsAddButton.js.map +1 -1
  124. package/lib/esm/widget/components/GroupsAddButton.scss +2 -0
  125. package/lib/esm/widget/components/GroupsShowHideButtons.d.ts +11 -0
  126. package/lib/esm/widget/components/GroupsShowHideButtons.js +22 -0
  127. package/lib/esm/widget/components/GroupsShowHideButtons.js.map +1 -0
  128. package/lib/esm/widget/components/GroupsVisualization.d.ts +9 -0
  129. package/lib/esm/widget/components/GroupsVisualization.js +114 -0
  130. package/lib/esm/widget/components/GroupsVisualization.js.map +1 -0
  131. package/lib/esm/widget/components/GroupsVisualization.scss +12 -0
  132. package/lib/esm/widget/components/GroupsVisualizationActions.d.ts +10 -0
  133. package/lib/esm/widget/components/GroupsVisualizationActions.js +20 -0
  134. package/lib/esm/widget/components/GroupsVisualizationActions.js.map +1 -0
  135. package/lib/esm/widget/components/GroupsVisualizationActions.scss +9 -0
  136. package/lib/esm/widget/components/PropertyMenu.d.ts +1 -2
  137. package/lib/esm/widget/components/PropertyMenu.js +7 -50
  138. package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
  139. package/lib/esm/widget/components/PropertyMenu.scss +2 -17
  140. package/lib/esm/widget/components/PropertyMenuWithVisualization.d.ts +8 -0
  141. package/lib/esm/widget/components/PropertyMenuWithVisualization.js +22 -0
  142. package/lib/esm/widget/components/PropertyMenuWithVisualization.js.map +1 -0
  143. package/lib/esm/widget/components/PropertyMenuWithVisualization.scss +16 -0
  144. package/lib/esm/widget/components/QueryBuilderCustomUI.d.ts +3 -1
  145. package/lib/esm/widget/components/QueryBuilderCustomUI.js +2 -1
  146. package/lib/esm/widget/components/QueryBuilderCustomUI.js.map +1 -1
  147. package/lib/esm/widget/components/SharedCalculatedPropertyForms.d.ts +16 -0
  148. package/lib/esm/widget/components/SharedCalculatedPropertyForms.js +39 -0
  149. package/lib/esm/widget/components/SharedCalculatedPropertyForms.js.map +1 -0
  150. package/lib/esm/widget/components/context/GroupHilitedElementsContext.d.ts +2 -2
  151. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js +1 -1
  152. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  153. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.d.ts +4 -0
  154. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  155. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -1
  156. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js +2 -2
  157. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  158. package/lib/esm/widget/components/groupsHelpers.d.ts +1 -1
  159. package/lib/esm/widget/components/groupsHelpers.js +11 -14
  160. package/lib/esm/widget/components/groupsHelpers.js.map +1 -1
  161. package/package.json +1 -1
@@ -0,0 +1,114 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { useActiveIModelConnection } from "@itwin/appui-react";
6
+ import React, { useCallback, useEffect, useMemo, useState } from "react";
7
+ import { useGroupHilitedElementsContext } from "./context/GroupHilitedElementsContext";
8
+ import { getHiliteIdsFromGroups, hideGroup, hideGroups, visualizeGroupColors, } from "./groupsHelpers";
9
+ import { clearEmphasizedElements, clearEmphasizedOverriddenElements, clearHiddenElements, hideElements, zoomToElements, } from "./viewerUtils";
10
+ import { Groupings } from "./Grouping";
11
+ import { GroupColorLegend } from "./GroupColorLegend";
12
+ import { GroupVisualizationActions } from "./GroupsVisualizationActions";
13
+ import { GroupsShowHideButtons } from "./GroupsShowHideButtons";
14
+ import "./GroupsVisualization.scss";
15
+ export const GroupsVisualization = ({ emphasizeElements = true, isNonEmphasizedSelectable = false, onClickGroupModify, onClickAddGroup, ...rest }) => {
16
+ const iModelConnection = useActiveIModelConnection();
17
+ if (!iModelConnection) {
18
+ throw new Error("This component requires an active iModelConnection.");
19
+ }
20
+ const [isLoadingQuery, setLoadingQuery] = useState(false);
21
+ const { hilitedElementsQueryCache, groups, hiddenGroupsIds, showGroupColor, setHiddenGroupsIds, } = useGroupHilitedElementsContext();
22
+ const getHiliteIdsFromGroupsWrapper = useCallback(async (groups) => iModelConnection
23
+ ? getHiliteIdsFromGroups(iModelConnection, groups, hilitedElementsQueryCache)
24
+ : [], [iModelConnection, hilitedElementsQueryCache]);
25
+ const visualizeGroupColorsWrapper = useCallback(async () => {
26
+ setLoadingQuery(true);
27
+ const groupsCopy = [...groups];
28
+ await visualizeGroupColors(iModelConnection, groupsCopy, hiddenGroupsIds, hilitedElementsQueryCache, emphasizeElements);
29
+ isNonEmphasizedSelectable && clearEmphasizedElements();
30
+ setLoadingQuery(false);
31
+ }, [
32
+ iModelConnection,
33
+ groups,
34
+ hiddenGroupsIds,
35
+ hilitedElementsQueryCache,
36
+ emphasizeElements,
37
+ isNonEmphasizedSelectable,
38
+ ]);
39
+ useEffect(() => {
40
+ const visualize = async () => {
41
+ if (groups.length > 0 && showGroupColor) {
42
+ await visualizeGroupColorsWrapper();
43
+ }
44
+ else {
45
+ clearEmphasizedOverriddenElements();
46
+ }
47
+ };
48
+ void visualize();
49
+ }, [groups, showGroupColor, visualizeGroupColorsWrapper]);
50
+ const hideAllGroups = useCallback(async () => {
51
+ setLoadingQuery(true);
52
+ await hideGroups(iModelConnection, groups, hilitedElementsQueryCache);
53
+ setLoadingQuery(false);
54
+ }, [groups, hilitedElementsQueryCache, iModelConnection]);
55
+ const hideSingleGroupWrapper = useCallback(async (group) => {
56
+ setLoadingQuery(true);
57
+ await hideGroup(iModelConnection, group, hilitedElementsQueryCache);
58
+ setLoadingQuery(false);
59
+ }, [hilitedElementsQueryCache, iModelConnection]);
60
+ const showGroup = useCallback(async (viewGroup) => {
61
+ clearHiddenElements();
62
+ // hide group Ids filter
63
+ const newHiddenGroups = groups.filter((g) => hiddenGroupsIds.has(g.id) && g.id !== viewGroup.id);
64
+ // view group Ids filter
65
+ const viewGroups = groups.filter((g) => !hiddenGroupsIds.has(g.id) || g.id === viewGroup.id);
66
+ const viewIds = await getHiliteIdsFromGroupsWrapper(viewGroups);
67
+ let hiddenIds = await getHiliteIdsFromGroupsWrapper(newHiddenGroups);
68
+ hiddenIds = hiddenIds.filter((id) => !viewIds.includes(id));
69
+ hideElements(hiddenIds);
70
+ }, [groups, hiddenGroupsIds, getHiliteIdsFromGroupsWrapper]);
71
+ const showAll = useCallback(async () => {
72
+ setLoadingQuery(true);
73
+ clearHiddenElements();
74
+ setHiddenGroupsIds(new Set());
75
+ const allIds = await getHiliteIdsFromGroupsWrapper(groups);
76
+ await zoomToElements(allIds);
77
+ setLoadingQuery(false);
78
+ }, [getHiliteIdsFromGroupsWrapper, groups, setHiddenGroupsIds]);
79
+ const hideAll = useCallback(async () => {
80
+ await hideAllGroups();
81
+ setHiddenGroupsIds(new Set(groups.map((g) => g.id)));
82
+ const allIds = await getHiliteIdsFromGroupsWrapper(groups);
83
+ await zoomToElements(allIds);
84
+ }, [
85
+ setHiddenGroupsIds,
86
+ groups,
87
+ hideAllGroups,
88
+ getHiliteIdsFromGroupsWrapper,
89
+ ]);
90
+ const onModify = useCallback(async (group, type) => {
91
+ if (!onClickGroupModify)
92
+ return;
93
+ if (group.id && hiddenGroupsIds.has(group.id)) {
94
+ await showGroup(group);
95
+ setHiddenGroupsIds(new Set([...hiddenGroupsIds].filter((id) => id !== group.id)));
96
+ }
97
+ clearEmphasizedElements();
98
+ onClickGroupModify(group, type);
99
+ }, [hiddenGroupsIds, onClickGroupModify, setHiddenGroupsIds, showGroup]);
100
+ const onAddGroup = useCallback((type) => {
101
+ if (!onClickAddGroup)
102
+ return;
103
+ onClickAddGroup(type);
104
+ clearEmphasizedElements();
105
+ }, [onClickAddGroup]);
106
+ const groupActionButtonRenderers = useMemo(() => [
107
+ (props) => showGroupColor ? React.createElement(GroupColorLegend, { ...props, groups: groups }) : [],
108
+ (props) => (React.createElement(GroupsShowHideButtons, { ...props, isLoadingQuery: isLoadingQuery, showGroup: showGroup, hideGroup: hideSingleGroupWrapper })),
109
+ ].flat(), [groups, hideSingleGroupWrapper, isLoadingQuery, showGroup, showGroupColor]);
110
+ return (React.createElement("div", { className: "groups-vis-container" },
111
+ React.createElement(GroupVisualizationActions, { isLoadingQuery: isLoadingQuery, showAll: showAll, hideAll: hideAll }),
112
+ React.createElement(Groupings, { onClickGroupModify: onModify, onClickAddGroup: onAddGroup, actionButtonRenderers: groupActionButtonRenderers, ...rest, disableActions: isLoadingQuery })));
113
+ };
114
+ //# sourceMappingURL=GroupsVisualization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupsVisualization.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupsVisualization.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 type { Group } from \"@itwin/insights-client\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport {\n getHiliteIdsFromGroups,\n hideGroup,\n hideGroups,\n visualizeGroupColors,\n} from \"./groupsHelpers\";\nimport {\n clearEmphasizedElements,\n clearEmphasizedOverriddenElements,\n clearHiddenElements,\n hideElements,\n zoomToElements,\n} from \"./viewerUtils\";\nimport type { ActionButtonRenderer, ActionButtonRendererProps, GroupingProps } from \"./Grouping\";\nimport { Groupings } from \"./Grouping\";\nimport { GroupColorLegend } from \"./GroupColorLegend\";\nimport { GroupVisualizationActions } from \"./GroupsVisualizationActions\";\nimport { GroupsShowHideButtons } from \"./GroupsShowHideButtons\";\nimport \"./GroupsVisualization.scss\";\n\nexport interface GroupsVisualizationProps extends GroupingProps {\n isNonEmphasizedSelectable?: boolean;\n emphasizeElements?: boolean;\n}\n\nexport const GroupsVisualization = ({\n emphasizeElements = true,\n isNonEmphasizedSelectable = false,\n onClickGroupModify,\n onClickAddGroup,\n ...rest\n}: GroupsVisualizationProps) => {\n const iModelConnection = useActiveIModelConnection();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const [isLoadingQuery, setLoadingQuery] = useState<boolean>(false);\n const {\n hilitedElementsQueryCache,\n groups,\n hiddenGroupsIds,\n showGroupColor,\n setHiddenGroupsIds,\n } = useGroupHilitedElementsContext();\n\n const getHiliteIdsFromGroupsWrapper = useCallback(\n async (groups: Group[]): Promise<string[]> =>\n iModelConnection\n ? getHiliteIdsFromGroups(\n iModelConnection,\n groups,\n hilitedElementsQueryCache\n )\n : [],\n [iModelConnection, hilitedElementsQueryCache]\n );\n\n const visualizeGroupColorsWrapper = useCallback(\n async () => {\n setLoadingQuery(true);\n const groupsCopy = [...groups];\n await visualizeGroupColors(\n iModelConnection,\n groupsCopy,\n hiddenGroupsIds,\n hilitedElementsQueryCache,\n emphasizeElements\n );\n isNonEmphasizedSelectable && clearEmphasizedElements();\n setLoadingQuery(false);\n },\n [\n iModelConnection,\n groups,\n hiddenGroupsIds,\n hilitedElementsQueryCache,\n emphasizeElements,\n isNonEmphasizedSelectable,\n ]\n );\n\n useEffect(() => {\n const visualize = async () => {\n if (groups.length > 0 && showGroupColor) {\n await visualizeGroupColorsWrapper();\n } else {\n clearEmphasizedOverriddenElements();\n }\n };\n void visualize();\n }, [groups, showGroupColor, visualizeGroupColorsWrapper]);\n\n const hideAllGroups = useCallback(\n async () => {\n setLoadingQuery(true);\n await hideGroups(iModelConnection, groups, hilitedElementsQueryCache);\n setLoadingQuery(false);\n },\n [groups, hilitedElementsQueryCache, iModelConnection]\n );\n\n const hideSingleGroupWrapper = useCallback(\n async (group: Group) => {\n setLoadingQuery(true);\n await hideGroup(iModelConnection, group, hilitedElementsQueryCache);\n setLoadingQuery(false);\n },\n [hilitedElementsQueryCache, iModelConnection]\n );\n\n const showGroup = useCallback(\n async (viewGroup: Group) => {\n clearHiddenElements();\n\n // hide group Ids filter\n const newHiddenGroups: Group[] = groups.filter((g) => hiddenGroupsIds.has(g.id) && g.id !== viewGroup.id);\n\n // view group Ids filter\n const viewGroups = groups.filter((g) => !hiddenGroupsIds.has(g.id) || g.id === viewGroup.id);\n const viewIds = await getHiliteIdsFromGroupsWrapper(viewGroups);\n\n let hiddenIds = await getHiliteIdsFromGroupsWrapper(newHiddenGroups);\n hiddenIds = hiddenIds.filter((id) => !viewIds.includes(id));\n hideElements(hiddenIds);\n },\n [groups, hiddenGroupsIds, getHiliteIdsFromGroupsWrapper]\n );\n\n const showAll = useCallback(async () => {\n setLoadingQuery(true);\n\n clearHiddenElements();\n setHiddenGroupsIds(new Set());\n const allIds = await getHiliteIdsFromGroupsWrapper(groups);\n await zoomToElements(allIds);\n\n setLoadingQuery(false);\n }, [getHiliteIdsFromGroupsWrapper, groups, setHiddenGroupsIds]);\n\n const hideAll = useCallback(async () => {\n await hideAllGroups();\n setHiddenGroupsIds(\n new Set(groups.map((g) => g.id))\n );\n const allIds = await getHiliteIdsFromGroupsWrapper(groups);\n await zoomToElements(allIds);\n }, [\n setHiddenGroupsIds,\n groups,\n hideAllGroups,\n getHiliteIdsFromGroupsWrapper,\n ]);\n\n const onModify = useCallback(\n async (group: Group, type: string) => {\n if (!onClickGroupModify) return;\n if (group.id && hiddenGroupsIds.has(group.id)) {\n await showGroup(group);\n setHiddenGroupsIds(new Set([...hiddenGroupsIds].filter((id) => id !== group.id)));\n }\n clearEmphasizedElements();\n onClickGroupModify(group, type);\n },\n [hiddenGroupsIds, onClickGroupModify, setHiddenGroupsIds, showGroup]\n );\n\n const onAddGroup = useCallback(\n (type: string) => {\n if (!onClickAddGroup) return;\n onClickAddGroup(type);\n clearEmphasizedElements();\n },\n [onClickAddGroup]\n );\n\n const groupActionButtonRenderers: ActionButtonRenderer[] = useMemo(() => [\n (props: ActionButtonRendererProps) =>\n showGroupColor ? <GroupColorLegend {...props} groups={groups} /> : [],\n (props: ActionButtonRendererProps) => (\n <GroupsShowHideButtons\n {...props}\n isLoadingQuery={isLoadingQuery}\n showGroup={showGroup}\n hideGroup={hideSingleGroupWrapper}\n />\n ),\n ].flat(), [groups, hideSingleGroupWrapper, isLoadingQuery, showGroup, showGroupColor]);\n\n return (\n <div className=\"groups-vis-container\">\n <GroupVisualizationActions\n isLoadingQuery={isLoadingQuery}\n showAll={showAll}\n hideAll={hideAll}\n />\n <Groupings\n onClickGroupModify={onModify}\n onClickAddGroup={onAddGroup}\n actionButtonRenderers={groupActionButtonRenderers}\n {...rest}\n disableActions={isLoadingQuery}\n />\n </div>\n );\n};\n"]}
@@ -0,0 +1,12 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ @import "~@itwin/itwinui-css/scss/variables";
6
+
7
+ .groups-vis-container {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: $iui-baseline;
11
+ flex-grow: 1;
12
+ }
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import "./GroupsVisualizationActions.scss";
3
+ interface GroupVisualizationActionsProps {
4
+ isLoadingQuery: boolean;
5
+ showAll: () => Promise<void>;
6
+ hideAll: () => Promise<void>;
7
+ }
8
+ export declare const GroupVisualizationActions: ({ isLoadingQuery, showAll, hideAll, }: GroupVisualizationActionsProps) => JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=GroupsVisualizationActions.d.ts.map
@@ -0,0 +1,20 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { ButtonGroup, IconButton } from "@itwin/itwinui-react";
6
+ import React from "react";
7
+ import { ToggleGroupVisibility } from "./ToggleGroupVisibility";
8
+ import { SvgVisibilityHide, SvgVisibilityShow } from "@itwin/itwinui-icons-react";
9
+ import "./GroupsVisualizationActions.scss";
10
+ import { useGroupHilitedElementsContext } from "./context/GroupHilitedElementsContext";
11
+ export const GroupVisualizationActions = ({ isLoadingQuery, showAll, hideAll, }) => {
12
+ const { showGroupColor, setShowGroupColor, } = useGroupHilitedElementsContext();
13
+ return (React.createElement(ButtonGroup, { className: "gmw-visual-buttons" },
14
+ React.createElement(ToggleGroupVisibility, { isLoadingQuery: isLoadingQuery, showGroupColor: showGroupColor, setShowGroupColor: setShowGroupColor }),
15
+ React.createElement(IconButton, { title: "Show All", onClick: showAll, disabled: isLoadingQuery, styleType: "borderless" },
16
+ React.createElement(SvgVisibilityShow, null)),
17
+ React.createElement(IconButton, { title: "Hide All", onClick: hideAll, disabled: isLoadingQuery, styleType: "borderless" },
18
+ React.createElement(SvgVisibilityHide, null))));
19
+ };
20
+ //# sourceMappingURL=GroupsVisualizationActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupsVisualizationActions.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupsVisualizationActions.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,mCAAmC,CAAC;AAC3C,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AAQvF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EACxC,cAAc,EACd,OAAO,EACP,OAAO,GACwB,EAAE,EAAE;IACnC,MAAM,EACJ,cAAc,EACd,iBAAiB,GAClB,GAAG,8BAA8B,EAAE,CAAC;IAErC,OAAO,CACL,oBAAC,WAAW,IAAC,SAAS,EAAC,oBAAoB;QACzC,oBAAC,qBAAqB,IACpB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,GACpC;QACF,oBAAC,UAAU,IACT,KAAK,EAAC,UAAU,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAC,YAAY;YAEtB,oBAAC,iBAAiB,OAAG,CACV;QACb,oBAAC,UAAU,IACT,KAAK,EAAC,UAAU,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAC,YAAY;YAEtB,oBAAC,iBAAiB,OAAG,CACV,CACD,CACf,CAAC;AAEJ,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 { ButtonGroup, IconButton } from \"@itwin/itwinui-react\";\nimport React from \"react\";\nimport { ToggleGroupVisibility } from \"./ToggleGroupVisibility\";\nimport { SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport \"./GroupsVisualizationActions.scss\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\n\ninterface GroupVisualizationActionsProps {\n isLoadingQuery: boolean;\n showAll: () => Promise<void>;\n hideAll: () => Promise<void>;\n}\n\nexport const GroupVisualizationActions = ({\n isLoadingQuery,\n showAll,\n hideAll,\n}: GroupVisualizationActionsProps) => {\n const {\n showGroupColor,\n setShowGroupColor,\n } = useGroupHilitedElementsContext();\n\n return (\n <ButtonGroup className=\"gmw-visual-buttons\">\n <ToggleGroupVisibility\n isLoadingQuery={isLoadingQuery}\n showGroupColor={showGroupColor}\n setShowGroupColor={setShowGroupColor}\n />\n <IconButton\n title=\"Show All\"\n onClick={showAll}\n disabled={isLoadingQuery}\n styleType=\"borderless\"\n >\n <SvgVisibilityShow />\n </IconButton>\n <IconButton\n title=\"Hide All\"\n onClick={hideAll}\n disabled={isLoadingQuery}\n styleType=\"borderless\"\n >\n <SvgVisibilityHide />\n </IconButton>\n </ButtonGroup>\n );\n\n};\n\n"]}
@@ -0,0 +1,9 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ @import "~@itwin/itwinui-css/scss/variables";
6
+
7
+ .gmw-visual-buttons {
8
+ flex-wrap: wrap;
9
+ }
@@ -4,7 +4,6 @@ import type { CalculatedProperty, CustomCalculation, Group, GroupProperty, Mappi
4
4
  export interface PropertyMenuProps {
5
5
  mapping: Mapping;
6
6
  group: Group;
7
- color: string;
8
7
  onClickAddGroupProperty?: () => void;
9
8
  onClickModifyGroupProperty?: (groupProperty: GroupProperty) => void;
10
9
  onClickAddCalculatedProperty?: () => void;
@@ -15,5 +14,5 @@ export interface PropertyMenuProps {
15
14
  hideCalculatedProps?: boolean;
16
15
  hideCustomCalculationProps?: boolean;
17
16
  }
18
- export declare const PropertyMenu: ({ mapping, group, color, onClickAddGroupProperty, onClickModifyGroupProperty, onClickAddCalculatedProperty, onClickModifyCalculatedProperty, onClickAddCustomCalculationProperty, onClickModifyCustomCalculation, hideGroupProps, hideCalculatedProps, hideCustomCalculationProps, }: PropertyMenuProps) => JSX.Element;
17
+ export declare const PropertyMenu: ({ mapping, group, onClickAddGroupProperty, onClickModifyGroupProperty, onClickAddCalculatedProperty, onClickModifyCalculatedProperty, onClickAddCustomCalculationProperty, onClickModifyCustomCalculation, hideGroupProps, hideCalculatedProps, hideCustomCalculationProps, }: PropertyMenuProps) => JSX.Element;
19
18
  //# sourceMappingURL=PropertyMenu.d.ts.map
@@ -2,33 +2,21 @@
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 { Presentation } from "@itwin/presentation-frontend";
6
- import { useActiveIModelConnection } from "@itwin/appui-react";
7
- import React, { useEffect, useMemo, useState } from "react";
8
- import { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements, } from "./viewerUtils";
5
+ import React, { useMemo } from "react";
9
6
  import "./PropertyMenu.scss";
10
7
  import { GroupPropertyTable } from "./GroupPropertyTable";
11
- import { IconButton, InformationPanelWrapper, toaster, ToggleSwitch, } from "@itwin/itwinui-react";
12
8
  import { useCombinedFetchRefresh } from "../hooks/useFetchData";
13
9
  import { useMappingClient } from "./context/MappingClientContext";
14
10
  import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
15
- import { getHiliteIdsAndKeysetFromGroup } from "./groupsHelpers";
16
- import { useGroupHilitedElementsContext } from "./context/GroupHilitedElementsContext";
17
11
  import { usePropertiesContext } from "./context/PropertiesContext";
18
12
  import { CalculatedPropertyTable } from "./CalculatedPropertyTable";
19
13
  import { CustomCalculationTable } from "./CustomCalculationTable";
20
- import { SvgProperties } from "@itwin/itwinui-icons-react";
21
- import { GroupInformationPanel } from "./GroupInformationPanel";
22
- export const PropertyMenu = ({ mapping, group, color, onClickAddGroupProperty, onClickModifyGroupProperty, onClickAddCalculatedProperty, onClickModifyCalculatedProperty, onClickAddCustomCalculationProperty, onClickModifyCustomCalculation, hideGroupProps = false, hideCalculatedProps = false, hideCustomCalculationProps = false, }) => {
14
+ export const PropertyMenu = ({ mapping, group, onClickAddGroupProperty, onClickModifyGroupProperty, onClickAddCalculatedProperty, onClickModifyCalculatedProperty, onClickAddCustomCalculationProperty, onClickModifyCustomCalculation, hideGroupProps = false, hideCalculatedProps = false, hideCustomCalculationProps = false, }) => {
23
15
  const groupId = group.id;
24
16
  const mappingId = mapping.id;
25
17
  const { getAccessToken, iModelId } = useGroupingMappingApiConfig();
26
- const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();
27
18
  const mappingClient = useMappingClient();
28
- const iModelConnection = useActiveIModelConnection();
29
- const { showGroupColor, setShowGroupColor, groupProperties, setGroupProperties, calculatedProperties, setCalculatedProperties, customCalculationProperties, setCustomCalculationProperties, } = usePropertiesContext();
30
- const [isInformationPanelOpen, setIsInformationPanelOpen] = useState(false);
31
- const [isLoading, setIsLoading] = useState(false);
19
+ const { groupProperties, setGroupProperties, calculatedProperties, setCalculatedProperties, customCalculationProperties, setCustomCalculationProperties, } = usePropertiesContext();
32
20
  const fetchGroupProperties = useMemo(() => {
33
21
  return async () => mappingClient.getGroupProperties(await getAccessToken(), iModelId, mappingId, groupId);
34
22
  }, [getAccessToken, mappingClient, iModelId, mappingId, groupId]);
@@ -41,40 +29,9 @@ export const PropertyMenu = ({ mapping, group, color, onClickAddGroupProperty, o
41
29
  return async () => mappingClient.getCustomCalculations(await getAccessToken(), iModelId, mappingId, groupId);
42
30
  }, [getAccessToken, mappingClient, iModelId, mappingId, groupId]);
43
31
  const { isLoading: isLoadingCustomCalculations, refreshData: refreshCustomCalculations } = useCombinedFetchRefresh(fetchCustomCalculations, setCustomCalculationProperties);
44
- useEffect(() => {
45
- const initialize = async () => {
46
- if (!iModelConnection)
47
- return;
48
- try {
49
- setIsLoading(true);
50
- clearEmphasizedOverriddenElements();
51
- if (showGroupColor) {
52
- const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);
53
- Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
54
- visualizeElements(result.ids, color);
55
- await zoomToElements(result.ids);
56
- }
57
- }
58
- catch (error) {
59
- toaster.negative("There was an error visualizing group.");
60
- /* eslint-disable no-console */
61
- console.error(error);
62
- }
63
- finally {
64
- setIsLoading(false);
65
- }
66
- };
67
- void initialize();
68
- }, [iModelConnection, group.query, group.groupName, group, hilitedElementsQueryCache, showGroupColor, color]);
69
- return (React.createElement(InformationPanelWrapper, { className: 'gmw-property-menu-wrapper' },
70
- React.createElement("div", { className: 'gmw-property-menu-container' },
71
- React.createElement("div", { className: "gmw-property-menu-toolbar" },
72
- React.createElement(ToggleSwitch, { label: 'Color Group', labelPosition: 'left', disabled: isLoading, checked: showGroupColor, onChange: () => setShowGroupColor((b) => !b) }),
73
- React.createElement(IconButton, { styleType: 'borderless', onClick: () => setIsInformationPanelOpen(true) },
74
- React.createElement(SvgProperties, null))),
75
- !hideGroupProps && (React.createElement(GroupPropertyTable, { iModelId: iModelId, mappingId: mappingId, groupId: groupId, onClickAdd: onClickAddGroupProperty, onClickModify: onClickModifyGroupProperty, isLoading: isLoadingGroupProperties, groupProperties: groupProperties !== null && groupProperties !== void 0 ? groupProperties : [], refresh: refreshGroupProperties })),
76
- !hideCalculatedProps && (React.createElement(CalculatedPropertyTable, { mappingId: mappingId, groupId: groupId, onClickAdd: onClickAddCalculatedProperty, onClickModify: onClickModifyCalculatedProperty, isLoading: isLoadingCalculatedProperties, calculatedProperties: calculatedProperties !== null && calculatedProperties !== void 0 ? calculatedProperties : [], refresh: refreshCalculatedProperties })),
77
- !hideCustomCalculationProps && (React.createElement(CustomCalculationTable, { mappingId: mappingId, groupId: groupId, onClickAdd: onClickAddCustomCalculationProperty, onClickModify: onClickModifyCustomCalculation, isLoading: isLoadingCustomCalculations, customCalculations: customCalculationProperties !== null && customCalculationProperties !== void 0 ? customCalculationProperties : [], refresh: refreshCustomCalculations }))),
78
- React.createElement(GroupInformationPanel, { isOpen: isInformationPanelOpen, onClose: () => setIsInformationPanelOpen(false), query: group.query, groupName: group.groupName })));
32
+ return (React.createElement("div", { className: 'gmw-property-menu-wrapper' },
33
+ !hideGroupProps && (React.createElement(GroupPropertyTable, { iModelId: iModelId, mappingId: mappingId, groupId: groupId, onClickAdd: onClickAddGroupProperty, onClickModify: onClickModifyGroupProperty, isLoading: isLoadingGroupProperties, groupProperties: groupProperties !== null && groupProperties !== void 0 ? groupProperties : [], refresh: refreshGroupProperties })),
34
+ !hideCalculatedProps && (React.createElement(CalculatedPropertyTable, { mappingId: mappingId, groupId: groupId, onClickAdd: onClickAddCalculatedProperty, onClickModify: onClickModifyCalculatedProperty, isLoading: isLoadingCalculatedProperties, calculatedProperties: calculatedProperties !== null && calculatedProperties !== void 0 ? calculatedProperties : [], refresh: refreshCalculatedProperties })),
35
+ !hideCustomCalculationProps && (React.createElement(CustomCalculationTable, { mappingId: mappingId, groupId: groupId, onClickAdd: onClickAddCustomCalculationProperty, onClickModify: onClickModifyCustomCalculation, isLoading: isLoadingCustomCalculations, customCalculations: customCalculationProperties !== null && customCalculationProperties !== void 0 ? customCalculationProperties : [], refresh: refreshCustomCalculations }))));
79
36
  };
80
37
  //# sourceMappingURL=PropertyMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyMenu.js","sourceRoot":"","sources":["../../../../src/widget/components/PropertyMenu.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 { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport React, { useEffect, useMemo, useState } from \"react\";\n\nimport {\n clearEmphasizedOverriddenElements,\n visualizeElements,\n zoomToElements,\n} from \"./viewerUtils\";\nimport \"./PropertyMenu.scss\";\nimport { GroupPropertyTable } from \"./GroupPropertyTable\";\nimport {\n IconButton,\n InformationPanelWrapper,\n toaster,\n ToggleSwitch,\n} from \"@itwin/itwinui-react\";\nimport { useCombinedFetchRefresh } from \"../hooks/useFetchData\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CalculatedProperty, CustomCalculation, Group, GroupProperty, Mapping } from \"@itwin/insights-client\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"./groupsHelpers\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { usePropertiesContext } from \"./context/PropertiesContext\";\nimport { CalculatedPropertyTable } from \"./CalculatedPropertyTable\";\nimport { CustomCalculationTable } from \"./CustomCalculationTable\";\nimport { SvgProperties } from \"@itwin/itwinui-icons-react\";\nimport { GroupInformationPanel } from \"./GroupInformationPanel\";\n\nexport interface PropertyMenuProps {\n mapping: Mapping;\n group: Group;\n color: string;\n onClickAddGroupProperty?: () => void;\n onClickModifyGroupProperty?: (groupProperty: GroupProperty) => void;\n onClickAddCalculatedProperty?: () => void;\n onClickModifyCalculatedProperty?: (calculatedProperty: CalculatedProperty) => void;\n onClickAddCustomCalculationProperty?: () => void;\n onClickModifyCustomCalculation?: (customCalculation: CustomCalculation) => void;\n hideGroupProps?: boolean;\n hideCalculatedProps?: boolean;\n hideCustomCalculationProps?: boolean;\n}\n\nexport const PropertyMenu = ({\n mapping,\n group,\n color,\n onClickAddGroupProperty,\n onClickModifyGroupProperty,\n onClickAddCalculatedProperty,\n onClickModifyCalculatedProperty,\n onClickAddCustomCalculationProperty,\n onClickModifyCustomCalculation,\n hideGroupProps = false,\n hideCalculatedProps = false,\n hideCustomCalculationProps = false,\n}: PropertyMenuProps) => {\n const groupId = group.id;\n const mappingId = mapping.id;\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const mappingClient = useMappingClient();\n const iModelConnection = useActiveIModelConnection();\n const {\n showGroupColor,\n setShowGroupColor,\n groupProperties,\n setGroupProperties,\n calculatedProperties,\n setCalculatedProperties,\n customCalculationProperties,\n setCustomCalculationProperties,\n } = usePropertiesContext();\n const [isInformationPanelOpen, setIsInformationPanelOpen] =\n useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const fetchGroupProperties = useMemo(\n () => {\n return async () => mappingClient.getGroupProperties(await getAccessToken(), iModelId, mappingId, groupId);\n },\n [getAccessToken, mappingClient, iModelId, mappingId, groupId],\n );\n const { isLoading: isLoadingGroupProperties, refreshData: refreshGroupProperties } =\n useCombinedFetchRefresh<GroupProperty>(fetchGroupProperties, setGroupProperties);\n\n const fetchCalculatedProperties = useMemo(\n () => {\n return async () => mappingClient.getCalculatedProperties(await getAccessToken(), iModelId, mappingId, groupId);\n },\n [getAccessToken, mappingClient, iModelId, mappingId, groupId],\n );\n const { isLoading: isLoadingCalculatedProperties, refreshData: refreshCalculatedProperties } =\n useCombinedFetchRefresh<CalculatedProperty>(fetchCalculatedProperties, setCalculatedProperties);\n\n const fetchCustomCalculations = useMemo(\n () => {\n return async () => mappingClient.getCustomCalculations(await getAccessToken(), iModelId, mappingId, groupId);\n },\n [getAccessToken, mappingClient, iModelId, mappingId, groupId],\n );\n const { isLoading: isLoadingCustomCalculations, refreshData: refreshCustomCalculations } =\n useCombinedFetchRefresh<CustomCalculation>(fetchCustomCalculations, setCustomCalculationProperties);\n\n useEffect(() => {\n const initialize = async () => {\n if (!iModelConnection) return;\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 initialize();\n }, [iModelConnection, group.query, group.groupName, group, hilitedElementsQueryCache, showGroupColor, color]);\n\n return (\n <InformationPanelWrapper className='gmw-property-menu-wrapper'>\n <div className='gmw-property-menu-container'>\n <div className=\"gmw-property-menu-toolbar\">\n <ToggleSwitch\n label='Color Group'\n labelPosition='left'\n disabled={isLoading}\n checked={showGroupColor}\n onChange={() => setShowGroupColor((b) => !b)}\n ></ToggleSwitch>\n <IconButton\n styleType='borderless'\n onClick={() => setIsInformationPanelOpen(true)}\n >\n <SvgProperties />\n </IconButton>\n </div>\n {!hideGroupProps && (\n <GroupPropertyTable\n iModelId={iModelId}\n mappingId={mappingId}\n groupId={groupId}\n onClickAdd={onClickAddGroupProperty}\n onClickModify={onClickModifyGroupProperty}\n isLoading={isLoadingGroupProperties}\n groupProperties={groupProperties ?? []}\n refresh={refreshGroupProperties}\n />\n )}\n {!hideCalculatedProps && (\n <CalculatedPropertyTable\n mappingId={mappingId}\n groupId={groupId}\n onClickAdd={onClickAddCalculatedProperty}\n onClickModify={onClickModifyCalculatedProperty}\n isLoading={isLoadingCalculatedProperties}\n calculatedProperties={calculatedProperties ?? []}\n refresh={refreshCalculatedProperties}\n />\n )}\n {!hideCustomCalculationProps && (\n <CustomCalculationTable\n mappingId={mappingId}\n groupId={groupId}\n onClickAdd={onClickAddCustomCalculationProperty}\n onClickModify={onClickModifyCustomCalculation}\n isLoading={isLoadingCustomCalculations}\n customCalculations={customCalculationProperties ?? []}\n refresh={refreshCustomCalculations}\n />\n )}\n </div>\n <GroupInformationPanel\n isOpen={isInformationPanelOpen}\n onClose={() => setIsInformationPanelOpen(false)}\n query={group.query}\n groupName={group.groupName}\n />\n </InformationPanelWrapper>\n );\n};\n"]}
1
+ {"version":3,"file":"PropertyMenu.js","sourceRoot":"","sources":["../../../../src/widget/components/PropertyMenu.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, { useMemo } from \"react\";\nimport \"./PropertyMenu.scss\";\nimport { GroupPropertyTable } from \"./GroupPropertyTable\";\nimport { useCombinedFetchRefresh } from \"../hooks/useFetchData\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CalculatedProperty, CustomCalculation, Group, GroupProperty, Mapping } from \"@itwin/insights-client\";\nimport { usePropertiesContext } from \"./context/PropertiesContext\";\nimport { CalculatedPropertyTable } from \"./CalculatedPropertyTable\";\nimport { CustomCalculationTable } from \"./CustomCalculationTable\";\n\nexport interface PropertyMenuProps {\n mapping: Mapping;\n group: Group;\n onClickAddGroupProperty?: () => void;\n onClickModifyGroupProperty?: (groupProperty: GroupProperty) => void;\n onClickAddCalculatedProperty?: () => void;\n onClickModifyCalculatedProperty?: (calculatedProperty: CalculatedProperty) => void;\n onClickAddCustomCalculationProperty?: () => void;\n onClickModifyCustomCalculation?: (customCalculation: CustomCalculation) => void;\n hideGroupProps?: boolean;\n hideCalculatedProps?: boolean;\n hideCustomCalculationProps?: boolean;\n}\n\nexport const PropertyMenu = ({\n mapping,\n group,\n onClickAddGroupProperty,\n onClickModifyGroupProperty,\n onClickAddCalculatedProperty,\n onClickModifyCalculatedProperty,\n onClickAddCustomCalculationProperty,\n onClickModifyCustomCalculation,\n hideGroupProps = false,\n hideCalculatedProps = false,\n hideCustomCalculationProps = false,\n}: PropertyMenuProps) => {\n const groupId = group.id;\n const mappingId = mapping.id;\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const {\n groupProperties,\n setGroupProperties,\n calculatedProperties,\n setCalculatedProperties,\n customCalculationProperties,\n setCustomCalculationProperties,\n } = usePropertiesContext();\n\n const fetchGroupProperties = useMemo(\n () => {\n return async () => mappingClient.getGroupProperties(await getAccessToken(), iModelId, mappingId, groupId);\n },\n [getAccessToken, mappingClient, iModelId, mappingId, groupId],\n );\n const { isLoading: isLoadingGroupProperties, refreshData: refreshGroupProperties } =\n useCombinedFetchRefresh<GroupProperty>(fetchGroupProperties, setGroupProperties);\n\n const fetchCalculatedProperties = useMemo(\n () => {\n return async () => mappingClient.getCalculatedProperties(await getAccessToken(), iModelId, mappingId, groupId);\n },\n [getAccessToken, mappingClient, iModelId, mappingId, groupId],\n );\n const { isLoading: isLoadingCalculatedProperties, refreshData: refreshCalculatedProperties } =\n useCombinedFetchRefresh<CalculatedProperty>(fetchCalculatedProperties, setCalculatedProperties);\n\n const fetchCustomCalculations = useMemo(\n () => {\n return async () => mappingClient.getCustomCalculations(await getAccessToken(), iModelId, mappingId, groupId);\n },\n [getAccessToken, mappingClient, iModelId, mappingId, groupId],\n );\n const { isLoading: isLoadingCustomCalculations, refreshData: refreshCustomCalculations } =\n useCombinedFetchRefresh<CustomCalculation>(fetchCustomCalculations, setCustomCalculationProperties);\n\n return (\n <div className='gmw-property-menu-wrapper'>\n {!hideGroupProps && (\n <GroupPropertyTable\n iModelId={iModelId}\n mappingId={mappingId}\n groupId={groupId}\n onClickAdd={onClickAddGroupProperty}\n onClickModify={onClickModifyGroupProperty}\n isLoading={isLoadingGroupProperties}\n groupProperties={groupProperties ?? []}\n refresh={refreshGroupProperties}\n />\n )}\n {!hideCalculatedProps && (\n <CalculatedPropertyTable\n mappingId={mappingId}\n groupId={groupId}\n onClickAdd={onClickAddCalculatedProperty}\n onClickModify={onClickModifyCalculatedProperty}\n isLoading={isLoadingCalculatedProperties}\n calculatedProperties={calculatedProperties ?? []}\n refresh={refreshCalculatedProperties}\n />\n )}\n {!hideCustomCalculationProps && (\n <CustomCalculationTable\n mappingId={mappingId}\n groupId={groupId}\n onClickAdd={onClickAddCustomCalculationProperty}\n onClickModify={onClickModifyCustomCalculation}\n isLoading={isLoadingCustomCalculations}\n customCalculations={customCalculationProperties ?? []}\n refresh={refreshCustomCalculations}\n />\n )}\n </div>\n );\n};\n"]}
@@ -7,21 +7,6 @@
7
7
  .gmw-property-menu-wrapper {
8
8
  display: flex;
9
9
  flex-direction: column;
10
- height: 100%;
11
-
12
- .gmw-property-header {
13
- display: flex;
14
- justify-content: space-between;
15
- }
16
-
17
- .gmw-property-menu-container {
18
- display: flex;
19
- flex-direction: column;
20
- overflow: auto;
21
- gap: $iui-baseline * 2;
22
- .gmw-property-menu-toolbar {
23
- display: flex;
24
- justify-content: space-between;
25
- }
26
- }
10
+ flex-grow: 1;
11
+ gap: $iui-baseline * 2;
27
12
  }
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import type { PropertyMenuProps } from "./PropertyMenu";
3
+ import "./PropertyMenuWithVisualization.scss";
4
+ export interface PropertyMenuWithVisualizationProps extends PropertyMenuProps {
5
+ color: string;
6
+ }
7
+ export declare const PropertyMenuWithVisualization: ({ group, color, ...rest }: PropertyMenuWithVisualizationProps) => JSX.Element;
8
+ //# sourceMappingURL=PropertyMenuWithVisualization.d.ts.map
@@ -0,0 +1,22 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import React, { useState } from "react";
6
+ import { PropertyMenu } from "./PropertyMenu";
7
+ import { GroupColorToggle } from "./GroupColorToggle";
8
+ import { IconButton, InformationPanelWrapper } from "@itwin/itwinui-react";
9
+ import { GroupInformationPanel } from "./GroupInformationPanel";
10
+ import { SvgProperties } from "@itwin/itwinui-icons-react";
11
+ import "./PropertyMenuWithVisualization.scss";
12
+ export const PropertyMenuWithVisualization = ({ group, color, ...rest }) => {
13
+ const [isInformationPanelOpen, setIsInformationPanelOpen] = useState(false);
14
+ return (React.createElement(InformationPanelWrapper, { className: 'gmw-property-menu-vis-wrapper' },
15
+ React.createElement("div", { className: "gmw-property-menu-vis-toolbar" },
16
+ React.createElement(GroupColorToggle, { group: group, color: color, labelPosition: "left" }),
17
+ React.createElement(IconButton, { styleType: 'borderless', onClick: () => setIsInformationPanelOpen(true) },
18
+ React.createElement(SvgProperties, null))),
19
+ React.createElement(PropertyMenu, { group: group, ...rest }),
20
+ React.createElement(GroupInformationPanel, { isOpen: isInformationPanelOpen, onClose: () => setIsInformationPanelOpen(false), query: group.query, groupName: group.groupName })));
21
+ };
22
+ //# sourceMappingURL=PropertyMenuWithVisualization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyMenuWithVisualization.js","sourceRoot":"","sources":["../../../../src/widget/components/PropertyMenuWithVisualization.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,sCAAsC,CAAC;AAM9C,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,EAC5C,KAAK,EACL,KAAK,EACL,GAAG,IAAI,EAC4B,EAAE,EAAE;IACvC,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAErF,OAAO,CACL,oBAAC,uBAAuB,IAAC,SAAS,EAAC,+BAA+B;QAChE,6BAAK,SAAS,EAAC,+BAA+B;YAC5C,oBAAC,gBAAgB,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAC,MAAM,GAAG;YACrE,oBAAC,UAAU,IACT,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC;gBAE9C,oBAAC,aAAa,OAAG,CACN,CACT;QACN,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,KAAM,IAAI,GAAI;QACxC,oBAAC,qBAAqB,IACpB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAC/C,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,SAAS,EAAE,KAAK,CAAC,SAAS,GAC1B,CACsB,CAC3B,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, { useState } from \"react\";\nimport type { PropertyMenuProps } from \"./PropertyMenu\";\nimport { PropertyMenu } from \"./PropertyMenu\";\nimport { GroupColorToggle } from \"./GroupColorToggle\";\nimport { IconButton, InformationPanelWrapper } from \"@itwin/itwinui-react\";\nimport { GroupInformationPanel } from \"./GroupInformationPanel\";\nimport { SvgProperties } from \"@itwin/itwinui-icons-react\";\nimport \"./PropertyMenuWithVisualization.scss\";\n\nexport interface PropertyMenuWithVisualizationProps extends PropertyMenuProps {\n color: string;\n}\n\nexport const PropertyMenuWithVisualization = ({\n group,\n color,\n ...rest\n}: PropertyMenuWithVisualizationProps) => {\n const [isInformationPanelOpen, setIsInformationPanelOpen] = useState<boolean>(false);\n\n return (\n <InformationPanelWrapper className='gmw-property-menu-vis-wrapper'>\n <div className=\"gmw-property-menu-vis-toolbar\">\n <GroupColorToggle group={group} color={color} labelPosition=\"left\" />\n <IconButton\n styleType='borderless'\n onClick={() => setIsInformationPanelOpen(true)}\n >\n <SvgProperties />\n </IconButton>\n </div>\n <PropertyMenu group={group} {...rest} />\n <GroupInformationPanel\n isOpen={isInformationPanelOpen}\n onClose={() => setIsInformationPanelOpen(false)}\n query={group.query}\n groupName={group.groupName}\n />\n </InformationPanelWrapper>\n );\n};\n"]}
@@ -0,0 +1,16 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ @import "~@itwin/itwinui-css/scss/variables";
6
+
7
+ .gmw-property-menu-vis-wrapper {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: $iui-baseline;
11
+ flex-grow: 1;
12
+ .gmw-property-menu-vis-toolbar {
13
+ display: flex;
14
+ justify-content: space-between;
15
+ }
16
+ }
@@ -1,11 +1,13 @@
1
1
  /// <reference types="react" />
2
2
  import type { GroupingCustomUI } from "./customUI/GroupingMappingCustomUI";
3
+ import type { Group } from "@itwin/insights-client";
3
4
  export interface QueryBuilderCustomUIProps {
4
5
  queryGenerationType: string;
5
6
  groupUIs: GroupingCustomUI[];
6
7
  isUpdating: boolean;
7
8
  resetView: () => Promise<void>;
8
9
  setQuery: (query: string) => void;
10
+ group?: Group;
9
11
  }
10
- export declare const QueryBuilderCustomUI: ({ queryGenerationType, groupUIs, isUpdating, resetView, setQuery, }: QueryBuilderCustomUIProps) => JSX.Element;
12
+ export declare const QueryBuilderCustomUI: ({ queryGenerationType, groupUIs, isUpdating, resetView, setQuery, group, }: QueryBuilderCustomUIProps) => JSX.Element;
11
13
  //# sourceMappingURL=QueryBuilderCustomUI.d.ts.map
@@ -4,7 +4,7 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import React from "react";
6
6
  import { EmptyMessage } from "./utils";
7
- export const QueryBuilderCustomUI = ({ queryGenerationType, groupUIs, isUpdating, resetView, setQuery, }) => {
7
+ export const QueryBuilderCustomUI = ({ queryGenerationType, groupUIs, isUpdating, resetView, setQuery, group, }) => {
8
8
  if (queryGenerationType && queryGenerationType.length > 0) {
9
9
  const selectedCustomUI = groupUIs.find((e) => e.name === queryGenerationType);
10
10
  if (selectedCustomUI) {
@@ -12,6 +12,7 @@ export const QueryBuilderCustomUI = ({ queryGenerationType, groupUIs, isUpdating
12
12
  updateQuery: setQuery,
13
13
  isUpdating,
14
14
  resetView,
15
+ initialEditModeQuery: group === null || group === void 0 ? void 0 : group.query,
15
16
  });
16
17
  }
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilderCustomUI.js","sourceRoot":"","sources":["../../../../src/widget/components/QueryBuilderCustomUI.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAUvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,SAAS,EACT,QAAQ,GACkB,EAAE,EAAE;IAC9B,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;QACzD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;QAC9E,IAAI,gBAAgB,EAAE;YACpB,OAAO,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBACvD,WAAW,EAAE,QAAQ;gBACrB,UAAU;gBACV,SAAS;aACV,CAAC,CAAC;SACJ;KACF;IACD,OAAO,oBAAC,YAAY,IAAC,OAAO,EAAC,uCAAuC,GAAG,CAAC;AAC1E,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 from \"react\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { EmptyMessage } from \"./utils\";\n\nexport interface QueryBuilderCustomUIProps {\n queryGenerationType: string;\n groupUIs: GroupingCustomUI[];\n isUpdating: boolean;\n resetView: () => Promise<void>;\n setQuery: (query: string) => void;\n}\n\nexport const QueryBuilderCustomUI = ({\n queryGenerationType,\n groupUIs,\n isUpdating,\n resetView,\n setQuery,\n}: QueryBuilderCustomUIProps) => {\n if (queryGenerationType && queryGenerationType.length > 0) {\n const selectedCustomUI = groupUIs.find((e) => e.name === queryGenerationType);\n if (selectedCustomUI) {\n return React.createElement(selectedCustomUI.uiComponent, {\n updateQuery: setQuery,\n isUpdating,\n resetView,\n });\n }\n }\n return <EmptyMessage message=\"No query generation method selected. \" />;\n};\n"]}
1
+ {"version":3,"file":"QueryBuilderCustomUI.js","sourceRoot":"","sources":["../../../../src/widget/components/QueryBuilderCustomUI.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAYvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,SAAS,EACT,QAAQ,EACR,KAAK,GACqB,EAAE,EAAE;IAC9B,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;QACzD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;QAC9E,IAAI,gBAAgB,EAAE;YACpB,OAAO,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBACvD,WAAW,EAAE,QAAQ;gBACrB,UAAU;gBACV,SAAS;gBACT,oBAAoB,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK;aACnC,CAAC,CAAC;SACJ;KACF;IACD,OAAO,oBAAC,YAAY,IAAC,OAAO,EAAC,uCAAuC,GAAG,CAAC;AAC1E,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 from \"react\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { EmptyMessage } from \"./utils\";\nimport type { Group } from \"@itwin/insights-client\";\n\nexport interface QueryBuilderCustomUIProps {\n queryGenerationType: string;\n groupUIs: GroupingCustomUI[];\n isUpdating: boolean;\n resetView: () => Promise<void>;\n setQuery: (query: string) => void;\n group?: Group;\n}\n\nexport const QueryBuilderCustomUI = ({\n queryGenerationType,\n groupUIs,\n isUpdating,\n resetView,\n setQuery,\n group,\n}: QueryBuilderCustomUIProps) => {\n if (queryGenerationType && queryGenerationType.length > 0) {\n const selectedCustomUI = groupUIs.find((e) => e.name === queryGenerationType);\n if (selectedCustomUI) {\n return React.createElement(selectedCustomUI.uiComponent, {\n updateQuery: setQuery,\n isUpdating,\n resetView,\n initialEditModeQuery: group?.query,\n });\n }\n }\n return <EmptyMessage message=\"No query generation method selected. \" />;\n};\n"]}
@@ -0,0 +1,16 @@
1
+ /// <reference types="react" />
2
+ import { CalculatedPropertyType } from "@itwin/insights-client";
3
+ import type { SelectOption } from "@itwin/itwinui-react";
4
+ import type SimpleReactValidator from "simple-react-validator";
5
+ interface SharedCalculatedPropertyFormsProps {
6
+ propertyName: string;
7
+ setPropertyName: (value: string) => void;
8
+ type: CalculatedPropertyType | undefined;
9
+ setType: (value: CalculatedPropertyType | undefined) => void;
10
+ validator: SimpleReactValidator;
11
+ itemRenderer?: (option: SelectOption<string>) => JSX.Element;
12
+ selectedItemRenderer?: (option: SelectOption<string>) => JSX.Element;
13
+ }
14
+ export declare const SharedCalculatedPropertyForms: ({ propertyName, setPropertyName, type, setType, validator, itemRenderer, selectedItemRenderer, }: SharedCalculatedPropertyFormsProps) => JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=SharedCalculatedPropertyForms.d.ts.map
@@ -0,0 +1,39 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { CalculatedPropertyType, } from "@itwin/insights-client";
6
+ import React, { useCallback } from "react";
7
+ import { NAME_REQUIREMENTS } from "../hooks/useValidator";
8
+ import { LabeledInput, LabeledSelect } from "@itwin/itwinui-react";
9
+ export const SharedCalculatedPropertyForms = ({ propertyName, setPropertyName, type, setType, validator, itemRenderer, selectedItemRenderer, }) => {
10
+ const generateOptionsFromCalculatedPropertyType = useCallback(() => {
11
+ const options = [];
12
+ const indexableEnum = CalculatedPropertyType;
13
+ for (const key in indexableEnum) {
14
+ if (typeof indexableEnum[key] === "string" && key !== "Undefined") {
15
+ // Generate labels by adding space between capitals
16
+ const label = key
17
+ .replace(/([A-Z])/g, " $1")
18
+ .trim()
19
+ .replace(/^\w/, (c) => c.toUpperCase());
20
+ options.push({ value: indexableEnum[key], label });
21
+ }
22
+ }
23
+ return options;
24
+ }, []);
25
+ return (React.createElement(React.Fragment, null,
26
+ React.createElement(LabeledInput, { value: propertyName, required: true, name: "name", label: "Name", onChange: (event) => {
27
+ setPropertyName(event.target.value);
28
+ validator.showMessageFor("name");
29
+ }, message: validator.message("name", propertyName, NAME_REQUIREMENTS), status: validator.message("name", propertyName, NAME_REQUIREMENTS)
30
+ ? "negative"
31
+ : undefined, onBlur: () => {
32
+ validator.showMessageFor("name");
33
+ }, onBlurCapture: (event) => {
34
+ setPropertyName(event.target.value);
35
+ validator.showMessageFor("name");
36
+ } }),
37
+ React.createElement(LabeledSelect, { label: "Quantity Type", required: true, options: generateOptionsFromCalculatedPropertyType(), value: type, onChange: setType, itemRenderer: itemRenderer, selectedItemRenderer: selectedItemRenderer, onShow: () => { }, onHide: () => { } })));
38
+ };
39
+ //# sourceMappingURL=SharedCalculatedPropertyForms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedCalculatedPropertyForms.js","sourceRoot":"","sources":["../../../../src/widget/components/SharedCalculatedPropertyForms.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EACL,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAanE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,EAC5C,YAAY,EACZ,eAAe,EACf,IAAI,EACJ,OAAO,EACP,SAAS,EACT,YAAY,EACZ,oBAAoB,GACe,EAAE,EAAE;IAEvC,MAAM,yCAAyC,GAAG,WAAW,CAAC,GAAG,EAAE;QACjE,MAAM,OAAO,GAA2C,EAAE,CAAC;QAE3D,MAAM,aAAa,GAAG,sBAA8D,CAAC;QAErF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;YAC/B,IAAI,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,KAAK,WAAW,EAAE;gBACjE,mDAAmD;gBACnD,MAAM,KAAK,GAAG,GAAG;qBACd,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;qBAC1B,IAAI,EAAE;qBACN,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAA2B,EAAE,KAAK,EAAE,CAAC,CAAC;aAC9E;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL;QACE,oBAAC,YAAY,IACX,KAAK,EAAE,YAAY,EACnB,QAAQ,QACR,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,MAAM,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC,EACD,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,EACnE,MAAM,EACJ,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC;gBACxD,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,SAAS,EAEf,MAAM,EAAE,GAAG,EAAE;gBACX,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC,EACD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvB,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC,GACD;QACF,oBAAC,aAAa,IACZ,KAAK,EAAC,eAAe,EACrB,QAAQ,QACR,OAAO,EAAE,yCAAyC,EAAE,EACpD,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EACjB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GACjB,CACD,CACJ,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 {\n CalculatedPropertyType,\n} from \"@itwin/insights-client\";\nimport React, { useCallback } from \"react\";\nimport { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport { LabeledInput, LabeledSelect } from \"@itwin/itwinui-react\";\nimport type SimpleReactValidator from \"simple-react-validator\";\n\ninterface SharedCalculatedPropertyFormsProps {\n propertyName: string;\n setPropertyName: (value: string) => void;\n type: CalculatedPropertyType | undefined;\n setType: (value: CalculatedPropertyType | undefined) => void;\n validator: SimpleReactValidator;\n itemRenderer?: (option: SelectOption<string>) => JSX.Element;\n selectedItemRenderer?: (option: SelectOption<string>) => JSX.Element;\n}\n\nexport const SharedCalculatedPropertyForms = ({\n propertyName,\n setPropertyName,\n type,\n setType,\n validator,\n itemRenderer,\n selectedItemRenderer,\n}: SharedCalculatedPropertyFormsProps) => {\n\n const generateOptionsFromCalculatedPropertyType = useCallback(() => {\n const options: SelectOption<CalculatedPropertyType>[] = [];\n\n const indexableEnum = CalculatedPropertyType as unknown as { [key: string]: string };\n\n for (const key in indexableEnum) {\n if (typeof indexableEnum[key] === \"string\" && key !== \"Undefined\") {\n // Generate labels by adding space between capitals\n const label = key\n .replace(/([A-Z])/g, \" $1\")\n .trim()\n .replace(/^\\w/, (c) => c.toUpperCase());\n options.push({ value: indexableEnum[key] as CalculatedPropertyType, label });\n }\n }\n return options;\n }, []);\n\n return (\n <>\n <LabeledInput\n value={propertyName}\n required\n name=\"name\"\n label=\"Name\"\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", propertyName, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", propertyName, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledSelect<CalculatedPropertyType>\n label=\"Quantity Type\"\n required\n options={generateOptionsFromCalculatedPropertyType()}\n value={type}\n onChange={setType}\n itemRenderer={itemRenderer}\n selectedItemRenderer={selectedItemRenderer}\n onShow={() => { }}\n onHide={() => { }}\n />\n </>\n );\n};\n"]}
@@ -8,11 +8,11 @@ export interface QueryCacheItem {
8
8
  }
9
9
  export interface GroupHilitedElements {
10
10
  hilitedElementsQueryCache: MutableRefObject<Map<string, QueryCacheItem>>;
11
- hiddenGroupsIds: string[];
11
+ hiddenGroupsIds: Set<string>;
12
12
  showGroupColor: boolean;
13
13
  groups: Group[];
14
14
  setGroups: (groups: Group[]) => void;
15
- setHiddenGroupsIds: (hiddenGroupIds: string[]) => void;
15
+ setHiddenGroupsIds: (hiddenGroupIds: Set<string>) => void;
16
16
  setShowGroupColor: (showGroupColor: boolean | ((showGroupColor: boolean) => boolean)) => void;
17
17
  }
18
18
  export declare const GroupHilitedElementsContext: React.Context<GroupHilitedElements>;
@@ -5,7 +5,7 @@
5
5
  import * as React from "react";
6
6
  export const GroupHilitedElementsContext = React.createContext({
7
7
  hilitedElementsQueryCache: { current: new Map() },
8
- hiddenGroupsIds: [],
8
+ hiddenGroupsIds: new Set(),
9
9
  showGroupColor: false,
10
10
  groups: [],
11
11
  setGroups: () => { },