@itwin/grouping-mapping-widget 0.18.1 → 0.19.1

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 (119) hide show
  1. package/lib/cjs/formula/FormulaFunctionProvider.js +1 -0
  2. package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -1
  3. package/lib/cjs/grouping-mapping-widget.d.ts +3 -1
  4. package/lib/cjs/grouping-mapping-widget.js +7 -3
  5. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  6. package/lib/cjs/test/GroupingMappingCustomUI.test.js +9 -5
  7. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  8. package/lib/cjs/widget/components/ExtractionLogCustomFilter.d.ts +4 -0
  9. package/lib/cjs/widget/components/ExtractionLogCustomFilter.js +42 -0
  10. package/lib/cjs/widget/components/ExtractionLogCustomFilter.js.map +1 -0
  11. package/lib/cjs/widget/components/ExtractionMessageModal.d.ts +11 -0
  12. package/lib/cjs/widget/components/ExtractionMessageModal.js +87 -0
  13. package/lib/cjs/widget/components/ExtractionMessageModal.js.map +1 -0
  14. package/lib/cjs/widget/components/ExtractionMessageModal.scss +19 -0
  15. package/lib/cjs/widget/components/ExtractionStatusIcon.d.ts +8 -0
  16. package/lib/cjs/widget/components/ExtractionStatusIcon.js +21 -0
  17. package/lib/cjs/widget/components/ExtractionStatusIcon.js.map +1 -0
  18. package/lib/cjs/widget/components/GroupItem.d.ts +2 -2
  19. package/lib/cjs/widget/components/GroupItem.js.map +1 -1
  20. package/lib/cjs/widget/components/GroupMenuActions.d.ts +2 -2
  21. package/lib/cjs/widget/components/GroupMenuActions.js.map +1 -1
  22. package/lib/cjs/widget/components/GroupingMappingContext.d.ts +5 -1
  23. package/lib/cjs/widget/components/GroupingMappingContext.js +10 -3
  24. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
  25. package/lib/cjs/widget/components/Groups.d.ts +16 -0
  26. package/lib/cjs/widget/components/Groups.js +46 -0
  27. package/lib/cjs/widget/components/Groups.js.map +1 -0
  28. package/lib/cjs/widget/components/GroupsView.d.ts +31 -0
  29. package/lib/cjs/widget/components/GroupsView.js +37 -0
  30. package/lib/cjs/widget/components/GroupsView.js.map +1 -0
  31. package/lib/{esm/widget/components/Grouping.scss → cjs/widget/components/GroupsView.scss} +4 -8
  32. package/lib/cjs/widget/components/GroupsVisualization.d.ts +2 -2
  33. package/lib/cjs/widget/components/GroupsVisualization.js +21 -23
  34. package/lib/cjs/widget/components/GroupsVisualization.js.map +1 -1
  35. package/lib/cjs/widget/components/Mappings.js +2 -2
  36. package/lib/cjs/widget/components/Mappings.js.map +1 -1
  37. package/lib/cjs/widget/components/MappingsView.d.ts +7 -1
  38. package/lib/cjs/widget/components/MappingsView.js +12 -3
  39. package/lib/cjs/widget/components/MappingsView.js.map +1 -1
  40. package/lib/cjs/widget/components/StatusIcon.d.ts +1 -0
  41. package/lib/cjs/widget/components/StatusIcon.js +4 -3
  42. package/lib/cjs/widget/components/StatusIcon.js.map +1 -1
  43. package/lib/cjs/widget/components/context/ExtractionClientContext.d.ts +8 -0
  44. package/lib/cjs/widget/components/context/ExtractionClientContext.js +33 -0
  45. package/lib/cjs/widget/components/context/ExtractionClientContext.js.map +1 -0
  46. package/lib/cjs/widget/components/hooks/useGroupsOperations.d.ts +20 -0
  47. package/lib/cjs/widget/components/hooks/useGroupsOperations.js +67 -0
  48. package/lib/cjs/widget/components/hooks/useGroupsOperations.js.map +1 -0
  49. package/lib/cjs/widget/components/hooks/useMappingsOperations.d.ts +14 -0
  50. package/lib/cjs/widget/components/hooks/useMappingsOperations.js +59 -1
  51. package/lib/cjs/widget/components/hooks/useMappingsOperations.js.map +1 -1
  52. package/lib/cjs/widget/components/utils.d.ts +1 -0
  53. package/lib/cjs/widget/components/utils.js +6 -1
  54. package/lib/cjs/widget/components/utils.js.map +1 -1
  55. package/lib/cjs/widget/components/viewerUtils.js +2 -5
  56. package/lib/cjs/widget/components/viewerUtils.js.map +1 -1
  57. package/lib/esm/formula/FormulaFunctionProvider.js +1 -0
  58. package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -1
  59. package/lib/esm/grouping-mapping-widget.d.ts +3 -1
  60. package/lib/esm/grouping-mapping-widget.js +3 -1
  61. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  62. package/lib/esm/test/GroupingMappingCustomUI.test.js +10 -6
  63. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  64. package/lib/esm/widget/components/ExtractionLogCustomFilter.d.ts +4 -0
  65. package/lib/esm/widget/components/ExtractionLogCustomFilter.js +19 -0
  66. package/lib/esm/widget/components/ExtractionLogCustomFilter.js.map +1 -0
  67. package/lib/esm/widget/components/ExtractionMessageModal.d.ts +11 -0
  68. package/lib/esm/widget/components/ExtractionMessageModal.js +64 -0
  69. package/lib/esm/widget/components/ExtractionMessageModal.js.map +1 -0
  70. package/lib/esm/widget/components/ExtractionMessageModal.scss +19 -0
  71. package/lib/esm/widget/components/ExtractionStatusIcon.d.ts +8 -0
  72. package/lib/esm/widget/components/ExtractionStatusIcon.js +14 -0
  73. package/lib/esm/widget/components/ExtractionStatusIcon.js.map +1 -0
  74. package/lib/esm/widget/components/GroupItem.d.ts +2 -2
  75. package/lib/esm/widget/components/GroupItem.js.map +1 -1
  76. package/lib/esm/widget/components/GroupMenuActions.d.ts +2 -2
  77. package/lib/esm/widget/components/GroupMenuActions.js.map +1 -1
  78. package/lib/esm/widget/components/GroupingMappingContext.d.ts +5 -1
  79. package/lib/esm/widget/components/GroupingMappingContext.js +10 -3
  80. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
  81. package/lib/esm/widget/components/Groups.d.ts +16 -0
  82. package/lib/esm/widget/components/Groups.js +23 -0
  83. package/lib/esm/widget/components/Groups.js.map +1 -0
  84. package/lib/esm/widget/components/GroupsView.d.ts +31 -0
  85. package/lib/esm/widget/components/GroupsView.js +30 -0
  86. package/lib/esm/widget/components/GroupsView.js.map +1 -0
  87. package/lib/{cjs/widget/components/Grouping.scss → esm/widget/components/GroupsView.scss} +4 -8
  88. package/lib/esm/widget/components/GroupsVisualization.d.ts +2 -2
  89. package/lib/esm/widget/components/GroupsVisualization.js +22 -24
  90. package/lib/esm/widget/components/GroupsVisualization.js.map +1 -1
  91. package/lib/esm/widget/components/Mappings.js +2 -2
  92. package/lib/esm/widget/components/Mappings.js.map +1 -1
  93. package/lib/esm/widget/components/MappingsView.d.ts +7 -1
  94. package/lib/esm/widget/components/MappingsView.js +12 -3
  95. package/lib/esm/widget/components/MappingsView.js.map +1 -1
  96. package/lib/esm/widget/components/StatusIcon.d.ts +1 -0
  97. package/lib/esm/widget/components/StatusIcon.js +5 -4
  98. package/lib/esm/widget/components/StatusIcon.js.map +1 -1
  99. package/lib/esm/widget/components/context/ExtractionClientContext.d.ts +8 -0
  100. package/lib/esm/widget/components/context/ExtractionClientContext.js +27 -0
  101. package/lib/esm/widget/components/context/ExtractionClientContext.js.map +1 -0
  102. package/lib/esm/widget/components/hooks/useGroupsOperations.d.ts +20 -0
  103. package/lib/esm/widget/components/hooks/useGroupsOperations.js +63 -0
  104. package/lib/esm/widget/components/hooks/useGroupsOperations.js.map +1 -0
  105. package/lib/esm/widget/components/hooks/useMappingsOperations.d.ts +14 -0
  106. package/lib/esm/widget/components/hooks/useMappingsOperations.js +59 -1
  107. package/lib/esm/widget/components/hooks/useMappingsOperations.js.map +1 -1
  108. package/lib/esm/widget/components/utils.d.ts +1 -0
  109. package/lib/esm/widget/components/utils.js +4 -0
  110. package/lib/esm/widget/components/utils.js.map +1 -1
  111. package/lib/esm/widget/components/viewerUtils.js +3 -6
  112. package/lib/esm/widget/components/viewerUtils.js.map +1 -1
  113. package/package.json +1 -1
  114. package/lib/cjs/widget/components/Grouping.d.ts +0 -22
  115. package/lib/cjs/widget/components/Grouping.js +0 -96
  116. package/lib/cjs/widget/components/Grouping.js.map +0 -1
  117. package/lib/esm/widget/components/Grouping.d.ts +0 -22
  118. package/lib/esm/widget/components/Grouping.js +0 -70
  119. package/lib/esm/widget/components/Grouping.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtractionMessageModal.js","sourceRoot":"","sources":["../../../../src/widget/components/ExtractionMessageModal.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 { Button, DefaultCell, Icon, Modal, ModalButtonBar, ModalContent, Table, tableFilters, Text } from \"@itwin/itwinui-react\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport type { ExtractionMessageData } from \"./hooks/useMappingsOperations\";\nimport \"./ExtractionMessageModal.scss\";\nimport { SvgClock } from \"@itwin/itwinui-icons-react\";\nimport type { CellRendererProps, Column } from \"react-table\";\nimport { StatusIcon } from \"./StatusIcon\";\nimport { ExtractionLogCustomFilter } from \"./ExtractionLogCustomFilter\";\n\nexport interface ExtractionMessageModalProps {\n isOpen: boolean;\n onClose: () => void;\n extractionMessageData: ExtractionMessageData[];\n timestamp: string;\n}\n\nexport const ExtractionMessageModal = ({ isOpen, onClose, extractionMessageData, timestamp }: ExtractionMessageModalProps) => {\n const [formattedTimestamp, setFormattedTimestamp] = useState<string>(\"\");\n useEffect(() => {\n const newDateTime: Date = new Date(timestamp);\n const options: Intl.DateTimeFormatOptions = {\n day: \"numeric\", month: \"numeric\", year: \"numeric\",\n hour: \"2-digit\", minute: \"2-digit\",\n };\n setFormattedTimestamp(newDateTime.toLocaleString(undefined, options));\n }, [timestamp]);\n const translatedLabels = useMemo(() => ({\n filter: \"Filter\",\n clear: \"Clear\",\n }), []);\n const columns = useMemo(\n (): Column<CreateTypeFromInterface<ExtractionMessageData>>[] => [\n {\n id: \"category\",\n Header: \"Category\",\n accessor: \"category\",\n fieldType: \"text\",\n Filter: ExtractionLogCustomFilter,\n filter: \"equals\",\n },\n {\n id: \"level\",\n Header: \"Level\",\n accessor: \"level\",\n cellRenderer: ({ cellElementProps, cellProps }: CellRendererProps<CreateTypeFromInterface<ExtractionMessageData>>) => {\n const level = cellProps.row.original.level;\n return (\n <DefaultCell\n cellElementProps={cellElementProps}\n cellProps={cellProps}\n startIcon={\n level === \"Error\" ? (\n <StatusIcon status='error' />\n ) : level === \"Warning\" ? (\n <StatusIcon status='warning' />\n ) : level === \"Info\" ? (\n <StatusIcon status='informational' />\n ) : <StatusIcon status='trace' />\n }\n >\n {level}\n </DefaultCell>\n );\n },\n Filter: ExtractionLogCustomFilter,\n filter: \"equals\",\n },\n {\n id: \"message\",\n Header: \"Message\",\n accessor: \"message\",\n width: \"25vw\",\n fieldType: \"text\",\n Filter: tableFilters.TextFilter(translatedLabels),\n },\n ],\n [translatedLabels]\n );\n return (\n <Modal className=\"gmw-message-modal-container\"\n title=\"Extraction Logs\"\n isOpen={isOpen}\n onClose={onClose}\n closeOnExternalClick={false}\n >\n <ModalContent>\n <div className=\"gmw-timestamp-icon\">\n <Icon\n title=\"Extraction Timestamp\"\n size=\"medium\"\n >\n <SvgClock />\n </Icon>\n <Text>{formattedTimestamp}</Text>\n </div>\n <Table<CreateTypeFromInterface<ExtractionMessageData>>\n columns={columns}\n data={extractionMessageData}\n emptyTableContent={\"\"}\n emptyFilteredTableContent=\"No results match filters.\"\n className=\"gmw-extraction-message-table-container\"\n />\n </ModalContent>\n <ModalButtonBar>\n <Button\n onClick={onClose}\n styleType=\"high-visibility\"\n >\n Close\n </Button>\n </ModalButtonBar>\n </Modal>\n );\n};\n"]}
@@ -0,0 +1,19 @@
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
+
6
+ .gmw-timestamp-icon {
7
+ display: flex;
8
+ gap: var(--iui-size-xs);
9
+ align-items: center;
10
+ }
11
+
12
+ .gmw-message-modal-container {
13
+ max-height: 75vh;
14
+ }
15
+
16
+ .gmw-extraction-message-table-container {
17
+ width: 45vw;
18
+ max-height: 50vh;
19
+ }
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ export interface ExtractionStatusIconProps {
3
+ iconStatus: "negative" | "positive" | "warning";
4
+ onClick: () => void;
5
+ iconMessage: string;
6
+ }
7
+ export declare const ExtractionStatusIcon: ({ iconStatus, onClick, iconMessage }: ExtractionStatusIconProps) => JSX.Element;
8
+ //# sourceMappingURL=ExtractionStatusIcon.d.ts.map
@@ -0,0 +1,14 @@
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 { IconButton, NotificationMarker, Tooltip } from "@itwin/itwinui-react";
6
+ import React from "react";
7
+ import { SvgProcess } from "@itwin/itwinui-icons-react";
8
+ export const ExtractionStatusIcon = ({ iconStatus, onClick, iconMessage }) => {
9
+ return (React.createElement(Tooltip, { content: iconMessage },
10
+ React.createElement(IconButton, { styleType: 'borderless', onClick: onClick },
11
+ React.createElement(NotificationMarker, { status: iconStatus },
12
+ React.createElement(SvgProcess, null)))));
13
+ };
14
+ //# sourceMappingURL=ExtractionStatusIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtractionStatusIcon.js","sourceRoot":"","sources":["../../../../src/widget/components/ExtractionStatusIcon.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAQxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAA6B,EAAE,EAAE;IACtG,OAAO,CACL,oBAAC,OAAO,IAAC,OAAO,EAAE,WAAW;QAC3B,oBAAC,UAAU,IAAC,SAAS,EAAC,YAAY,EAAC,OAAO,EAAE,OAAO;YACjD,oBAAC,kBAAkB,IAAC,MAAM,EAAE,UAAU;gBACpC,oBAAC,UAAU,OAAG,CACK,CACV,CACL,CACX,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 { IconButton, NotificationMarker, Tooltip } from \"@itwin/itwinui-react\";\nimport React from \"react\";\nimport { SvgProcess } from \"@itwin/itwinui-icons-react\";\n\nexport interface ExtractionStatusIconProps {\n iconStatus: \"negative\" | \"positive\" | \"warning\";\n onClick: () => void;\n iconMessage: string;\n}\n\nexport const ExtractionStatusIcon = ({ iconStatus, onClick, iconMessage }: ExtractionStatusIconProps) => {\n return (\n <Tooltip content={iconMessage}>\n <IconButton styleType='borderless' onClick={onClick}>\n <NotificationMarker status={iconStatus}>\n <SvgProcess />\n </NotificationMarker>\n </IconButton>\n </Tooltip>\n );\n};\n"]}
@@ -1,8 +1,8 @@
1
1
  /// <reference types="react" />
2
2
  import type { Group } from "@itwin/insights-client";
3
3
  import type { ContextCustomUI, GroupingCustomUI } from "./customUI/GroupingMappingCustomUI";
4
- import type { GroupingProps } from "./Grouping";
5
- export interface GroupItemProps extends Omit<GroupingProps, "onClickAddGroup"> {
4
+ import type { GroupsProps } from "./Groups";
5
+ export interface GroupItemProps extends Omit<GroupsProps, "onClickAddGroup"> {
6
6
  group: Group;
7
7
  groupUIs: GroupingCustomUI[];
8
8
  contextUIs: ContextCustomUI[];
@@ -1 +1 @@
1
- {"version":3,"file":"GroupItem.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupItem.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAStD,MAAM,CAAC,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,oBAAC,cAAc,IACb,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,OAAO,EAAE,KAAK,CAAC,WAAW,EAC1B,WAAW,EACT,oBAAC,gBAAgB,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","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"]}
1
+ {"version":3,"file":"GroupItem.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupItem.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAStD,MAAM,CAAC,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,oBAAC,cAAc,IACb,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,OAAO,EAAE,KAAK,CAAC,WAAW,EAC1B,WAAW,EACT,oBAAC,gBAAgB,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","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 { GroupsProps } from \"./Groups\";\nimport { GroupMenuActions } from \"./GroupMenuActions\";\n\nexport interface GroupItemProps extends Omit<GroupsProps, \"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"]}
@@ -1,9 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  import type { Group } from "@itwin/insights-client";
3
3
  import type { ContextCustomUI, GroupingCustomUI } from "./customUI/GroupingMappingCustomUI";
4
- import type { GroupingProps } from "./Grouping";
4
+ import type { GroupsProps } from "./Groups";
5
5
  import "./GroupMenuActions.scss";
6
- export interface GroupMenuActionsProps extends Omit<GroupingProps, "onClickAddGroup" | "onClickGroupTitle"> {
6
+ export interface GroupMenuActionsProps extends Omit<GroupsProps, "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 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 title='Group Options'\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 { GroupsProps } from \"./Groups\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport \"./GroupMenuActions.scss\";\n\nexport interface GroupMenuActionsProps extends Omit<GroupsProps, \"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 title='Group Options'\n >\n <SvgMore />\n </IconButton>\n </DropdownMenu>\n </div>\n );\n};\n"]}
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import "./GroupingMapping.scss";
3
3
  import type { IModelConnection } from "@itwin/core-frontend";
4
4
  import type { ClientPrefix, GetAccessTokenFn } from "./context/GroupingApiConfigContext";
5
- import type { IMappingsClient } from "@itwin/insights-client";
5
+ import type { IExtractionClient, IMappingsClient } from "@itwin/insights-client";
6
6
  import type { GroupingMappingCustomUI } from "./customUI/GroupingMappingCustomUI";
7
7
  export interface GroupingMappingContextProps {
8
8
  /**
@@ -22,6 +22,10 @@ export interface GroupingMappingContextProps {
22
22
  * A custom implementation of MappingClient.
23
23
  */
24
24
  client?: IMappingsClient;
25
+ /**
26
+ * A custom implementation of ExtractionClient.
27
+ */
28
+ extractionClient?: IExtractionClient;
25
29
  /**
26
30
  * Custom UI to add and update groups or provide additional group context capabilities.
27
31
  */
@@ -11,11 +11,14 @@ import { createGroupingMappingCustomUI, GroupingMappingCustomUIContext } from ".
11
11
  import { GroupHilitedElementsContext } from "./context/GroupHilitedElementsContext";
12
12
  import { PropertiesContext } from "./context/PropertiesContext";
13
13
  import { useActiveIModelConnection } from "@itwin/appui-react";
14
+ import { createExtractionClient, ExtractionClientContext } from "./context/ExtractionClientContext";
14
15
  const authorizationClientGetAccessToken = async () => (await IModelApp.authorizationClient?.getAccessToken()) ?? "";
15
16
  export const GroupingMappingContext = (props) => {
16
17
  const activeIModelConntextion = useActiveIModelConnection();
17
18
  const clientProp = props.client ?? props.prefix;
19
+ const extractionClientProp = props.extractionClient ?? props.prefix;
18
20
  const [mappingClient, setMappingClient] = useState(createMappingClient(clientProp));
21
+ const [extractionClient, setExtractionClient] = useState(createExtractionClient(extractionClientProp));
19
22
  const [customUIs, setCustomUIs] = useState(createGroupingMappingCustomUI(props.customUIs));
20
23
  const [apiConfig, setApiConfig] = useState({
21
24
  getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,
@@ -42,6 +45,9 @@ export const GroupingMappingContext = (props) => {
42
45
  useEffect(() => {
43
46
  setMappingClient(createMappingClient(clientProp));
44
47
  }, [clientProp]);
48
+ useEffect(() => {
49
+ setExtractionClient(createExtractionClient(extractionClientProp));
50
+ }, [extractionClientProp]);
45
51
  useEffect(() => {
46
52
  setCustomUIs(createGroupingMappingCustomUI(props.customUIs));
47
53
  }, [props.customUIs]);
@@ -72,8 +78,9 @@ export const GroupingMappingContext = (props) => {
72
78
  }), [customUIs]);
73
79
  return (React.createElement(GroupingMappingApiConfigContext.Provider, { value: apiConfig },
74
80
  React.createElement(MappingClientContext.Provider, { value: mappingClient },
75
- React.createElement(GroupingMappingCustomUIContext.Provider, { value: customUIContextValue },
76
- React.createElement(GroupHilitedElementsContext.Provider, { value: hilitedElementsContextValue },
77
- React.createElement(PropertiesContext.Provider, { value: propertiesContextValue }, props.children))))));
81
+ React.createElement(ExtractionClientContext.Provider, { value: extractionClient },
82
+ React.createElement(GroupingMappingCustomUIContext.Provider, { value: customUIContextValue },
83
+ React.createElement(GroupHilitedElementsContext.Provider, { value: hilitedElementsContextValue },
84
+ React.createElement(PropertiesContext.Provider, { value: propertiesContextValue }, props.children)))))));
78
85
  };
79
86
  //# sourceMappingURL=GroupingMappingContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupingMappingContext.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupingMappingContext.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, { useEffect, useMemo, useRef, useState } from \"react\";\nimport \"./GroupingMapping.scss\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport type {\n ClientPrefix,\n GetAccessTokenFn,\n GroupingMappingApiConfig,\n} from \"./context/GroupingApiConfigContext\";\nimport { GroupingMappingApiConfigContext } from \"./context/GroupingApiConfigContext\";\nimport {\n createMappingClient,\n MappingClientContext,\n} from \"./context/MappingClientContext\";\nimport type { CalculatedProperty, CustomCalculation, Group, GroupProperty, IMappingsClient } from \"@itwin/insights-client\";\nimport { createGroupingMappingCustomUI, GroupingMappingCustomUIContext } from \"./context/GroupingMappingCustomUIContext\";\nimport type { GroupingMappingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport type { QueryCacheItem } from \"./context/GroupHilitedElementsContext\";\nimport { GroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { PropertiesContext } from \"./context/PropertiesContext\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\n\nexport interface GroupingMappingContextProps {\n /**\n * Custom callback to retrieve access token.\n */\n getAccessToken?: GetAccessTokenFn;\n /**\n * The iTwin iModel Id.\n */\n iModelId: string;\n /**\n * Used for iTwin and iModel APIs.\n * Also used for Mapping API if a custom {@link client} is not provided.\n */\n prefix?: ClientPrefix;\n /**\n * A custom implementation of MappingClient.\n */\n client?: IMappingsClient;\n /**\n * Custom UI to add and update groups or provide additional group context capabilities.\n */\n customUIs?: GroupingMappingCustomUI[];\n /**\n * A custom iModelConnection to use instead of the active iModelConnection from UiFramework.\n */\n iModelConnection?: IModelConnection;\n children?: React.ReactNode;\n}\n\nconst authorizationClientGetAccessToken = async () =>\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n\nexport const GroupingMappingContext = (props: GroupingMappingContextProps) => {\n const activeIModelConntextion = useActiveIModelConnection();\n const clientProp: IMappingsClient | ClientPrefix = props.client ?? props.prefix;\n const [mappingClient, setMappingClient] = useState<IMappingsClient>(createMappingClient(clientProp));\n const [customUIs, setCustomUIs] = useState<GroupingMappingCustomUI[]>(\n createGroupingMappingCustomUI(props.customUIs),\n );\n const [apiConfig, setApiConfig] = useState<GroupingMappingApiConfig>({\n getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,\n iModelId: props.iModelId,\n prefix: props.prefix,\n });\n const hilitedElementsQueryCache = useRef<Map<string, QueryCacheItem>>(new Map());\n const [hiddenGroupsIds, setHiddenGroupsIds] = useState<Set<string>>(new Set());\n const [showGroupColor, setShowGroupColor] = useState<boolean>(false);\n const [propertiesShowGroup, setPropertiesShowGroup] = useState<boolean>(false);\n const [groups, setGroups] = useState<Group[]>([]);\n const [groupProperties, setGroupProperties] = useState<GroupProperty[]>([]);\n const [calculatedProperties, setCalculatedProperties] = useState<CalculatedProperty[]>([]);\n const [customCalculationProperties, setCustomCalculationProperties] = useState<CustomCalculation[]>([]);\n const [numberOfVisualizedGroups, setNumberOfVisualizedGroups] = useState(0);\n\n useEffect(() => {\n setApiConfig(() => ({\n prefix: props.prefix,\n iModelId: props.iModelId,\n getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,\n iModelConnection: props.iModelConnection ?? activeIModelConntextion,\n }));\n }, [activeIModelConntextion, props.getAccessToken, props.iModelConnection, props.iModelId, props.prefix]);\n\n useEffect(() => {\n setMappingClient(createMappingClient(clientProp));\n }, [clientProp]);\n\n useEffect(() => {\n setCustomUIs(createGroupingMappingCustomUI(props.customUIs));\n }, [props.customUIs]);\n\n const hilitedElementsContextValue = useMemo(\n () => ({\n showGroupColor,\n setShowGroupColor,\n hiddenGroupsIds,\n setHiddenGroupsIds,\n hilitedElementsQueryCache,\n groups,\n setGroups,\n numberOfVisualizedGroups,\n setNumberOfVisualizedGroups,\n }),\n [groups, hiddenGroupsIds, showGroupColor, numberOfVisualizedGroups]\n );\n\n const propertiesContextValue = useMemo(\n () => ({\n showGroupColor: propertiesShowGroup,\n setShowGroupColor: setPropertiesShowGroup,\n groupProperties,\n setGroupProperties,\n calculatedProperties,\n setCalculatedProperties,\n customCalculationProperties,\n setCustomCalculationProperties,\n }),\n [calculatedProperties, customCalculationProperties, groupProperties, propertiesShowGroup]\n );\n\n const customUIContextValue = useMemo(() => ({\n customUIs,\n setCustomUIs,\n }), [customUIs]);\n\n return (\n <GroupingMappingApiConfigContext.Provider value={apiConfig}>\n <MappingClientContext.Provider value={mappingClient}>\n <GroupingMappingCustomUIContext.Provider value={customUIContextValue}>\n <GroupHilitedElementsContext.Provider value={hilitedElementsContextValue}>\n <PropertiesContext.Provider value={propertiesContextValue}>\n {props.children}\n </PropertiesContext.Provider>\n </GroupHilitedElementsContext.Provider>\n </GroupingMappingCustomUIContext.Provider>\n </MappingClientContext.Provider>\n </GroupingMappingApiConfigContext.Provider>\n );\n};\n"]}
1
+ {"version":3,"file":"GroupingMappingContext.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupingMappingContext.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, { useEffect, useMemo, useRef, useState } from \"react\";\nimport \"./GroupingMapping.scss\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport type {\n ClientPrefix,\n GetAccessTokenFn,\n GroupingMappingApiConfig,\n} from \"./context/GroupingApiConfigContext\";\nimport { GroupingMappingApiConfigContext } from \"./context/GroupingApiConfigContext\";\nimport {\n createMappingClient,\n MappingClientContext,\n} from \"./context/MappingClientContext\";\nimport type { CalculatedProperty, CustomCalculation, Group, GroupProperty, IExtractionClient, IMappingsClient } from \"@itwin/insights-client\";\nimport { createGroupingMappingCustomUI, GroupingMappingCustomUIContext } from \"./context/GroupingMappingCustomUIContext\";\nimport type { GroupingMappingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport type { QueryCacheItem } from \"./context/GroupHilitedElementsContext\";\nimport { GroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { PropertiesContext } from \"./context/PropertiesContext\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { createExtractionClient, ExtractionClientContext } from \"./context/ExtractionClientContext\";\n\nexport interface GroupingMappingContextProps {\n /**\n * Custom callback to retrieve access token.\n */\n getAccessToken?: GetAccessTokenFn;\n /**\n * The iTwin iModel Id.\n */\n iModelId: string;\n /**\n * Used for iTwin and iModel APIs.\n * Also used for Mapping API if a custom {@link client} is not provided.\n */\n prefix?: ClientPrefix;\n /**\n * A custom implementation of MappingClient.\n */\n client?: IMappingsClient;\n /**\n * A custom implementation of ExtractionClient.\n */\n extractionClient?: IExtractionClient;\n /**\n * Custom UI to add and update groups or provide additional group context capabilities.\n */\n customUIs?: GroupingMappingCustomUI[];\n /**\n * A custom iModelConnection to use instead of the active iModelConnection from UiFramework.\n */\n iModelConnection?: IModelConnection;\n children?: React.ReactNode;\n}\n\nconst authorizationClientGetAccessToken = async () =>\n (await IModelApp.authorizationClient?.getAccessToken()) ?? \"\";\n\nexport const GroupingMappingContext = (props: GroupingMappingContextProps) => {\n const activeIModelConntextion = useActiveIModelConnection();\n const clientProp: IMappingsClient | ClientPrefix = props.client ?? props.prefix;\n const extractionClientProp: IExtractionClient | ClientPrefix = props.extractionClient ?? props.prefix;\n const [mappingClient, setMappingClient] = useState<IMappingsClient>(createMappingClient(clientProp));\n const [extractionClient, setExtractionClient] = useState<IExtractionClient>(createExtractionClient(extractionClientProp));\n const [customUIs, setCustomUIs] = useState<GroupingMappingCustomUI[]>(\n createGroupingMappingCustomUI(props.customUIs),\n );\n const [apiConfig, setApiConfig] = useState<GroupingMappingApiConfig>({\n getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,\n iModelId: props.iModelId,\n prefix: props.prefix,\n });\n const hilitedElementsQueryCache = useRef<Map<string, QueryCacheItem>>(new Map());\n const [hiddenGroupsIds, setHiddenGroupsIds] = useState<Set<string>>(new Set());\n const [showGroupColor, setShowGroupColor] = useState<boolean>(false);\n const [propertiesShowGroup, setPropertiesShowGroup] = useState<boolean>(false);\n const [groups, setGroups] = useState<Group[]>([]);\n const [groupProperties, setGroupProperties] = useState<GroupProperty[]>([]);\n const [calculatedProperties, setCalculatedProperties] = useState<CalculatedProperty[]>([]);\n const [customCalculationProperties, setCustomCalculationProperties] = useState<CustomCalculation[]>([]);\n const [numberOfVisualizedGroups, setNumberOfVisualizedGroups] = useState(0);\n\n useEffect(() => {\n setApiConfig(() => ({\n prefix: props.prefix,\n iModelId: props.iModelId,\n getAccessToken: props.getAccessToken ?? authorizationClientGetAccessToken,\n iModelConnection: props.iModelConnection ?? activeIModelConntextion,\n }));\n }, [activeIModelConntextion, props.getAccessToken, props.iModelConnection, props.iModelId, props.prefix]);\n\n useEffect(() => {\n setMappingClient(createMappingClient(clientProp));\n }, [clientProp]);\n\n useEffect(() => {\n setExtractionClient(createExtractionClient(extractionClientProp));\n }, [extractionClientProp]);\n\n useEffect(() => {\n setCustomUIs(createGroupingMappingCustomUI(props.customUIs));\n }, [props.customUIs]);\n\n const hilitedElementsContextValue = useMemo(\n () => ({\n showGroupColor,\n setShowGroupColor,\n hiddenGroupsIds,\n setHiddenGroupsIds,\n hilitedElementsQueryCache,\n groups,\n setGroups,\n numberOfVisualizedGroups,\n setNumberOfVisualizedGroups,\n }),\n [groups, hiddenGroupsIds, showGroupColor, numberOfVisualizedGroups]\n );\n\n const propertiesContextValue = useMemo(\n () => ({\n showGroupColor: propertiesShowGroup,\n setShowGroupColor: setPropertiesShowGroup,\n groupProperties,\n setGroupProperties,\n calculatedProperties,\n setCalculatedProperties,\n customCalculationProperties,\n setCustomCalculationProperties,\n }),\n [calculatedProperties, customCalculationProperties, groupProperties, propertiesShowGroup]\n );\n\n const customUIContextValue = useMemo(() => ({\n customUIs,\n setCustomUIs,\n }), [customUIs]);\n\n return (\n <GroupingMappingApiConfigContext.Provider value={apiConfig}>\n <MappingClientContext.Provider value={mappingClient}>\n <ExtractionClientContext.Provider value={extractionClient}>\n <GroupingMappingCustomUIContext.Provider value={customUIContextValue}>\n <GroupHilitedElementsContext.Provider value={hilitedElementsContextValue}>\n <PropertiesContext.Provider value={propertiesContextValue}>\n {props.children}\n </PropertiesContext.Provider>\n </GroupHilitedElementsContext.Provider>\n </GroupingMappingCustomUIContext.Provider>\n </ExtractionClientContext.Provider>\n </MappingClientContext.Provider>\n </GroupingMappingApiConfigContext.Provider>\n );\n};\n"]}
@@ -0,0 +1,16 @@
1
+ /// <reference types="react" />
2
+ import type { Group, Mapping } from "@itwin/insights-client";
3
+ import type { ContextCustomUI } from "./customUI/GroupingMappingCustomUI";
4
+ import type { ActionButtonRenderer } from "./GroupsView";
5
+ export interface GroupsProps {
6
+ mapping: Mapping;
7
+ actionButtonRenderers?: ActionButtonRenderer[];
8
+ onClickAddGroup?: (queryGenerationType: string) => void;
9
+ onClickGroupTitle?: (group: Group) => void;
10
+ onClickGroupModify?: (group: Group, queryGenerationType: string) => void;
11
+ onClickRenderContextCustomUI?: (contextCustomUI: Exclude<ContextCustomUI["uiComponent"], undefined>, group: Group, displayLabel: string) => void;
12
+ disableActions?: boolean;
13
+ isVisualizing?: boolean;
14
+ }
15
+ export declare const Groups: ({ mapping, actionButtonRenderers, onClickAddGroup, onClickGroupTitle, onClickGroupModify, onClickRenderContextCustomUI, disableActions, isVisualizing, }: GroupsProps) => JSX.Element;
16
+ //# sourceMappingURL=Groups.d.ts.map
@@ -0,0 +1,23 @@
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, { useCallback } from "react";
6
+ import { GroupsView } from "./GroupsView";
7
+ import { useGroupsOperations } from "./hooks/useGroupsOperations";
8
+ import { Alert } from "@itwin/itwinui-react";
9
+ export const Groups = ({ mapping, actionButtonRenderers, onClickAddGroup, onClickGroupTitle, onClickGroupModify, onClickRenderContextCustomUI, disableActions, isVisualizing, }) => {
10
+ const { groups, isLoading, refresh, onDeleteGroup, setShowDeleteModal, showDeleteModal, groupUIs, contextUIs, numberOfVisualizedGroups, errorMessage, setErrorMessage, } = useGroupsOperations({ mappingId: mapping.id });
11
+ const addGroup = useCallback((type) => {
12
+ if (!onClickAddGroup)
13
+ return;
14
+ onClickAddGroup(type);
15
+ }, [onClickAddGroup]);
16
+ const renderAlert = useCallback(() => {
17
+ if (!errorMessage)
18
+ return;
19
+ return (React.createElement(Alert, { type: "negative", onClose: () => setErrorMessage(undefined) }, errorMessage));
20
+ }, [errorMessage, setErrorMessage]);
21
+ return (React.createElement(GroupsView, { mapping: mapping, groups: groups, isLoading: isLoading, onRefresh: refresh, groupUIs: groupUIs, actionButtonRenderers: actionButtonRenderers, onClickAddGroup: addGroup, onClickGroupTitle: onClickGroupTitle, onClickGroupModify: onClickGroupModify, onClickRenderContextCustomUI: onClickRenderContextCustomUI, disableActions: disableActions, selectedGroupForDeletion: showDeleteModal, setSelectedGroupForDeletion: setShowDeleteModal, onDeleteGroup: onDeleteGroup, onCloseDeleteModal: () => setShowDeleteModal(undefined), contextUIs: contextUIs, numberOfVisualizedGroups: isVisualizing ? numberOfVisualizedGroups : undefined, alert: renderAlert() }));
22
+ };
23
+ //# sourceMappingURL=Groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Groups.js","sourceRoot":"","sources":["../../../../src/widget/components/Groups.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAM3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAiB7C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EACrB,OAAO,EACP,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,4BAA4B,EAC5B,cAAc,EACd,aAAa,GACD,EAAE,EAAE;IAChB,MAAM,EACJ,MAAM,EACN,SAAS,EACT,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,wBAAwB,EACxB,YAAY,EACZ,eAAe,GAChB,GAAG,mBAAmB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,IAAY,EAAE,EAAE;QAC5C,IAAI,CAAC,eAAe;YAAE,OAAO;QAC7B,eAAe,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,OAAO,CACL,oBAAC,KAAK,IAAC,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,IAC7D,YAAY,CACP,CACT,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;IAEpC,OAAO,CACL,oBAAC,UAAU,IACT,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,qBAAqB,EAC5C,eAAe,EAAE,QAAQ,EACzB,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB,EACtC,4BAA4B,EAAE,4BAA4B,EAC1D,cAAc,EAAE,cAAc,EAC9B,wBAAwB,EAAE,eAAe,EACzC,2BAA2B,EAAE,kBAAkB,EAC/C,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,EACvD,UAAU,EAAE,UAAU,EACtB,wBAAwB,EAAE,aAAa,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS,EAC9E,KAAK,EAAE,WAAW,EAAE,GACpB,CACH,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, { useCallback } from \"react\";\nimport type { Group, Mapping } from \"@itwin/insights-client\";\nimport type {\n ContextCustomUI,\n} from \"./customUI/GroupingMappingCustomUI\";\nimport type { ActionButtonRenderer } from \"./GroupsView\";\nimport { GroupsView } from \"./GroupsView\";\nimport { useGroupsOperations } from \"./hooks/useGroupsOperations\";\nimport { Alert } from \"@itwin/itwinui-react\";\n\nexport interface GroupsProps {\n mapping: Mapping;\n actionButtonRenderers?: ActionButtonRenderer[];\n onClickAddGroup?: (queryGenerationType: string) => void;\n onClickGroupTitle?: (group: Group) => void;\n onClickGroupModify?: (group: Group, queryGenerationType: string) => void;\n onClickRenderContextCustomUI?: (\n contextCustomUI: Exclude<ContextCustomUI[\"uiComponent\"], undefined>,\n group: Group,\n displayLabel: string,\n ) => void;\n disableActions?: boolean;\n isVisualizing?: boolean;\n}\n\nexport const Groups = ({\n mapping,\n actionButtonRenderers,\n onClickAddGroup,\n onClickGroupTitle,\n onClickGroupModify,\n onClickRenderContextCustomUI,\n disableActions,\n isVisualizing,\n}: GroupsProps) => {\n const {\n groups,\n isLoading,\n refresh,\n onDeleteGroup,\n setShowDeleteModal,\n showDeleteModal,\n groupUIs,\n contextUIs,\n numberOfVisualizedGroups,\n errorMessage,\n setErrorMessage,\n } = useGroupsOperations({ mappingId: mapping.id });\n\n const addGroup = useCallback((type: string) => {\n if (!onClickAddGroup) return;\n onClickAddGroup(type);\n }, [onClickAddGroup]);\n\n const renderAlert = useCallback(() => {\n if (!errorMessage) return;\n return (\n <Alert type=\"negative\" onClose={() => setErrorMessage(undefined)}>\n {errorMessage}\n </Alert>\n );\n }, [errorMessage, setErrorMessage]);\n\n return (\n <GroupsView\n mapping={mapping}\n groups={groups}\n isLoading={isLoading}\n onRefresh={refresh}\n groupUIs={groupUIs}\n actionButtonRenderers={actionButtonRenderers}\n onClickAddGroup={addGroup}\n onClickGroupTitle={onClickGroupTitle}\n onClickGroupModify={onClickGroupModify}\n onClickRenderContextCustomUI={onClickRenderContextCustomUI}\n disableActions={disableActions}\n selectedGroupForDeletion={showDeleteModal}\n setSelectedGroupForDeletion={setShowDeleteModal}\n onDeleteGroup={onDeleteGroup}\n onCloseDeleteModal={() => setShowDeleteModal(undefined)}\n contextUIs={contextUIs}\n numberOfVisualizedGroups={isVisualizing ? numberOfVisualizedGroups : undefined}\n alert={renderAlert()}\n />\n );\n};\n"]}
@@ -0,0 +1,31 @@
1
+ import React from "react";
2
+ import type { Alert } from "@itwin/itwinui-react";
3
+ import "./GroupsView.scss";
4
+ import type { Group, Mapping } from "@itwin/insights-client";
5
+ import type { ContextCustomUI, GroupingCustomUI } from "./customUI/GroupingMappingCustomUI";
6
+ export interface ActionButtonRendererProps {
7
+ group: Group;
8
+ }
9
+ export declare type ActionButtonRenderer = (props: ActionButtonRendererProps) => React.ReactNode;
10
+ export interface GroupsViewProps {
11
+ mapping: Mapping;
12
+ groups: Group[];
13
+ isLoading: boolean;
14
+ onRefresh: () => Promise<void>;
15
+ groupUIs: GroupingCustomUI[];
16
+ actionButtonRenderers?: ActionButtonRenderer[];
17
+ contextUIs: ContextCustomUI[];
18
+ onClickAddGroup?: (queryGenerationType: string) => void;
19
+ onClickGroupTitle?: (group: Group) => void;
20
+ onClickGroupModify?: (group: Group, queryGenerationType: string) => void;
21
+ onClickRenderContextCustomUI?: (contextCustomUI: Exclude<ContextCustomUI["uiComponent"], undefined>, group: Group, displayLabel: string) => void;
22
+ disableActions?: boolean;
23
+ selectedGroupForDeletion?: Group;
24
+ setSelectedGroupForDeletion: (group: Group) => void;
25
+ onDeleteGroup: (group: Group) => Promise<void>;
26
+ onCloseDeleteModal: () => void;
27
+ numberOfVisualizedGroups?: number;
28
+ alert?: React.ReactElement<typeof Alert>;
29
+ }
30
+ export declare const GroupsView: ({ mapping, groups, isLoading, onRefresh, groupUIs, actionButtonRenderers, onClickAddGroup, onClickGroupTitle, onClickGroupModify, onClickRenderContextCustomUI, disableActions, selectedGroupForDeletion, onDeleteGroup, onCloseDeleteModal, setSelectedGroupForDeletion, contextUIs, numberOfVisualizedGroups, alert, }: GroupsViewProps) => JSX.Element;
31
+ //# sourceMappingURL=GroupsView.d.ts.map
@@ -0,0 +1,30 @@
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 from "react";
6
+ import { ButtonGroup, IconButton, ProgressLinear, } from "@itwin/itwinui-react";
7
+ import { SvgRefresh, } from "@itwin/itwinui-icons-react";
8
+ import DeleteModal from "./DeleteModal";
9
+ import "./GroupsView.scss";
10
+ import { EmptyMessage, LoadingOverlay } from "./utils";
11
+ import { GroupItem } from "./GroupItem";
12
+ import { GroupsAddButton } from "./GroupsAddButton";
13
+ export const GroupsView = ({ mapping, groups, isLoading, onRefresh, groupUIs, actionButtonRenderers, onClickAddGroup, onClickGroupTitle, onClickGroupModify, onClickRenderContextCustomUI, disableActions, selectedGroupForDeletion, onDeleteGroup, onCloseDeleteModal, setSelectedGroupForDeletion, contextUIs, numberOfVisualizedGroups, alert, }) => {
14
+ return (React.createElement("div", { className: "gmw-groups-container" },
15
+ React.createElement("div", { className: "gmw-toolbar" },
16
+ onClickAddGroup && groupUIs.length > 0 && (React.createElement(GroupsAddButton, { disabled: disableActions, groupUIs: groupUIs, onClickAddGroup: onClickAddGroup })),
17
+ React.createElement(ButtonGroup, { className: "gmw-toolbar-buttons" },
18
+ React.createElement(IconButton, { title: "Refresh", onClick: onRefresh, disabled: isLoading || disableActions, styleType: "borderless" },
19
+ React.createElement(SvgRefresh, null)))),
20
+ alert,
21
+ React.createElement("div", { className: 'gmw-groups-border' }),
22
+ !!numberOfVisualizedGroups &&
23
+ React.createElement("div", { className: "gmw-group-progress-bar" },
24
+ React.createElement(ProgressLinear, { value: 25 + (numberOfVisualizedGroups / groups.length * 65) })),
25
+ isLoading ? (React.createElement(LoadingOverlay, null)) : groups.length === 0 ? (React.createElement(EmptyMessage, { message: "No Groups available." })) : (React.createElement("div", { className: "gmw-group-list" }, groups.map((group) => (React.createElement(GroupItem, { key: group.id, mapping: mapping, group: group, groupUIs: groupUIs, actionButtonRenderers: actionButtonRenderers, onClickGroupTitle: onClickGroupTitle, onClickGroupModify: onClickGroupModify, onClickRenderContextCustomUI: onClickRenderContextCustomUI, disableActions: disableActions, setShowDeleteModal: setSelectedGroupForDeletion, contextUIs: contextUIs }))))),
26
+ selectedGroupForDeletion && (React.createElement(DeleteModal, { entityName: selectedGroupForDeletion.groupName, onClose: onCloseDeleteModal, onDelete: async () => {
27
+ await onDeleteGroup(selectedGroupForDeletion);
28
+ }, refresh: onRefresh }))));
29
+ };
30
+ //# sourceMappingURL=GroupsView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupsView.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupsView.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EACL,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,UAAU,GACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAmCpD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,EACT,QAAQ,EACR,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,4BAA4B,EAC5B,cAAc,EACd,wBAAwB,EACxB,aAAa,EACb,kBAAkB,EAClB,2BAA2B,EAC3B,UAAU,EACV,wBAAwB,EACxB,KAAK,GACW,EAAE,EAAE;IACpB,OAAO,CACL,6BAAK,SAAS,EAAC,sBAAsB;QACnC,6BAAK,SAAS,EAAC,aAAa;YACzB,eAAe,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACzC,oBAAC,eAAe,IACd,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,eAAe,GAChC,CACH;YACD,oBAAC,WAAW,IAAC,SAAS,EAAC,qBAAqB;gBAC1C,oBAAC,UAAU,IACT,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,SAAS,IAAI,cAAc,EACrC,SAAS,EAAC,YAAY;oBAEtB,oBAAC,UAAU,OAAG,CACH,CACD,CACV;QACL,KAAK;QACN,6BAAK,SAAS,EAAC,mBAAmB,GAAG;QACpC,CAAC,CAAC,wBAAwB;YACzB,6BAAK,SAAS,EAAC,wBAAwB;gBACrC,oBAAC,cAAc,IACb,KAAK,EAAE,EAAE,GAAG,CAAC,wBAAwB,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,GAC3D,CACE;QACP,SAAS,CAAC,CAAC,CAAC,CACX,oBAAC,cAAc,OAAG,CACnB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACxB,oBAAC,YAAY,IAAC,OAAO,EAAC,sBAAsB,GAAG,CAChD,CAAC,CAAC,CAAC,CACF,6BAAK,SAAS,EAAC,gBAAgB,IAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,oBAAC,SAAS,IACR,GAAG,EAAE,KAAK,CAAC,EAAE,EACb,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,qBAAqB,EAC5C,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB,EACtC,4BAA4B,EAAE,4BAA4B,EAC1D,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,2BAA2B,EAC/C,UAAU,EAAE,UAAU,GACtB,CACH,CAAC,CACE,CACP;QACA,wBAAwB,IAAI,CAC3B,oBAAC,WAAW,IACV,UAAU,EAAE,wBAAwB,CAAC,SAAS,EAC9C,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,MAAM,aAAa,CAAC,wBAAwB,CAAC,CAAC;YAChD,CAAC,EACD,OAAO,EAAE,SAAS,GAClB,CACH,CACG,CACP,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 from \"react\";\nimport type {\n Alert,\n} from \"@itwin/itwinui-react\";\nimport {\n ButtonGroup,\n IconButton,\n ProgressLinear,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgRefresh,\n} from \"@itwin/itwinui-icons-react\";\nimport DeleteModal from \"./DeleteModal\";\nimport \"./GroupsView.scss\";\nimport { EmptyMessage, LoadingOverlay } from \"./utils\";\nimport type { Group, Mapping } from \"@itwin/insights-client\";\nimport { GroupItem } from \"./GroupItem\";\nimport type { ContextCustomUI, GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupsAddButton } from \"./GroupsAddButton\";\n\nexport interface ActionButtonRendererProps {\n group: Group;\n}\n\nexport type ActionButtonRenderer = (\n props: ActionButtonRendererProps\n) => React.ReactNode;\n\nexport interface GroupsViewProps {\n mapping: Mapping;\n groups: Group[];\n isLoading: boolean;\n onRefresh: () => Promise<void>;\n groupUIs: GroupingCustomUI[];\n actionButtonRenderers?: ActionButtonRenderer[];\n contextUIs: ContextCustomUI[];\n onClickAddGroup?: (queryGenerationType: string) => void;\n onClickGroupTitle?: (group: Group) => void;\n onClickGroupModify?: (group: Group, queryGenerationType: string) => void;\n onClickRenderContextCustomUI?: (\n contextCustomUI: Exclude<ContextCustomUI[\"uiComponent\"], undefined>,\n group: Group,\n displayLabel: string,\n ) => void;\n disableActions?: boolean;\n selectedGroupForDeletion?: Group;\n setSelectedGroupForDeletion: (group: Group) => void;\n onDeleteGroup: (group: Group) => Promise<void>;\n onCloseDeleteModal: () => void;\n numberOfVisualizedGroups?: number;\n alert?: React.ReactElement<typeof Alert>;\n}\n\nexport const GroupsView = ({\n mapping,\n groups,\n isLoading,\n onRefresh,\n groupUIs,\n actionButtonRenderers,\n onClickAddGroup,\n onClickGroupTitle,\n onClickGroupModify,\n onClickRenderContextCustomUI,\n disableActions,\n selectedGroupForDeletion,\n onDeleteGroup,\n onCloseDeleteModal,\n setSelectedGroupForDeletion,\n contextUIs,\n numberOfVisualizedGroups,\n alert,\n}: GroupsViewProps) => {\n return (\n <div className=\"gmw-groups-container\">\n <div className=\"gmw-toolbar\">\n {onClickAddGroup && groupUIs.length > 0 && (\n <GroupsAddButton\n disabled={disableActions}\n groupUIs={groupUIs}\n onClickAddGroup={onClickAddGroup}\n />\n )}\n <ButtonGroup className=\"gmw-toolbar-buttons\">\n <IconButton\n title=\"Refresh\"\n onClick={onRefresh}\n disabled={isLoading || disableActions}\n styleType=\"borderless\"\n >\n <SvgRefresh />\n </IconButton>\n </ButtonGroup>\n </div>\n {alert}\n <div className='gmw-groups-border' />\n {!!numberOfVisualizedGroups &&\n <div className=\"gmw-group-progress-bar\">\n <ProgressLinear\n value={25 + (numberOfVisualizedGroups / groups.length * 65)}\n />\n </div>}\n {isLoading ? (\n <LoadingOverlay />\n ) : groups.length === 0 ? (\n <EmptyMessage message=\"No Groups available.\" />\n ) : (\n <div className=\"gmw-group-list\">\n {groups.map((group) => (\n <GroupItem\n key={group.id}\n mapping={mapping}\n group={group}\n groupUIs={groupUIs}\n actionButtonRenderers={actionButtonRenderers}\n onClickGroupTitle={onClickGroupTitle}\n onClickGroupModify={onClickGroupModify}\n onClickRenderContextCustomUI={onClickRenderContextCustomUI}\n disableActions={disableActions}\n setShowDeleteModal={setSelectedGroupForDeletion}\n contextUIs={contextUIs}\n />\n ))}\n </div>\n )}\n {selectedGroupForDeletion && (\n <DeleteModal\n entityName={selectedGroupForDeletion.groupName}\n onClose={onCloseDeleteModal}\n onDelete={async () => {\n await onDeleteGroup(selectedGroupForDeletion);\n }}\n refresh={onRefresh}\n />\n )}\n </div>\n );\n};\n"]}
@@ -13,7 +13,6 @@
13
13
  display: flex;
14
14
  justify-content: space-between;
15
15
  gap: var(--iui-size-xs);
16
- border-bottom: 1px solid var(--iui-color-border-subtle);
17
16
  padding-bottom: var(--iui-size-s);
18
17
  flex-wrap: wrap;
19
18
 
@@ -28,6 +27,10 @@
28
27
  }
29
28
  }
30
29
 
30
+ .gmw-groups-border {
31
+ border-bottom: 1px solid var(--iui-color-border-subtle);
32
+ }
33
+
31
34
  .gmw-group-progress-bar {
32
35
  height: 1px;
33
36
  }
@@ -44,10 +47,3 @@
44
47
  padding-left: var(--iui-size-s);
45
48
  }
46
49
  }
47
-
48
- .gmw-nest-menu-item {
49
- width: 100%;
50
- justify-content: flex-start;
51
- padding: 0 var(--iui-size-s);
52
- gap: var(--iui-size-xs);
53
- }
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
- import type { GroupingProps } from "./Grouping";
2
+ import type { GroupsProps } from "./Groups";
3
3
  import "./GroupsVisualization.scss";
4
- export interface GroupsVisualizationProps extends GroupingProps {
4
+ export interface GroupsVisualizationProps extends GroupsProps {
5
5
  isNonEmphasizedSelectable?: boolean;
6
6
  emphasizeElements?: boolean;
7
7
  }
@@ -1,8 +1,8 @@
1
1
  import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
2
  import { useGroupHilitedElementsContext } from "./context/GroupHilitedElementsContext";
3
3
  import { getHiliteIdsFromGroups, hideGroup, hideGroups, visualizeGroupColors, } from "./groupsHelpers";
4
- import { clearEmphasizedElements, clearEmphasizedOverriddenElements, clearHiddenElements, hideElements, zoomToElements, } from "./viewerUtils";
5
- import { Groupings } from "./Grouping";
4
+ import { clearEmphasizedElements, clearEmphasizedOverriddenElements, clearHiddenElements, hideElements, } from "./viewerUtils";
5
+ import { Groups } from "./Groups";
6
6
  import { GroupColorLegend } from "./GroupColorLegend";
7
7
  import { GroupVisualizationActions } from "./GroupsVisualizationActions";
8
8
  import { GroupsShowHideButtons } from "./GroupsShowHideButtons";
@@ -20,24 +20,20 @@ export const GroupsVisualization = ({ emphasizeElements = true, isNonEmphasizedS
20
20
  const getHiliteIdsFromGroupsWrapper = useCallback(async (groups) => iModelConnection
21
21
  ? getHiliteIdsFromGroups(iModelConnection, groups, hilitedElementsQueryCache)
22
22
  : [], [iModelConnection, hilitedElementsQueryCache]);
23
- const visualizeGroupColorsWrapper = useCallback(async () => {
24
- setIsVisualizing(true);
25
- setLoadingQuery(true);
23
+ const handleVisualizationStates = useCallback((start = true) => {
24
+ setIsVisualizing(start);
25
+ setLoadingQuery(start);
26
+ if (!start) {
27
+ setNumberOfVisualizedGroups(0);
28
+ }
29
+ }, [setNumberOfVisualizedGroups]);
30
+ const triggerVisualization = useCallback(async () => {
31
+ handleVisualizationStates(true);
26
32
  const groupsCopy = [...groups];
27
33
  await visualizeGroupColors(iModelConnection, groupsCopy, hiddenGroupsIds, hilitedElementsQueryCache, setNumberOfVisualizedGroups, emphasizeElements);
28
34
  isNonEmphasizedSelectable && clearEmphasizedElements();
29
- setLoadingQuery(false);
30
- setIsVisualizing(false);
31
- setNumberOfVisualizedGroups(0);
32
- }, [
33
- iModelConnection,
34
- groups,
35
- hiddenGroupsIds,
36
- hilitedElementsQueryCache,
37
- emphasizeElements,
38
- isNonEmphasizedSelectable,
39
- setNumberOfVisualizedGroups,
40
- ]);
35
+ handleVisualizationStates(false);
36
+ }, [handleVisualizationStates, groups, iModelConnection, hiddenGroupsIds, hilitedElementsQueryCache, setNumberOfVisualizedGroups, emphasizeElements, isNonEmphasizedSelectable]);
41
37
  useEffect(() => {
42
38
  const visualize = async () => {
43
39
  if (firstUpdate.current) {
@@ -45,14 +41,16 @@ export const GroupsVisualization = ({ emphasizeElements = true, isNonEmphasizedS
45
41
  return;
46
42
  }
47
43
  if (groups.length > 0 && showGroupColor) {
48
- await visualizeGroupColorsWrapper();
44
+ await triggerVisualization();
49
45
  }
50
46
  else {
51
47
  clearEmphasizedOverriddenElements();
52
48
  }
53
49
  };
54
50
  void visualize();
55
- }, [groups, showGroupColor, visualizeGroupColorsWrapper]);
51
+ // We don't want to trigger full visualization when toggling individual groups.
52
+ // eslint-disable-next-line react-hooks/exhaustive-deps
53
+ }, [groups, showGroupColor]);
56
54
  const hideAllGroups = useCallback(async () => {
57
55
  setLoadingQuery(true);
58
56
  await hideGroups(iModelConnection, groups, hilitedElementsQueryCache);
@@ -64,6 +62,7 @@ export const GroupsVisualization = ({ emphasizeElements = true, isNonEmphasizedS
64
62
  setLoadingQuery(false);
65
63
  }, [hilitedElementsQueryCache, iModelConnection]);
66
64
  const showGroup = useCallback(async (viewGroup) => {
65
+ setLoadingQuery(true);
67
66
  clearHiddenElements();
68
67
  // hide group Ids filter
69
68
  const newHiddenGroups = groups.filter((g) => hiddenGroupsIds.has(g.id) && g.id !== viewGroup.id);
@@ -73,20 +72,19 @@ export const GroupsVisualization = ({ emphasizeElements = true, isNonEmphasizedS
73
72
  let hiddenIds = await getHiliteIdsFromGroupsWrapper(newHiddenGroups);
74
73
  hiddenIds = hiddenIds.filter((id) => !viewIds.includes(id));
75
74
  hideElements(hiddenIds);
75
+ setLoadingQuery(false);
76
76
  }, [groups, hiddenGroupsIds, getHiliteIdsFromGroupsWrapper]);
77
77
  const showAll = useCallback(async () => {
78
78
  setLoadingQuery(true);
79
79
  clearHiddenElements();
80
80
  setHiddenGroupsIds(new Set());
81
- const allIds = await getHiliteIdsFromGroupsWrapper(groups);
82
- await zoomToElements(allIds);
81
+ await getHiliteIdsFromGroupsWrapper(groups);
83
82
  setLoadingQuery(false);
84
83
  }, [getHiliteIdsFromGroupsWrapper, groups, setHiddenGroupsIds]);
85
84
  const hideAll = useCallback(async () => {
86
85
  await hideAllGroups();
87
86
  setHiddenGroupsIds(new Set(groups.map((g) => g.id)));
88
- const allIds = await getHiliteIdsFromGroupsWrapper(groups);
89
- await zoomToElements(allIds);
87
+ await getHiliteIdsFromGroupsWrapper(groups);
90
88
  }, [
91
89
  setHiddenGroupsIds,
92
90
  groups,
@@ -115,6 +113,6 @@ export const GroupsVisualization = ({ emphasizeElements = true, isNonEmphasizedS
115
113
  ].flat(), [groups, hideSingleGroupWrapper, isLoadingQuery, showGroup, showGroupColor]);
116
114
  return (React.createElement("div", { className: "gmw-groups-vis-container" },
117
115
  React.createElement(GroupVisualizationActions, { isLoadingQuery: isLoadingQuery, showAll: showAll, hideAll: hideAll }),
118
- React.createElement(Groupings, { onClickGroupModify: onModify, onClickAddGroup: onAddGroup, actionButtonRenderers: groupActionButtonRenderers, ...rest, disableActions: isLoadingQuery, isVisualizing: isVisualizing })));
116
+ React.createElement(Groups, { onClickGroupModify: onModify, onClickAddGroup: onAddGroup, actionButtonRenderers: groupActionButtonRenderers, ...rest, disableActions: isLoadingQuery, isVisualizing: isVisualizing })));
119
117
  };
120
118
  //# sourceMappingURL=GroupsVisualization.js.map