@itwin/grouping-mapping-widget 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js +1 -3
  2. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -1
  3. package/lib/cjs/widget/components/GroupAction.d.ts +1 -0
  4. package/lib/cjs/widget/components/GroupAction.js +37 -71
  5. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  6. package/lib/cjs/widget/components/GroupColorToggle.js +2 -2
  7. package/lib/cjs/widget/components/GroupColorToggle.js.map +1 -1
  8. package/lib/cjs/widget/components/GroupItem.d.ts +1 -1
  9. package/lib/cjs/widget/components/GroupItem.js +2 -2
  10. package/lib/cjs/widget/components/GroupItem.js.map +1 -1
  11. package/lib/cjs/widget/components/GroupMenuActions.d.ts +1 -1
  12. package/lib/cjs/widget/components/GroupMenuActions.js.map +1 -1
  13. package/lib/cjs/widget/components/GroupPropertyAction.js +1 -3
  14. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  15. package/lib/cjs/widget/components/GroupingMappingContext.d.ts +5 -0
  16. package/lib/cjs/widget/components/GroupingMappingContext.js +5 -2
  17. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
  18. package/lib/cjs/widget/components/GroupingMappingRouter.js +1 -1
  19. package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -1
  20. package/lib/cjs/widget/components/GroupsVisualization.js +2 -6
  21. package/lib/cjs/widget/components/GroupsVisualization.js.map +1 -1
  22. package/lib/cjs/widget/components/Mapping.js +1 -1
  23. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  24. package/lib/cjs/widget/components/QueryBuilderStep.d.ts +2 -1
  25. package/lib/cjs/widget/components/QueryBuilderStep.js +2 -1
  26. package/lib/cjs/widget/components/QueryBuilderStep.js.map +1 -1
  27. package/lib/cjs/widget/components/context/GroupingApiConfigContext.d.ts +2 -0
  28. package/lib/cjs/widget/components/context/GroupingApiConfigContext.js +1 -0
  29. package/lib/cjs/widget/components/context/GroupingApiConfigContext.js.map +1 -1
  30. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js +2 -2
  31. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  32. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.scss +0 -1
  33. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.scss +0 -1
  34. package/lib/cjs/widget/hooks/useVisualization.d.ts +11 -0
  35. package/lib/cjs/widget/hooks/useVisualization.js +68 -0
  36. package/lib/cjs/widget/hooks/useVisualization.js.map +1 -0
  37. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js +1 -3
  38. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -1
  39. package/lib/esm/widget/components/GroupAction.d.ts +1 -0
  40. package/lib/esm/widget/components/GroupAction.js +37 -71
  41. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  42. package/lib/esm/widget/components/GroupColorToggle.js +2 -2
  43. package/lib/esm/widget/components/GroupColorToggle.js.map +1 -1
  44. package/lib/esm/widget/components/GroupItem.d.ts +1 -1
  45. package/lib/esm/widget/components/GroupItem.js +2 -2
  46. package/lib/esm/widget/components/GroupItem.js.map +1 -1
  47. package/lib/esm/widget/components/GroupMenuActions.d.ts +1 -1
  48. package/lib/esm/widget/components/GroupMenuActions.js.map +1 -1
  49. package/lib/esm/widget/components/GroupPropertyAction.js +1 -3
  50. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  51. package/lib/esm/widget/components/GroupingMappingContext.d.ts +5 -0
  52. package/lib/esm/widget/components/GroupingMappingContext.js +5 -2
  53. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
  54. package/lib/esm/widget/components/GroupingMappingRouter.js +1 -1
  55. package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -1
  56. package/lib/esm/widget/components/GroupsVisualization.js +2 -6
  57. package/lib/esm/widget/components/GroupsVisualization.js.map +1 -1
  58. package/lib/esm/widget/components/Mapping.js +1 -1
  59. package/lib/esm/widget/components/Mapping.js.map +1 -1
  60. package/lib/esm/widget/components/QueryBuilderStep.d.ts +2 -1
  61. package/lib/esm/widget/components/QueryBuilderStep.js +3 -2
  62. package/lib/esm/widget/components/QueryBuilderStep.js.map +1 -1
  63. package/lib/esm/widget/components/context/GroupingApiConfigContext.d.ts +2 -0
  64. package/lib/esm/widget/components/context/GroupingApiConfigContext.js +1 -0
  65. package/lib/esm/widget/components/context/GroupingApiConfigContext.js.map +1 -1
  66. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js +2 -2
  67. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  68. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.scss +0 -1
  69. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.scss +0 -1
  70. package/lib/esm/widget/hooks/useVisualization.d.ts +11 -0
  71. package/lib/esm/widget/hooks/useVisualization.js +64 -0
  72. package/lib/esm/widget/hooks/useVisualization.js.map +1 -0
  73. package/package.json +1 -1
@@ -39,15 +39,13 @@ require("./CalculatedPropertyActionWithVisuals.scss");
39
39
  const MappingClientContext_1 = require("./context/MappingClientContext");
40
40
  const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
41
41
  const GroupHilitedElementsContext_1 = require("./context/GroupHilitedElementsContext");
42
- const appui_react_1 = require("@itwin/appui-react");
43
42
  const groupsHelpers_1 = require("./groupsHelpers");
44
43
  const SharedCalculatedPropertyForms_1 = require("./SharedCalculatedPropertyForms");
45
44
  const CalculatedPropertyActionWithVisuals = ({ mappingId, group, calculatedProperty, onSaveSuccess, onClickCancel, }) => {
46
45
  var _a;
47
- const { getAccessToken, iModelId } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
46
+ const { getAccessToken, iModelId, iModelConnection } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
48
47
  const mappingClient = MappingClientContext_1.useMappingClient();
49
48
  const [propertyName, setPropertyName] = react_1.useState((_a = calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.propertyName) !== null && _a !== void 0 ? _a : "");
50
- const iModelConnection = appui_react_1.useActiveIModelConnection();
51
49
  const [type, setType] = react_1.useState(calculatedProperty === null || calculatedProperty === void 0 ? void 0 : calculatedProperty.type);
52
50
  const [bboxDecorator, setBboxDecorator] = react_1.useState();
53
51
  const [isLoading, setIsLoading] = react_1.useState(false);
@@ -1 +1 @@
1
- {"version":3,"file":"CalculatedPropertyActionWithVisuals.js","sourceRoot":"","sources":["../../../../src/widget/components/CalculatedPropertyActionWithVisuals.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Fieldset,\n MenuItem,\n Small,\n ToggleSwitch,\n} from \"@itwin/itwinui-react\";\nimport React, { useEffect, useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport {\n BboxDimension,\n BboxDimensionsDecorator,\n} from \"../../decorators/BboxDimensionsDecorator\";\nimport useValidator from \"../hooks/useValidator\";\nimport { handleError } from \"./utils\";\nimport { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements } from \"./viewerUtils\";\nimport \"./CalculatedPropertyActionWithVisuals.scss\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CalculatedProperty, CalculatedPropertyType, Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"./groupsHelpers\";\nimport { SharedCalculatedPropertyForms } from \"./SharedCalculatedPropertyForms\";\n\nexport interface CalculatedPropertyActionWithVisualsProps {\n mappingId: string;\n group: Group;\n calculatedProperty?: CalculatedProperty;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const CalculatedPropertyActionWithVisuals = ({\n mappingId,\n group,\n calculatedProperty,\n onSaveSuccess,\n onClickCancel,\n}: CalculatedPropertyActionWithVisualsProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\n calculatedProperty?.propertyName ?? \"\",\n );\n const iModelConnection = useActiveIModelConnection();\n const [type, setType] = useState<CalculatedPropertyType | undefined>(calculatedProperty?.type);\n const [bboxDecorator, setBboxDecorator] = useState<BboxDimensionsDecorator | undefined>();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const [inferredSpatialData, setInferredSpatialData] = useState<Map<BboxDimension, number> | undefined>();\n const [validator, showValidationMessage] = useValidator();\n const [resolvedHiliteIds, setResolvedHiliteIds] = useState<string[]>([]);\n const [colorProperty, setColorProperty] = useState<boolean>(false);\n\n useEffect(() => {\n const decorator = new BboxDimensionsDecorator();\n IModelApp.viewManager.addDecorator(decorator);\n setBboxDecorator(decorator);\n return () => {\n IModelApp.viewManager.dropDecorator(decorator);\n };\n }, []);\n\n useEffect(() => {\n const initialize = async () => {\n if (!iModelConnection) return;\n clearEmphasizedOverriddenElements();\n if (!colorProperty) return;\n setIsLoading(true);\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);\n setResolvedHiliteIds(result.ids);\n setIsLoading(false);\n };\n void initialize();\n }, [iModelConnection, hilitedElementsQueryCache, group, colorProperty]);\n\n useEffect(() => {\n if (!colorProperty || resolvedHiliteIds.length === 0) {\n return;\n }\n visualizeElements([resolvedHiliteIds[0]], \"red\");\n void zoomToElements([resolvedHiliteIds[0]]);\n }, [colorProperty, resolvedHiliteIds]);\n\n useEffect(() => {\n if (!colorProperty || resolvedHiliteIds.length === 0) {\n return;\n }\n const setContext = async () => {\n if (bboxDecorator) {\n await bboxDecorator.setContext(resolvedHiliteIds[0]);\n setInferredSpatialData(bboxDecorator.getInferredSpatialData());\n }\n };\n void setContext();\n }, [bboxDecorator, colorProperty, resolvedHiliteIds]);\n\n useEffect(() => {\n if (bboxDecorator && type && inferredSpatialData) {\n inferredSpatialData.has(BboxDimension[type as keyof typeof BboxDimension]) && colorProperty\n ? bboxDecorator.drawContext(\n BboxDimension[type as keyof typeof BboxDimension],\n )\n : bboxDecorator.clearContext();\n }\n }, [bboxDecorator, colorProperty, inferredSpatialData, type]);\n\n const onSave = async () => {\n if (!validator.allValid() || !type) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n\n const accessToken = await getAccessToken();\n\n calculatedProperty\n ? await mappingClient.updateCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n calculatedProperty.id,\n {\n propertyName,\n type,\n },\n )\n : await mappingClient.createCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n {\n propertyName,\n type,\n },\n );\n onSaveSuccess();\n setPropertyName(\"\");\n setType(undefined);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n const getSpatialData = (value: string) =>\n inferredSpatialData?.has(\n BboxDimension[value as keyof typeof BboxDimension],\n ) && (\n <div>\n {`${inferredSpatialData\n ?.get(BboxDimension[value as keyof typeof BboxDimension])\n ?.toPrecision(4)}m`}\n </div>\n );\n\n return (\n <>\n <div className='gmw-calculated-properties-action-container'>\n <Fieldset legend='Calculated Property Details' className='gmw-details-form'>\n <div className='gmw-field-legend-container'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <ToggleSwitch\n label='Visualize Dimensions'\n labelPosition='left'\n disabled={isLoading}\n checked={colorProperty}\n onChange={() => setColorProperty((b) => !b)}\n ></ToggleSwitch>\n </div>\n <SharedCalculatedPropertyForms\n validator={validator}\n propertyName={propertyName}\n setPropertyName={setPropertyName}\n type={type}\n setType={setType}\n itemRenderer={(option: SelectOption<string>) => (\n <MenuItem>\n <div className='gmw-gr-cp-menu-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n </MenuItem>\n )}\n selectedItemRenderer={(option: SelectOption<string>) => (\n <div className='gmw-select-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n )}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!(type && propertyName)}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"CalculatedPropertyActionWithVisuals.js","sourceRoot":"","sources":["../../../../src/widget/components/CalculatedPropertyActionWithVisuals.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Fieldset,\n MenuItem,\n Small,\n ToggleSwitch,\n} from \"@itwin/itwinui-react\";\nimport React, { useEffect, useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport {\n BboxDimension,\n BboxDimensionsDecorator,\n} from \"../../decorators/BboxDimensionsDecorator\";\nimport useValidator from \"../hooks/useValidator\";\nimport { handleError } from \"./utils\";\nimport { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements } from \"./viewerUtils\";\nimport \"./CalculatedPropertyActionWithVisuals.scss\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CalculatedProperty, CalculatedPropertyType, Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"./groupsHelpers\";\nimport { SharedCalculatedPropertyForms } from \"./SharedCalculatedPropertyForms\";\n\nexport interface CalculatedPropertyActionWithVisualsProps {\n mappingId: string;\n group: Group;\n calculatedProperty?: CalculatedProperty;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const CalculatedPropertyActionWithVisuals = ({\n mappingId,\n group,\n calculatedProperty,\n onSaveSuccess,\n onClickCancel,\n}: CalculatedPropertyActionWithVisualsProps) => {\n const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\n calculatedProperty?.propertyName ?? \"\",\n );\n const [type, setType] = useState<CalculatedPropertyType | undefined>(calculatedProperty?.type);\n const [bboxDecorator, setBboxDecorator] = useState<BboxDimensionsDecorator | undefined>();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const [inferredSpatialData, setInferredSpatialData] = useState<Map<BboxDimension, number> | undefined>();\n const [validator, showValidationMessage] = useValidator();\n const [resolvedHiliteIds, setResolvedHiliteIds] = useState<string[]>([]);\n const [colorProperty, setColorProperty] = useState<boolean>(false);\n\n useEffect(() => {\n const decorator = new BboxDimensionsDecorator();\n IModelApp.viewManager.addDecorator(decorator);\n setBboxDecorator(decorator);\n return () => {\n IModelApp.viewManager.dropDecorator(decorator);\n };\n }, []);\n\n useEffect(() => {\n const initialize = async () => {\n if (!iModelConnection) return;\n clearEmphasizedOverriddenElements();\n if (!colorProperty) return;\n setIsLoading(true);\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);\n setResolvedHiliteIds(result.ids);\n setIsLoading(false);\n };\n void initialize();\n }, [iModelConnection, hilitedElementsQueryCache, group, colorProperty]);\n\n useEffect(() => {\n if (!colorProperty || resolvedHiliteIds.length === 0) {\n return;\n }\n visualizeElements([resolvedHiliteIds[0]], \"red\");\n void zoomToElements([resolvedHiliteIds[0]]);\n }, [colorProperty, resolvedHiliteIds]);\n\n useEffect(() => {\n if (!colorProperty || resolvedHiliteIds.length === 0) {\n return;\n }\n const setContext = async () => {\n if (bboxDecorator) {\n await bboxDecorator.setContext(resolvedHiliteIds[0]);\n setInferredSpatialData(bboxDecorator.getInferredSpatialData());\n }\n };\n void setContext();\n }, [bboxDecorator, colorProperty, resolvedHiliteIds]);\n\n useEffect(() => {\n if (bboxDecorator && type && inferredSpatialData) {\n inferredSpatialData.has(BboxDimension[type as keyof typeof BboxDimension]) && colorProperty\n ? bboxDecorator.drawContext(\n BboxDimension[type as keyof typeof BboxDimension],\n )\n : bboxDecorator.clearContext();\n }\n }, [bboxDecorator, colorProperty, inferredSpatialData, type]);\n\n const onSave = async () => {\n if (!validator.allValid() || !type) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n\n const accessToken = await getAccessToken();\n\n calculatedProperty\n ? await mappingClient.updateCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n calculatedProperty.id,\n {\n propertyName,\n type,\n },\n )\n : await mappingClient.createCalculatedProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n {\n propertyName,\n type,\n },\n );\n onSaveSuccess();\n setPropertyName(\"\");\n setType(undefined);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n const getSpatialData = (value: string) =>\n inferredSpatialData?.has(\n BboxDimension[value as keyof typeof BboxDimension],\n ) && (\n <div>\n {`${inferredSpatialData\n ?.get(BboxDimension[value as keyof typeof BboxDimension])\n ?.toPrecision(4)}m`}\n </div>\n );\n\n return (\n <>\n <div className='gmw-calculated-properties-action-container'>\n <Fieldset legend='Calculated Property Details' className='gmw-details-form'>\n <div className='gmw-field-legend-container'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <ToggleSwitch\n label='Visualize Dimensions'\n labelPosition='left'\n disabled={isLoading}\n checked={colorProperty}\n onChange={() => setColorProperty((b) => !b)}\n ></ToggleSwitch>\n </div>\n <SharedCalculatedPropertyForms\n validator={validator}\n propertyName={propertyName}\n setPropertyName={setPropertyName}\n type={type}\n setType={setType}\n itemRenderer={(option: SelectOption<string>) => (\n <MenuItem>\n <div className='gmw-gr-cp-menu-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n </MenuItem>\n )}\n selectedItemRenderer={(option: SelectOption<string>) => (\n <div className='gmw-select-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n )}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!(type && propertyName)}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
@@ -7,6 +7,7 @@ declare const defaultDisplayStrings: {
7
7
  };
8
8
  export interface GroupActionProps {
9
9
  mappingId: string;
10
+ shouldVisualize: boolean;
10
11
  group?: Group;
11
12
  queryGenerationType: string;
12
13
  onSaveSuccess: () => void;
@@ -23,24 +23,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.GroupAction = void 0;
26
- const presentation_frontend_1 = require("@itwin/presentation-frontend");
27
- const appui_react_1 = require("@itwin/appui-react");
28
26
  const itwinui_react_1 = require("@itwin/itwinui-react");
29
27
  const react_1 = __importStar(require("react"));
30
28
  const utils_1 = require("./utils");
31
29
  require("./GroupAction.scss");
32
30
  const useValidator_1 = __importDefault(require("../hooks/useValidator"));
33
- const viewerUtils_1 = require("./viewerUtils");
34
31
  const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
35
32
  const MappingClientContext_1 = require("./context/MappingClientContext");
36
33
  const GroupingMappingCustomUIContext_1 = require("./context/GroupingMappingCustomUIContext");
37
34
  const GroupingMappingCustomUI_1 = require("./customUI/GroupingMappingCustomUI");
38
- const GroupHilitedElementsContext_1 = require("./context/GroupHilitedElementsContext");
39
- const groupsHelpers_1 = require("./groupsHelpers");
40
35
  const QueryBuilderStep_1 = require("./QueryBuilderStep");
41
36
  const GroupDetailsStep_1 = require("./GroupDetailsStep");
42
37
  const QueryBuilderActionPanel_1 = require("./QueryBuilderActionPanel");
43
38
  const GroupDetailsActionPanel_1 = require("./GroupDetailsActionPanel");
39
+ const useVisualization_1 = require("../hooks/useVisualization");
44
40
  const defaultDisplayStrings = {
45
41
  groupDetails: "Group Details",
46
42
  groupBy: "Group By",
@@ -52,9 +48,10 @@ var GroupActionStep;
52
48
  })(GroupActionStep || (GroupActionStep = {}));
53
49
  const GroupAction = (props) => {
54
50
  var _a, _b, _c, _d;
55
- const iModelConnection = appui_react_1.useActiveIModelConnection();
56
- const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = GroupHilitedElementsContext_1.useGroupHilitedElementsContext();
57
- const { getAccessToken, iModelId } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
51
+ const { getAccessToken, iModelId, iModelConnection } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
52
+ if (!iModelConnection) {
53
+ throw new Error("This component requires an active iModelConnection.");
54
+ }
58
55
  const mappingClient = MappingClientContext_1.useMappingClient();
59
56
  const groupUIs = GroupingMappingCustomUIContext_1.useGroupingMappingCustomUI().customUIs
60
57
  .filter((p) => p.type === GroupingMappingCustomUI_1.GroupingMappingCustomUIType.Grouping);
@@ -63,66 +60,51 @@ const GroupAction = (props) => {
63
60
  description: (_d = (_c = props.group) === null || _c === void 0 ? void 0 : _c.description) !== null && _d !== void 0 ? _d : "",
64
61
  });
65
62
  const [query, setQuery] = react_1.useState("");
66
- const [simpleSelectionQuery, setSimpleSelectionQuery] = react_1.useState("");
63
+ const [queryRowCount, setQueryRowCount] = react_1.useState(0);
67
64
  const [validator, setShowValidationMessage] = useValidator_1.default();
68
65
  const [isLoading, setIsLoading] = react_1.useState(false);
69
- const [isRendering, setIsRendering] = react_1.useState(false);
70
66
  const [queryGenerationType, setQueryGenerationType] = react_1.useState(props.queryGenerationType);
67
+ const { isRendering, setIsRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView, } = useVisualization_1.useVisualization(props.shouldVisualize, iModelConnection, query, queryGenerationType);
71
68
  const isUpdating = isLoading || isRendering;
72
69
  const [currentStep, setCurrentStep] = react_1.default.useState(GroupActionStep.QueryBuilder);
73
- react_1.useEffect(() => {
74
- if (!iModelConnection) {
75
- throw new Error("This component requires an active iModelConnection.");
76
- }
77
- }, [iModelConnection]);
78
70
  const displayStrings = react_1.default.useMemo(() => ({ ...defaultDisplayStrings, ...props.displayStrings }), [props.displayStrings]);
79
71
  react_1.useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);
80
- const resetView = react_1.useCallback(async () => {
81
- if (showGroupColor) {
82
- await groupsHelpers_1.visualizeGroupColors(iModelConnection, groups, hiddenGroupsIds, hilitedElementsQueryCache);
83
- }
84
- else {
85
- viewerUtils_1.clearOverriddenElements();
86
- }
87
- viewerUtils_1.clearEmphasizedElements();
88
- }, [groups, hiddenGroupsIds, hilitedElementsQueryCache, iModelConnection, showGroupColor]);
89
72
  react_1.useEffect(() => {
90
- const removeListener = presentation_frontend_1.Presentation.selection.selectionChange.addListener(async (evt, selectionProvider) => {
91
- if (queryGenerationType === "Selection") {
92
- const selection = selectionProvider.getSelection(evt.imodel, evt.level);
93
- const query = selection.instanceKeys.size > 0
94
- ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`
95
- : "";
96
- setSimpleSelectionQuery(query);
97
- }
98
- });
99
- return () => {
100
- removeListener();
101
- };
102
- }, [iModelConnection, queryGenerationType]);
103
- react_1.useEffect(() => {
104
- const reemphasize = async () => {
73
+ const fetchQueryRowCount = async () => {
105
74
  try {
106
75
  if (!query || query === "") {
76
+ setQueryRowCount(0);
107
77
  return;
108
78
  }
109
- setIsRendering(true);
110
- viewerUtils_1.transparentOverriddenElements();
111
- const resolvedHiliteIds = await viewerUtils_1.visualizeElementsByQuery(query, "red", iModelConnection);
112
- await viewerUtils_1.zoomToElements(resolvedHiliteIds);
79
+ setIsLoading(true);
80
+ const result = await iModelConnection.queryRowCount(query);
81
+ setQueryRowCount(result);
113
82
  }
114
83
  catch {
115
- itwinui_react_1.toaster.negative("Sorry, we have failed to generate a valid query. 😔");
84
+ itwinui_react_1.toaster.negative("Query failed to resolve.");
116
85
  }
117
86
  finally {
118
- setIsRendering(false);
87
+ setIsLoading(false);
119
88
  }
120
89
  };
121
- void reemphasize();
122
- }, [iModelConnection, query]);
123
- react_1.useEffect(() => {
124
- presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
125
- }, [iModelConnection]);
90
+ void fetchQueryRowCount();
91
+ }, [iModelConnection, query, setIsRendering]);
92
+ const isBlockingActions = !(details.groupName &&
93
+ (query || simpleSelectionQuery) &&
94
+ !isRendering &&
95
+ !isLoading);
96
+ const getOptions = react_1.useMemo(() => groupUIs.map((ui) => ({
97
+ label: ui.displayLabel,
98
+ value: ui.name,
99
+ icon: ui.icon,
100
+ })), [groupUIs]);
101
+ const onChange = react_1.useCallback(async (value) => {
102
+ setQueryGenerationType(value);
103
+ clearPresentationSelection();
104
+ setQuery("");
105
+ setSimpleSelectionQuery("");
106
+ await resetView();
107
+ }, [clearPresentationSelection, resetView, setSimpleSelectionQuery]);
126
108
  const save = react_1.useCallback(async () => {
127
109
  var _a, _b, _c, _d, _e;
128
110
  if (!validator.allValid()) {
@@ -139,7 +121,7 @@ const GroupAction = (props) => {
139
121
  ...details,
140
122
  query: currentQuery,
141
123
  });
142
- presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
124
+ clearPresentationSelection();
143
125
  setDetails({
144
126
  groupName: (_c = (_b = props.group) === null || _b === void 0 ? void 0 : _b.groupName) !== null && _c !== void 0 ? _c : "",
145
127
  description: (_e = (_d = props.group) === null || _d === void 0 ? void 0 : _d.description) !== null && _e !== void 0 ? _e : "",
@@ -154,36 +136,20 @@ const GroupAction = (props) => {
154
136
  finally {
155
137
  setIsLoading(false);
156
138
  }
157
- }, [validator, setShowValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, iModelConnection]);
158
- const isBlockingActions = !(details.groupName &&
159
- (query || simpleSelectionQuery) &&
160
- !isRendering &&
161
- !isLoading);
162
- const getOptions = react_1.useMemo(() => groupUIs.map((ui) => ({
163
- label: ui.displayLabel,
164
- value: ui.name,
165
- icon: ui.icon,
166
- })), [groupUIs]);
167
- const onChange = react_1.useCallback(async (value) => {
168
- setQueryGenerationType(value);
169
- presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
170
- setQuery("");
171
- setSimpleSelectionQuery("");
172
- await resetView();
173
- }, [iModelConnection, resetView]);
139
+ }, [validator, setShowValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, clearPresentationSelection]);
174
140
  const isQueryBuilderStep = currentStep === GroupActionStep.QueryBuilder;
175
141
  const isGroupDetailsStep = currentStep === GroupActionStep.GroupDetails;
176
142
  return (react_1.default.createElement(react_1.default.Fragment, null,
177
143
  react_1.default.createElement("div", { className: "gmw-group-add-modify-container" },
178
- react_1.default.createElement(QueryBuilderStep_1.QueryBuilderStep, { isHidden: !isQueryBuilderStep, queryGenerationType: queryGenerationType, groupUIs: groupUIs, isUpdating: isUpdating, resetView: resetView, setQuery: setQuery, onChange: onChange, getOptions: getOptions, displayStrings: { ...displayStrings }, group: props.group }),
144
+ react_1.default.createElement(QueryBuilderStep_1.QueryBuilderStep, { queryRowCount: queryRowCount, isHidden: !isQueryBuilderStep, queryGenerationType: queryGenerationType, groupUIs: groupUIs, isUpdating: isUpdating, resetView: resetView, setQuery: setQuery, onChange: onChange, getOptions: getOptions, displayStrings: { ...displayStrings }, group: props.group }),
179
145
  isGroupDetailsStep && react_1.default.createElement(GroupDetailsStep_1.GroupDetailsStep, { details: details, setDetails: setDetails, validator: validator, displayStrings: { ...displayStrings } })),
180
146
  react_1.default.createElement("div", { className: 'gmw-action-panel' },
181
147
  isLoading &&
182
148
  react_1.default.createElement(utils_1.LoadingSpinner, null),
183
149
  isQueryBuilderStep && (react_1.default.createElement(QueryBuilderActionPanel_1.QueryBuilderActionPanel, { onClickNext: () => setCurrentStep(GroupActionStep.GroupDetails) })),
184
150
  isGroupDetailsStep && (react_1.default.createElement(GroupDetailsActionPanel_1.GroupDetailsActionPanel, { isSaveDisabled: isBlockingActions, onClickSave: save, onClickBack: () => setCurrentStep(GroupActionStep.QueryBuilder) })),
185
- props.onClickCancel && react_1.default.createElement(itwinui_react_1.Button, { type: 'button', id: 'cancel', onClick: async () => {
186
- presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
151
+ props.onClickCancel && react_1.default.createElement(itwinui_react_1.Button, { type: 'button', id: 'cancel', onClick: () => {
152
+ clearPresentationSelection();
187
153
  props.onClickCancel && props.onClickCancel();
188
154
  } }, "Cancel"))));
189
155
  };
@@ -1 +1 @@
1
- {"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Button,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n handleError,\n LoadingSpinner,\n} from \"./utils\";\nimport \"./GroupAction.scss\";\nimport useValidator from \"../hooks/useValidator\";\nimport {\n clearEmphasizedElements,\n clearOverriddenElements,\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"./groupsHelpers\";\nimport { QueryBuilderStep } from \"./QueryBuilderStep\";\nimport { GroupDetailsStep } from \"./GroupDetailsStep\";\nimport { QueryBuilderActionPanel } from \"./QueryBuilderActionPanel\";\nimport { GroupDetailsActionPanel } from \"./GroupDetailsActionPanel\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nenum GroupActionStep {\n QueryBuilder,\n GroupDetails,\n}\n\nexport interface GroupActionProps {\n mappingId: string;\n group?: Group;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const GroupAction = (props: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n const [validator, setShowValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [queryGenerationType, setQueryGenerationType] = useState(\n props.queryGenerationType,\n );\n const isUpdating = isLoading || isRendering;\n const [currentStep, setCurrentStep] = React.useState(GroupActionStep.QueryBuilder);\n\n useEffect(() => {\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n }, [iModelConnection]);\n\n const displayStrings = React.useMemo(\n () => ({ ...defaultDisplayStrings, ...props.displayStrings }),\n [props.displayStrings]\n );\n\n useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);\n\n const resetView = useCallback(async () => {\n if (showGroupColor) {\n await visualizeGroupColors(iModelConnection, groups, hiddenGroupsIds, hilitedElementsQueryCache);\n } else {\n clearOverriddenElements();\n }\n clearEmphasizedElements();\n }, [groups, hiddenGroupsIds, hilitedElementsQueryCache, iModelConnection, showGroupColor]);\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(\n evt.imodel,\n evt.level,\n );\n const query = selection.instanceKeys.size > 0\n ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`\n : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection, queryGenerationType]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n setIsRendering(true);\n transparentOverriddenElements();\n const resolvedHiliteIds = await visualizeElementsByQuery(\n query,\n \"red\",\n iModelConnection,\n );\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(\"Sorry, we have failed to generate a valid query. 😔\");\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n setShowValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n props.group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n props.mappingId,\n props.group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(\n accessToken,\n iModelId,\n props.mappingId,\n {\n ...details,\n query: currentQuery,\n },\n );\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n setCurrentStep(GroupActionStep.QueryBuilder);\n setShowValidationMessage(false);\n props.onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [validator, setShowValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, iModelConnection]);\n\n const isBlockingActions = !(\n details.groupName &&\n (query || simpleSelectionQuery) &&\n !isRendering &&\n !isLoading\n );\n\n const getOptions = useMemo(\n (): SelectOption<string>[] =>\n groupUIs.map((ui) => ({\n label: ui.displayLabel,\n value: ui.name,\n icon: ui.icon,\n })),\n [groupUIs]\n );\n\n const onChange = useCallback(\n async (value: string) => {\n setQueryGenerationType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n },\n [iModelConnection, resetView]\n );\n\n const isQueryBuilderStep = currentStep === GroupActionStep.QueryBuilder;\n const isGroupDetailsStep = currentStep === GroupActionStep.GroupDetails;\n return (\n <>\n <div className=\"gmw-group-add-modify-container\">\n <QueryBuilderStep\n isHidden={!isQueryBuilderStep}\n queryGenerationType={queryGenerationType}\n groupUIs={groupUIs}\n isUpdating={isUpdating}\n resetView={resetView}\n setQuery={setQuery}\n onChange={onChange}\n getOptions={getOptions}\n displayStrings={{ ...displayStrings }}\n group={props.group}\n />\n {isGroupDetailsStep && <GroupDetailsStep\n details={details}\n setDetails={setDetails}\n validator={validator}\n displayStrings={{ ...displayStrings }}\n />}\n </div>\n <div className='gmw-action-panel'>\n {isLoading &&\n <LoadingSpinner />\n }\n {isQueryBuilderStep && (\n <QueryBuilderActionPanel onClickNext={() => setCurrentStep(GroupActionStep.GroupDetails)} />\n )}\n {isGroupDetailsStep && (\n <GroupDetailsActionPanel\n isSaveDisabled={isBlockingActions}\n onClickSave={save}\n onClickBack={() => setCurrentStep(GroupActionStep.QueryBuilder)}\n />\n )}\n {props.onClickCancel && <Button\n type='button'\n id='cancel'\n onClick={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n props.onClickCancel && props.onClickCancel();\n }}\n >\n Cancel\n </Button>}\n </div>\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Button,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n handleError,\n LoadingSpinner,\n} from \"./utils\";\nimport \"./GroupAction.scss\";\nimport useValidator from \"../hooks/useValidator\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { QueryBuilderStep } from \"./QueryBuilderStep\";\nimport { GroupDetailsStep } from \"./GroupDetailsStep\";\nimport { QueryBuilderActionPanel } from \"./QueryBuilderActionPanel\";\nimport { GroupDetailsActionPanel } from \"./GroupDetailsActionPanel\";\nimport { useVisualization } from \"../hooks/useVisualization\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nenum GroupActionStep {\n QueryBuilder,\n GroupDetails,\n}\n\nexport interface GroupActionProps {\n mappingId: string;\n shouldVisualize: boolean;\n group?: Group;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const GroupAction = (props: GroupActionProps) => {\n const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [queryRowCount, setQueryRowCount] = useState<number>(0);\n\n const [validator, setShowValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const [queryGenerationType, setQueryGenerationType] = useState(\n props.queryGenerationType,\n );\n const {\n isRendering,\n setIsRendering,\n simpleSelectionQuery,\n setSimpleSelectionQuery,\n clearPresentationSelection,\n resetView,\n } = useVisualization(\n props.shouldVisualize,\n iModelConnection,\n query,\n queryGenerationType\n );\n const isUpdating = isLoading || isRendering;\n const [currentStep, setCurrentStep] = React.useState(GroupActionStep.QueryBuilder);\n\n const displayStrings = React.useMemo(\n () => ({ ...defaultDisplayStrings, ...props.displayStrings }),\n [props.displayStrings]\n );\n\n useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);\n\n useEffect(() => {\n const fetchQueryRowCount = async () => {\n try {\n if (!query || query === \"\") {\n setQueryRowCount(0);\n return;\n }\n setIsLoading(true);\n const result = await iModelConnection.queryRowCount(query);\n setQueryRowCount(result);\n } catch {\n toaster.negative(\"Query failed to resolve.\");\n } finally {\n setIsLoading(false);\n }\n };\n\n void fetchQueryRowCount();\n }, [iModelConnection, query, setIsRendering]);\n\n const isBlockingActions = !(\n details.groupName &&\n (query || simpleSelectionQuery) &&\n !isRendering &&\n !isLoading\n );\n\n const getOptions = useMemo(\n (): SelectOption<string>[] =>\n groupUIs.map((ui) => ({\n label: ui.displayLabel,\n value: ui.name,\n icon: ui.icon,\n })),\n [groupUIs]\n );\n\n const onChange = useCallback(\n async (value: string) => {\n setQueryGenerationType(value);\n clearPresentationSelection();\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n },\n [clearPresentationSelection, resetView, setSimpleSelectionQuery]\n );\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n setShowValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n props.group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n props.mappingId,\n props.group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(\n accessToken,\n iModelId,\n props.mappingId,\n {\n ...details,\n query: currentQuery,\n },\n );\n clearPresentationSelection();\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n setCurrentStep(GroupActionStep.QueryBuilder);\n setShowValidationMessage(false);\n props.onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [validator, setShowValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, clearPresentationSelection]);\n\n const isQueryBuilderStep = currentStep === GroupActionStep.QueryBuilder;\n const isGroupDetailsStep = currentStep === GroupActionStep.GroupDetails;\n return (\n <>\n <div className=\"gmw-group-add-modify-container\">\n <QueryBuilderStep\n queryRowCount={queryRowCount}\n isHidden={!isQueryBuilderStep}\n queryGenerationType={queryGenerationType}\n groupUIs={groupUIs}\n isUpdating={isUpdating}\n resetView={resetView}\n setQuery={setQuery}\n onChange={onChange}\n getOptions={getOptions}\n displayStrings={{ ...displayStrings }}\n group={props.group}\n />\n {isGroupDetailsStep && <GroupDetailsStep\n details={details}\n setDetails={setDetails}\n validator={validator}\n displayStrings={{ ...displayStrings }}\n />}\n </div>\n <div className='gmw-action-panel'>\n {isLoading &&\n <LoadingSpinner />\n }\n {isQueryBuilderStep && (\n <QueryBuilderActionPanel onClickNext={() => setCurrentStep(GroupActionStep.GroupDetails)} />\n )}\n {isGroupDetailsStep && (\n <GroupDetailsActionPanel\n isSaveDisabled={isBlockingActions}\n onClickSave={save}\n onClickBack={() => setCurrentStep(GroupActionStep.QueryBuilder)}\n />\n )}\n {props.onClickCancel && <Button\n type='button'\n id='cancel'\n onClick={() => {\n clearPresentationSelection();\n props.onClickCancel && props.onClickCancel();\n }}\n >\n Cancel\n </Button>}\n </div>\n </>\n );\n};\n"]}
@@ -25,16 +25,16 @@ exports.GroupColorToggle = void 0;
25
25
  * See LICENSE.md in the project root for license terms and full copyright notice.
26
26
  *--------------------------------------------------------------------------------------------*/
27
27
  const react_1 = __importStar(require("react"));
28
- const appui_react_1 = require("@itwin/appui-react");
29
28
  const itwinui_react_1 = require("@itwin/itwinui-react");
30
29
  const viewerUtils_1 = require("./viewerUtils");
31
30
  const groupsHelpers_1 = require("./groupsHelpers");
32
31
  const presentation_frontend_1 = require("@itwin/presentation-frontend");
33
32
  const GroupHilitedElementsContext_1 = require("./context/GroupHilitedElementsContext");
34
33
  const PropertiesContext_1 = require("./context/PropertiesContext");
34
+ const GroupingApiConfigContext_1 = require("./context/GroupingApiConfigContext");
35
35
  const GroupColorToggle = ({ color, group, ...rest }) => {
36
36
  const [isLoading, setIsLoading] = react_1.useState(false);
37
- const iModelConnection = appui_react_1.useActiveIModelConnection();
37
+ const { iModelConnection } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
38
38
  if (!iModelConnection) {
39
39
  throw new Error("This component requires an active iModelConnection.");
40
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GroupColorToggle.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupColorToggle.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,+CAAmD;AACnD,oDAA+D;AAE/D,wDAA6D;AAE7D,+CAAqG;AACrG,mDAAiE;AACjE,wEAA4D;AAC5D,uFAAuF;AACvF,mEAAmE;AAO5D,MAAM,gBAAgB,GAAG,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,GAAG,IAAI,EACe,EAAE,EAAE;IAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG,uCAAyB,EAAE,CAAC;IACrD,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;IACD,MAAM,EAAE,yBAAyB,EAAE,GAAG,4DAA8B,EAAE,CAAC;IACvE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,wCAAoB,EAAE,CAAC;IAErE,iBAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YAC3B,IAAI;gBACF,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,+CAAiC,EAAE,CAAC;gBACpC,IAAI,cAAc,EAAE;oBAClB,MAAM,MAAM,GAAG,MAAM,8CAA8B,CAAC,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;oBACxG,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;oBACF,+BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACrC,MAAM,4BAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBAClC;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,uBAAO,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC;gBAC1D,+BAA+B;gBAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACtB;oBAAS;gBACR,YAAY,CAAC,KAAK,CAAC,CAAC;aACrB;QACH,CAAC,CAAC;QACF,KAAK,SAAS,EAAE,CAAC;IACnB,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,yBAAyB,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9G,OAAO,CACL,8BAAC,4BAAY,IACX,KAAK,EAAC,aAAa,EACnB,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KACxC,IAAI,GACM,CACjB,CAAC;AACJ,CAAC,CAAC;AA/CW,QAAA,gBAAgB,oBA+C3B","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React, { useEffect, useState } from \"react\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport type { ToggleSwitchProps } from \"@itwin/itwinui-react\";\nimport { toaster, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements } from \"./viewerUtils\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"./groupsHelpers\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { usePropertiesContext } from \"./context/PropertiesContext\";\n\nexport interface GroupColorToggleProps extends Partial<ToggleSwitchProps> {\n color: string;\n group: Group;\n}\n\nexport const GroupColorToggle = ({\n color,\n group,\n ...rest\n}: GroupColorToggleProps) => {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const iModelConnection = useActiveIModelConnection();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const { showGroupColor, setShowGroupColor } = usePropertiesContext();\n\n useEffect(() => {\n const visualize = async () => {\n try {\n setIsLoading(true);\n clearEmphasizedOverriddenElements();\n if (showGroupColor) {\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n visualizeElements(result.ids, color);\n await zoomToElements(result.ids);\n }\n } catch (error) {\n toaster.negative(\"There was an error visualizing group.\");\n /* eslint-disable no-console */\n console.error(error);\n } finally {\n setIsLoading(false);\n }\n };\n void visualize();\n }, [iModelConnection, group.query, group.groupName, group, hilitedElementsQueryCache, showGroupColor, color]);\n\n return (\n <ToggleSwitch\n label=\"Color Group\"\n disabled={isLoading}\n checked={showGroupColor}\n onChange={() => setShowGroupColor((b) => !b)}\n {...rest}\n ></ToggleSwitch>\n );\n};\n"]}
1
+ {"version":3,"file":"GroupColorToggle.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupColorToggle.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,+CAAmD;AAEnD,wDAA6D;AAE7D,+CAAqG;AACrG,mDAAiE;AACjE,wEAA4D;AAC5D,uFAAuF;AACvF,mEAAmE;AACnE,iFAAiF;AAO1E,MAAM,gBAAgB,GAAG,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,GAAG,IAAI,EACe,EAAE,EAAE;IAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAC3D,MAAM,EAAE,gBAAgB,EAAE,GAAG,sDAA2B,EAAE,CAAC;IAC3D,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;IACD,MAAM,EAAE,yBAAyB,EAAE,GAAG,4DAA8B,EAAE,CAAC;IACvE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,wCAAoB,EAAE,CAAC;IAErE,iBAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YAC3B,IAAI;gBACF,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,+CAAiC,EAAE,CAAC;gBACpC,IAAI,cAAc,EAAE;oBAClB,MAAM,MAAM,GAAG,MAAM,8CAA8B,CAAC,gBAAgB,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;oBACxG,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;oBACF,+BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACrC,MAAM,4BAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBAClC;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,uBAAO,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC;gBAC1D,+BAA+B;gBAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACtB;oBAAS;gBACR,YAAY,CAAC,KAAK,CAAC,CAAC;aACrB;QACH,CAAC,CAAC;QACF,KAAK,SAAS,EAAE,CAAC;IACnB,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,yBAAyB,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9G,OAAO,CACL,8BAAC,4BAAY,IACX,KAAK,EAAC,aAAa,EACnB,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KACxC,IAAI,GACM,CACjB,CAAC;AACJ,CAAC,CAAC;AA/CW,QAAA,gBAAgB,oBA+C3B","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React, { useEffect, useState } from \"react\";\nimport type { ToggleSwitchProps } from \"@itwin/itwinui-react\";\nimport { toaster, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { clearEmphasizedOverriddenElements, visualizeElements, zoomToElements } from \"./viewerUtils\";\nimport { getHiliteIdsAndKeysetFromGroup } from \"./groupsHelpers\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { usePropertiesContext } from \"./context/PropertiesContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nexport interface GroupColorToggleProps extends Partial<ToggleSwitchProps> {\n color: string;\n group: Group;\n}\n\nexport const GroupColorToggle = ({\n color,\n group,\n ...rest\n}: GroupColorToggleProps) => {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const { iModelConnection } = useGroupingMappingApiConfig();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const { hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const { showGroupColor, setShowGroupColor } = usePropertiesContext();\n\n useEffect(() => {\n const visualize = async () => {\n try {\n setIsLoading(true);\n clearEmphasizedOverriddenElements();\n if (showGroupColor) {\n const result = await getHiliteIdsAndKeysetFromGroup(iModelConnection, group, hilitedElementsQueryCache);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n visualizeElements(result.ids, color);\n await zoomToElements(result.ids);\n }\n } catch (error) {\n toaster.negative(\"There was an error visualizing group.\");\n /* eslint-disable no-console */\n console.error(error);\n } finally {\n setIsLoading(false);\n }\n };\n void visualize();\n }, [iModelConnection, group.query, group.groupName, group, hilitedElementsQueryCache, showGroupColor, color]);\n\n return (\n <ToggleSwitch\n label=\"Color Group\"\n disabled={isLoading}\n checked={showGroupColor}\n onChange={() => setShowGroupColor((b) => !b)}\n {...rest}\n ></ToggleSwitch>\n );\n};\n"]}
@@ -2,7 +2,7 @@
2
2
  import type { Group } from "@itwin/insights-client";
3
3
  import type { ContextCustomUI, GroupingCustomUI } from "./customUI/GroupingMappingCustomUI";
4
4
  import type { GroupingProps } from "./Grouping";
5
- export interface GroupItemProps extends GroupingProps {
5
+ export interface GroupItemProps extends Omit<GroupingProps, "onClickAddGroup"> {
6
6
  group: Group;
7
7
  groupUIs: GroupingCustomUI[];
8
8
  contextUIs: ContextCustomUI[];
@@ -9,11 +9,11 @@ const HorizontalTile_1 = require("./HorizontalTile");
9
9
  const GroupMenuActions_1 = require("./GroupMenuActions");
10
10
  const GroupItem = ({ onClickGroupTitle, disableActions, group, ...rest }) => {
11
11
  const onTitleClick = () => {
12
- if (onClickGroupTitle && !disableActions) {
12
+ if (onClickGroupTitle) {
13
13
  onClickGroupTitle(group);
14
14
  }
15
15
  };
16
- return (react_1.default.createElement(HorizontalTile_1.HorizontalTile, { title: group.groupName, subText: group.description, actionGroup: react_1.default.createElement(GroupMenuActions_1.GroupMenuActions, { group: group, onClickGroupTitle: onClickGroupTitle, disableActions: disableActions, ...rest }), onClickTitle: disableActions ? undefined : onTitleClick }));
16
+ return (react_1.default.createElement(HorizontalTile_1.HorizontalTile, { title: group.groupName, subText: group.description, actionGroup: react_1.default.createElement(GroupMenuActions_1.GroupMenuActions, { group: group, disableActions: disableActions, ...rest }), onClickTitle: onClickGroupTitle && !disableActions ? onTitleClick : undefined }));
17
17
  };
18
18
  exports.GroupItem = GroupItem;
19
19
  //# sourceMappingURL=GroupItem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupItem.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupItem.tsx"],"names":[],"mappings":";;;;;;AAKA,kDAA0B;AAC1B,qDAAkD;AAGlD,yDAAsD;AAS/C,MAAM,SAAS,GAAG,CAAC,EACxB,iBAAiB,EACjB,cAAc,EACd,KAAK,EACL,GAAG,IAAI,EACQ,EAAE,EAAE;IAEnB,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,iBAAiB,IAAI,CAAC,cAAc,EAAE;YACxC,iBAAiB,CAAC,KAAK,CAAC,CAAC;SAC1B;IACH,CAAC,CAAC;IAEF,OAAO,CACL,8BAAC,+BAAc,IACb,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,OAAO,EAAE,KAAK,CAAC,WAAW,EAC1B,WAAW,EACT,8BAAC,mCAAgB,IACf,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,KAC1B,IAAI,GACR,EAEJ,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,GACvD,CACH,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,SAAS,aA4BpB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { Group } from \"@itwin/insights-client\";\nimport React from \"react\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport type { ContextCustomUI, GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport type { GroupingProps } from \"./Grouping\";\nimport { GroupMenuActions } from \"./GroupMenuActions\";\n\nexport interface GroupItemProps extends GroupingProps {\n group: Group;\n groupUIs: GroupingCustomUI[];\n contextUIs: ContextCustomUI[];\n setShowDeleteModal: (showDeleteModal: Group) => void;\n}\n\nexport const GroupItem = ({\n onClickGroupTitle,\n disableActions,\n group,\n ...rest\n}: GroupItemProps) => {\n\n const onTitleClick = () => {\n if (onClickGroupTitle && !disableActions) {\n onClickGroupTitle(group);\n }\n };\n\n return (\n <HorizontalTile\n title={group.groupName}\n subText={group.description}\n actionGroup={\n <GroupMenuActions\n group={group}\n onClickGroupTitle={onClickGroupTitle}\n disableActions={disableActions}\n {...rest}\n />\n }\n onClickTitle={disableActions ? undefined : onTitleClick}\n />\n );\n};\n"]}
1
+ {"version":3,"file":"GroupItem.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupItem.tsx"],"names":[],"mappings":";;;;;;AAKA,kDAA0B;AAC1B,qDAAkD;AAGlD,yDAAsD;AAS/C,MAAM,SAAS,GAAG,CAAC,EACxB,iBAAiB,EACjB,cAAc,EACd,KAAK,EACL,GAAG,IAAI,EACQ,EAAE,EAAE;IAEnB,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,iBAAiB,EAAE;YACrB,iBAAiB,CAAC,KAAK,CAAC,CAAC;SAC1B;IACH,CAAC,CAAC;IAEF,OAAO,CACL,8BAAC,+BAAc,IACb,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,OAAO,EAAE,KAAK,CAAC,WAAW,EAC1B,WAAW,EACT,8BAAC,mCAAgB,IACf,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,KAC1B,IAAI,GACR,EAEJ,YAAY,EAAE,iBAAiB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,GAC7E,CACH,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,SAAS,aA2BpB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { Group } from \"@itwin/insights-client\";\nimport React from \"react\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport type { ContextCustomUI, GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport type { GroupingProps } from \"./Grouping\";\nimport { GroupMenuActions } from \"./GroupMenuActions\";\n\nexport interface GroupItemProps extends Omit<GroupingProps, \"onClickAddGroup\"> {\n group: Group;\n groupUIs: GroupingCustomUI[];\n contextUIs: ContextCustomUI[];\n setShowDeleteModal: (showDeleteModal: Group) => void;\n}\n\nexport const GroupItem = ({\n onClickGroupTitle,\n disableActions,\n group,\n ...rest\n}: GroupItemProps) => {\n\n const onTitleClick = () => {\n if (onClickGroupTitle) {\n onClickGroupTitle(group);\n }\n };\n\n return (\n <HorizontalTile\n title={group.groupName}\n subText={group.description}\n actionGroup={\n <GroupMenuActions\n group={group}\n disableActions={disableActions}\n {...rest}\n />\n }\n onClickTitle={onClickGroupTitle && !disableActions ? onTitleClick : undefined}\n />\n );\n};\n"]}
@@ -3,7 +3,7 @@ import type { Group } from "@itwin/insights-client";
3
3
  import type { ContextCustomUI, GroupingCustomUI } from "./customUI/GroupingMappingCustomUI";
4
4
  import type { GroupingProps } from "./Grouping";
5
5
  import "./GroupMenuActions.scss";
6
- export interface GroupMenuActionsProps extends GroupingProps {
6
+ export interface GroupMenuActionsProps extends Omit<GroupingProps, "onClickAddGroup" | "onClickGroupTitle"> {
7
7
  group: Group;
8
8
  groupUIs: GroupingCustomUI[];
9
9
  contextUIs: ContextCustomUI[];
@@ -1 +1 @@
1
- {"version":3,"file":"GroupMenuActions.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupMenuActions.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { Group } from \"@itwin/insights-client\";\nimport { SvgDelete, SvgEdit, SvgMore } from \"@itwin/itwinui-icons-react\";\nimport { DropdownMenu, IconButton, MenuItem } from \"@itwin/itwinui-react\";\nimport React, { useCallback } from \"react\";\nimport type { ContextCustomUI, GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport type { GroupingProps } from \"./Grouping\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport \"./GroupMenuActions.scss\";\n\nexport interface GroupMenuActionsProps extends GroupingProps {\n group: Group;\n groupUIs: GroupingCustomUI[];\n contextUIs: ContextCustomUI[];\n setShowDeleteModal: (showDeleteModal: Group) => void;\n}\n\nexport const GroupMenuActions = ({\n mapping,\n group,\n actionButtonRenderers,\n onClickGroupModify,\n onClickRenderContextCustomUI,\n groupUIs,\n contextUIs,\n disableActions,\n setShowDeleteModal,\n}: GroupMenuActionsProps) => {\n const { iModelId } = useGroupingMappingApiConfig();\n\n const onModify = useCallback(async (group: Group, type: string) => {\n if (!onClickGroupModify) return;\n onClickGroupModify(group, type);\n }, [onClickGroupModify]);\n\n return (\n <div className=\"gmw-actions\">\n {actionButtonRenderers &&\n actionButtonRenderers.map((actionButton, index) =>\n <React.Fragment key={index}>{actionButton({ group })}</React.Fragment>\n )}\n <DropdownMenu\n className=\"gmw-action-dropdown\"\n disabled={disableActions}\n menuItems={(close: () => void) => [\n ...(groupUIs.length > 0 && onClickGroupModify\n ? [\n <MenuItem\n key={0}\n icon={<SvgEdit />}\n disabled={disableActions}\n data-testid=\"gmw-context-menu-item\"\n subMenuItems={groupUIs.map((p, index) => (\n <MenuItem\n key={p.name}\n className=\"gmw-menu-item\"\n data-testid={`gmw-edit-${index}`}\n onClick={async () => {\n await onModify(group, p.name);\n close();\n }}\n icon={p.icon}\n >\n {p.displayLabel}\n </MenuItem>\n ))}\n >\n Edit\n </MenuItem>,\n ]\n : []),\n ...contextUIs.map((p) => {\n return (\n <MenuItem\n key={p.name}\n onClick={async () => {\n if (\n p.uiComponent &&\n onClickRenderContextCustomUI\n ) {\n onClickRenderContextCustomUI(\n p.uiComponent,\n group,\n p.displayLabel\n );\n }\n if (p.onClick) {\n p.onClick(group, mapping, 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 <MenuItem\n key={2}\n onClick={() => {\n setShowDeleteModal(group);\n close();\n }}\n icon={<SvgDelete />}\n data-testid=\"gmw-context-menu-item\"\n >\n Remove\n </MenuItem>,\n ]}\n >\n <IconButton\n disabled={disableActions}\n styleType=\"borderless\"\n data-testid=\"gmw-more-button\"\n >\n <SvgMore />\n </IconButton>\n </DropdownMenu>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"GroupMenuActions.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupMenuActions.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { Group } from \"@itwin/insights-client\";\nimport { SvgDelete, SvgEdit, SvgMore } from \"@itwin/itwinui-icons-react\";\nimport { DropdownMenu, IconButton, MenuItem } from \"@itwin/itwinui-react\";\nimport React, { useCallback } from \"react\";\nimport type { ContextCustomUI, GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport type { GroupingProps } from \"./Grouping\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport \"./GroupMenuActions.scss\";\n\nexport interface GroupMenuActionsProps extends Omit<GroupingProps, \"onClickAddGroup\" | \"onClickGroupTitle\"> {\n group: Group;\n groupUIs: GroupingCustomUI[];\n contextUIs: ContextCustomUI[];\n setShowDeleteModal: (showDeleteModal: Group) => void;\n}\n\nexport const GroupMenuActions = ({\n mapping,\n group,\n actionButtonRenderers,\n onClickGroupModify,\n onClickRenderContextCustomUI,\n groupUIs,\n contextUIs,\n disableActions,\n setShowDeleteModal,\n}: GroupMenuActionsProps) => {\n const { iModelId } = useGroupingMappingApiConfig();\n\n const onModify = useCallback(async (group: Group, type: string) => {\n if (!onClickGroupModify) return;\n onClickGroupModify(group, type);\n }, [onClickGroupModify]);\n\n return (\n <div className=\"gmw-actions\">\n {actionButtonRenderers &&\n actionButtonRenderers.map((actionButton, index) =>\n <React.Fragment key={index}>{actionButton({ group })}</React.Fragment>\n )}\n <DropdownMenu\n className=\"gmw-action-dropdown\"\n disabled={disableActions}\n menuItems={(close: () => void) => [\n ...(groupUIs.length > 0 && onClickGroupModify\n ? [\n <MenuItem\n key={0}\n icon={<SvgEdit />}\n disabled={disableActions}\n data-testid=\"gmw-context-menu-item\"\n subMenuItems={groupUIs.map((p, index) => (\n <MenuItem\n key={p.name}\n className=\"gmw-menu-item\"\n data-testid={`gmw-edit-${index}`}\n onClick={async () => {\n await onModify(group, p.name);\n close();\n }}\n icon={p.icon}\n >\n {p.displayLabel}\n </MenuItem>\n ))}\n >\n Edit\n </MenuItem>,\n ]\n : []),\n ...contextUIs.map((p) => {\n return (\n <MenuItem\n key={p.name}\n onClick={async () => {\n if (\n p.uiComponent &&\n onClickRenderContextCustomUI\n ) {\n onClickRenderContextCustomUI(\n p.uiComponent,\n group,\n p.displayLabel\n );\n }\n if (p.onClick) {\n p.onClick(group, mapping, 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 <MenuItem\n key={2}\n onClick={() => {\n setShowDeleteModal(group);\n close();\n }}\n icon={<SvgDelete />}\n data-testid=\"gmw-context-menu-item\"\n >\n Remove\n </MenuItem>,\n ]}\n >\n <IconButton\n disabled={disableActions}\n styleType=\"borderless\"\n data-testid=\"gmw-more-button\"\n >\n <SvgMore />\n </IconButton>\n </DropdownMenu>\n </div>\n );\n};\n"]}
@@ -29,7 +29,6 @@ exports.GroupPropertyAction = exports.quantityTypesSelectionOptions = void 0;
29
29
  *--------------------------------------------------------------------------------------------*/
30
30
  const server_1 = require("react-dom/server");
31
31
  const presentation_common_1 = require("@itwin/presentation-common");
32
- const appui_react_1 = require("@itwin/appui-react");
33
32
  const itwinui_react_1 = require("@itwin/itwinui-react");
34
33
  const react_1 = __importStar(require("react"));
35
34
  const ActionPanel_1 = __importDefault(require("./ActionPanel"));
@@ -59,8 +58,7 @@ exports.quantityTypesSelectionOptions = [
59
58
  { value: insights_client_1.QuantityType.Undefined, label: "No Quantity Type" },
60
59
  ];
61
60
  const GroupPropertyAction = ({ mappingId, group, groupProperty, onSaveSuccess, onClickCancel, }) => {
62
- const iModelConnection = appui_react_1.useActiveIModelConnection();
63
- const { getAccessToken, iModelId } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
61
+ const { getAccessToken, iModelId, iModelConnection } = GroupingApiConfigContext_1.useGroupingMappingApiConfig();
64
62
  const mappingClient = MappingClientContext_1.useMappingClient();
65
63
  const { hilitedElementsQueryCache } = GroupHilitedElementsContext_1.useGroupHilitedElementsContext();
66
64
  const [propertyName, setPropertyName] = react_1.useState("");