@itwin/tree-widget-react 4.0.0-alpha.7 → 4.0.0-alpha.9

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 (98) hide show
  1. package/lib/esm/tree-widget-react/TreeWidget.d.ts +6 -1
  2. package/lib/esm/tree-widget-react/TreeWidget.js +19 -2
  3. package/lib/esm/tree-widget-react/TreeWidget.js.map +1 -1
  4. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.d.ts +6 -0
  5. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js +22 -23
  6. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js.map +1 -1
  7. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +1 -1
  8. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
  9. package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js +1 -1
  10. package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js.map +1 -1
  11. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.d.ts +0 -1
  12. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js +3 -4
  13. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js.map +1 -1
  14. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.css +1 -0
  15. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.d.ts +12 -4
  16. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +13 -9
  17. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js.map +1 -1
  18. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +2 -2
  19. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -2
  20. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
  21. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +3 -3
  22. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
  23. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -1
  24. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
  25. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +36 -182
  26. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
  27. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +7 -11
  28. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
  29. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js +107 -191
  30. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js.map +1 -1
  31. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.d.ts +25 -0
  32. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +133 -0
  33. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +1 -0
  34. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.d.ts +8 -0
  35. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js +48 -0
  36. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js.map +1 -0
  37. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.d.ts +0 -2
  38. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +8 -4
  39. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
  40. package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js +11 -10
  41. package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js.map +1 -1
  42. package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +5 -0
  43. package/lib/esm/tree-widget-react/components/trees/common/Utils.js +5 -0
  44. package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
  45. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.d.ts +1 -1
  46. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +2 -2
  47. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js.map +1 -1
  48. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +3 -3
  49. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +11 -2
  50. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
  51. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +6 -4
  52. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +20 -25
  53. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
  54. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
  55. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +10 -4
  56. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
  57. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js +6 -3
  58. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
  59. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +1 -1
  60. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +12 -11
  61. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
  62. package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.d.ts +3 -11
  63. package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js +3 -15
  64. package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js.map +1 -1
  65. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +4 -23
  66. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +33 -57
  67. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
  68. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +2 -2
  69. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +8 -8
  70. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  71. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +1 -1
  72. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  73. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +2 -2
  74. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +11 -11
  75. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  76. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +1 -1
  77. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +1 -1
  78. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  79. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +2 -2
  80. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +2 -2
  81. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
  82. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +6 -6
  83. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
  84. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +1 -1
  85. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  86. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +36 -220
  87. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
  88. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +24 -87
  89. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
  90. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +27 -0
  91. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +170 -0
  92. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +1 -0
  93. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.d.ts +8 -0
  94. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js +47 -0
  95. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js.map +1 -0
  96. package/lib/public/locales/en/TreeWidget.json +4 -95
  97. package/package.json +6 -6
  98. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.css +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeVisibilityButton.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,gCAAgC,CAAC;AAsBxC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,0CAA0C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AACpG,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,6CAA6C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAC1G,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,0CAA0C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAEpG,gBAAgB;AAChB,MAAM,UAAU,sBAAsB,CAAC,EACrC,wBAAwB,EACxB,uBAAuB,GACO;IAC9B,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,QAAQ,KAAK,CAAC,KAAK,EAAE;gBACnB,KAAK,SAAS;oBACZ,OAAO,iBAAiB,CAAC;gBAC3B,KAAK,QAAQ;oBACX,OAAO,iBAAiB,CAAC;gBAC3B,KAAK,SAAS;oBACZ,OAAO,oBAAoB,CAAC;aAC/B;QACH,CAAC,CAAC;QACF,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,2BAA2B;YACnD,MAAM,EAAE,GAAG,EAAE;gBACX,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAClD,IAAI,EAAE,OAAO,EAAE;SAChB,CAAC;IACJ,CAAC,CAAC;AACJ,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 *--------------------------------------------------------------------------------------------*/\n\nimport \"./TreeNodeVisibilityButton.css\";\n\nimport type { PresentationHierarchyNode, TreeItemAction } from \"@itwin/presentation-hierarchies-react\";\n\n/**\n * Data structure that describes tree node checkbox state.\n * @beta\n */\ninterface TreeItemVisibilityButtonState {\n state: \"visible\" | \"partial\" | \"hidden\";\n isDisabled?: boolean;\n tooltip?: string;\n}\n\n/** @beta */\nexport interface TreeItemVisibilityButtonProps {\n /** Callback that should be invoked when checkbox is clicked. */\n onVisibilityButtonClick: (node: PresentationHierarchyNode, state: TreeItemVisibilityButtonState[\"state\"]) => void;\n /** Callback that should be used to determine current checkbox state. */\n getVisibilityButtonState: (node: PresentationHierarchyNode) => TreeItemVisibilityButtonState;\n}\n\nconst visibilityHideSvg = new URL(\"@itwin/itwinui-icons/visibility-hide.svg\", import.meta.url).href;\nconst visibilityPartialSvg = new URL(\"@itwin/itwinui-icons/visibility-partial.svg\", import.meta.url).href;\nconst visibilityShowSvg = new URL(\"@itwin/itwinui-icons/visibility-show.svg\", import.meta.url).href;\n\n/** @internal */\nexport function createVisibilityAction({\n getVisibilityButtonState,\n onVisibilityButtonClick,\n}: TreeItemVisibilityButtonProps): (node: PresentationHierarchyNode) => TreeItemAction {\n return (node) => {\n const state = getVisibilityButtonState(node);\n\n const getIcon = () => {\n switch (state.state) {\n case \"visible\":\n return visibilityShowSvg;\n case \"hidden\":\n return visibilityHideSvg;\n case \"partial\":\n return visibilityPartialSvg;\n }\n };\n return {\n label: state.tooltip ?? \"Determining visibility...\",\n action: () => {\n onVisibilityButtonClick(node, state.state);\n },\n show: state.state !== \"visible\" ? true : undefined,\n icon: getIcon(),\n };\n };\n}\n"]}
1
+ {"version":3,"file":"TreeNodeVisibilityButton.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,iBAAiB,MAAM,0CAA0C,CAAC;AACzE,OAAO,oBAAoB,MAAM,6CAA6C,CAAC;AAC/E,OAAO,iBAAiB,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAsBvD,gBAAgB;AAChB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,gBAAgB,CAAC,EAC7D,wBAAwB,EACxB,uBAAuB,EACvB,IAAI,GACgE;IACpE,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,QAAQ,KAAK,CAAC,KAAK,EAAE;YACnB,KAAK,SAAS;gBACZ,OAAO,iBAAiB,CAAC;YAC3B,KAAK,QAAQ;gBACX,OAAO,iBAAiB,CAAC;YAC3B,KAAK,SAAS;gBACZ,OAAO,oBAAoB,CAAC;SAC/B;IACH,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,IAAI,CAAC,UAAU,IACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAClD,OAAO,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,EACzD,OAAO,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EACrD,IAAI,EAAE,OAAO,EAAE,GACf,CACH,CAAC;AACJ,CAAC,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 *--------------------------------------------------------------------------------------------*/\n\nimport \"./TreeNodeVisibilityButton.css\";\nimport { memo } from \"react\";\nimport visibilityHideSvg from \"@itwin/itwinui-icons/visibility-hide.svg\";\nimport visibilityPartialSvg from \"@itwin/itwinui-icons/visibility-partial.svg\";\nimport visibilityShowSvg from \"@itwin/itwinui-icons/visibility-show.svg\";\nimport { Tree } from \"@itwin/itwinui-react/bricks\";\nimport { createTooltip } from \"../internal/Tooltip.js\";\n\nimport type { PresentationHierarchyNode } from \"@itwin/presentation-hierarchies-react\";\n\n/**\n * Data structure that describes tree node checkbox state.\n * @beta\n */\nexport interface TreeItemVisibilityButtonState {\n state: \"visible\" | \"partial\" | \"hidden\";\n isDisabled?: boolean;\n tooltip?: string;\n}\n\n/** @beta */\nexport interface TreeItemVisibilityButtonProps {\n /** Callback that should be invoked when checkbox is clicked. */\n onVisibilityButtonClick: (node: PresentationHierarchyNode, state: TreeItemVisibilityButtonState[\"state\"]) => void;\n /** Callback that should be used to determine current checkbox state. */\n getVisibilityButtonState: (node: PresentationHierarchyNode) => TreeItemVisibilityButtonState;\n}\n\n/** @internal */\nexport const VisibilityAction = memo(function VisibilityAction({\n getVisibilityButtonState,\n onVisibilityButtonClick,\n node,\n}: TreeItemVisibilityButtonProps & { node: PresentationHierarchyNode }) {\n const state = getVisibilityButtonState(node);\n\n const getIcon = () => {\n switch (state.state) {\n case \"visible\":\n return visibilityShowSvg;\n case \"hidden\":\n return visibilityHideSvg;\n case \"partial\":\n return visibilityPartialSvg;\n }\n };\n\n return (\n <Tree.ItemAction\n label={state.tooltip ?? createTooltip(state.state)}\n onClick={() => onVisibilityButtonClick(node, state.state)}\n visible={state.state !== \"visible\" ? true : undefined}\n icon={getIcon()}\n />\n );\n});\n"]}
@@ -3,5 +3,5 @@ import type { BaseTreeRendererProps } from "./BaseTreeRenderer.js";
3
3
  * Default renderer for rendering tree data.
4
4
  * @beta
5
5
  */
6
- export declare function TreeRenderer({ actions, ...props }: BaseTreeRendererProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function TreeRenderer({ getActions, getHierarchyLevelDetails, onFilterClick, ...props }: BaseTreeRendererProps): import("react/jsx-runtime").JSX.Element;
7
7
  //# sourceMappingURL=TreeRenderer.d.ts.map
@@ -4,14 +4,20 @@ import { jsx as _jsx } from "react/jsx-runtime";
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  /* eslint-disable @itwin/no-internal */
7
- import { useFilterAction } from "@itwin/presentation-hierarchies-react";
7
+ import { useCallback } from "react";
8
+ import { FilterAction } from "@itwin/presentation-hierarchies-react";
8
9
  import { BaseTreeRenderer } from "./BaseTreeRenderer.js";
9
10
  /**
10
11
  * Default renderer for rendering tree data.
11
12
  * @beta
12
13
  */
13
- export function TreeRenderer({ actions, ...props }) {
14
- const filterAction = useFilterAction({ onFilter: props.onFilterClick, getHierarchyLevelDetails: props.getHierarchyLevelDetails });
15
- return _jsx(BaseTreeRenderer, { ...props, actions: [filterAction, ...(actions ? actions : [])] });
14
+ export function TreeRenderer({ getActions, getHierarchyLevelDetails, onFilterClick, ...props }) {
15
+ const nodeActions = useCallback((node) => {
16
+ return [
17
+ _jsx(FilterAction, { node: node, onFilter: onFilterClick, getHierarchyLevelDetails: getHierarchyLevelDetails }, "Filter"),
18
+ ...(getActions ? getActions(node) : []),
19
+ ];
20
+ }, [onFilterClick, getHierarchyLevelDetails, getActions]);
21
+ return _jsx(BaseTreeRenderer, { ...props, onFilterClick: onFilterClick, getHierarchyLevelDetails: getHierarchyLevelDetails, getActions: nodeActions });
16
22
  }
17
23
  //# sourceMappingURL=TreeRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TreeRenderer.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/components/TreeRenderer.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG,uCAAuC;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAyB;IACvE,MAAM,YAAY,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,wBAAwB,EAAE,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAClI,OAAO,KAAC,gBAAgB,OAAK,KAAK,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAI,CAAC;AAC/F,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 *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @itwin/no-internal */\n\nimport { useFilterAction } from \"@itwin/presentation-hierarchies-react\";\nimport { BaseTreeRenderer } from \"./BaseTreeRenderer.js\";\n\nimport type { BaseTreeRendererProps } from \"./BaseTreeRenderer.js\";\n\n/**\n * Default renderer for rendering tree data.\n * @beta\n */\nexport function TreeRenderer({ actions, ...props }: BaseTreeRendererProps) {\n const filterAction = useFilterAction({ onFilter: props.onFilterClick, getHierarchyLevelDetails: props.getHierarchyLevelDetails });\n return <BaseTreeRenderer {...props} actions={[filterAction, ...(actions ? actions : [])]} />;\n}\n"]}
1
+ {"version":3,"file":"TreeRenderer.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/components/TreeRenderer.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG,uCAAuC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,UAAU,EAAE,wBAAwB,EAAE,aAAa,EAAE,GAAG,KAAK,EAAyB;IACnH,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,IAA+B,EAAE,EAAE;QAClC,OAAO;YACL,KAAC,YAAY,IAAgB,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,wBAAwB,EAAE,wBAAwB,IAAjG,QAAQ,CAA6F;YACxH,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC;IACJ,CAAC,EACD,CAAC,aAAa,EAAE,wBAAwB,EAAE,UAAU,CAAC,CACtD,CAAC;IAEF,OAAO,KAAC,gBAAgB,OAAK,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,UAAU,EAAE,WAAW,GAAI,CAAC;AACpJ,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 *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @itwin/no-internal */\n\nimport { useCallback } from \"react\";\nimport { FilterAction } from \"@itwin/presentation-hierarchies-react\";\nimport { BaseTreeRenderer } from \"./BaseTreeRenderer.js\";\n\nimport type { PresentationHierarchyNode } from \"@itwin/presentation-hierarchies-react\";\nimport type { BaseTreeRendererProps } from \"./BaseTreeRenderer.js\";\n/**\n * Default renderer for rendering tree data.\n * @beta\n */\nexport function TreeRenderer({ getActions, getHierarchyLevelDetails, onFilterClick, ...props }: BaseTreeRendererProps) {\n const nodeActions = useCallback(\n (node: PresentationHierarchyNode) => {\n return [\n <FilterAction key={\"Filter\"} node={node} onFilter={onFilterClick} getHierarchyLevelDetails={getHierarchyLevelDetails} />,\n ...(getActions ? getActions(node) : []),\n ];\n },\n [onFilterClick, getHierarchyLevelDetails, getActions],\n );\n\n return <BaseTreeRenderer {...props} onFilterClick={onFilterClick} getHierarchyLevelDetails={getHierarchyLevelDetails} getActions={nodeActions} />;\n}\n"]}
@@ -4,15 +4,18 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { useCallback } from "react";
6
6
  import { isPresentationHierarchyNode } from "@itwin/presentation-hierarchies-react";
7
+ import { useLatest } from "../internal/Utils.js";
7
8
  /** @internal */
8
9
  export function useVisibilityButtonHandler({ rootNodes, isNodeSelected, onClick }) {
10
+ const isNodeSelectedRef = useLatest(isNodeSelected);
11
+ const rootNodesRef = useLatest(rootNodes);
9
12
  const onVisibilityButtonClick = useCallback((clickedNode, state) => {
10
- if (!isNodeSelected?.(clickedNode.id)) {
13
+ if (!isNodeSelectedRef.current?.(clickedNode.id)) {
11
14
  onClick(clickedNode, state);
12
15
  return;
13
16
  }
14
- rootNodes && forEachSelectedNode(rootNodes, isNodeSelected, (node) => onClick(node, state));
15
- }, [rootNodes, isNodeSelected, onClick]);
17
+ rootNodesRef.current && forEachSelectedNode(rootNodesRef.current, isNodeSelectedRef.current, (node) => onClick(node, state));
18
+ }, [onClick, isNodeSelectedRef, rootNodesRef]);
16
19
  return { onVisibilityButtonClick };
17
20
  }
18
21
  function forEachSelectedNode(nodes, isNodeSelected, callback) {
@@ -1 +1 @@
1
- {"version":3,"file":"UseVisibilityButtonHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAepF,gBAAgB;AAChB,MAAM,UAAU,0BAA0B,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAmC;IAChH,MAAM,uBAAuB,GAAG,WAAW,CACzC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;YACrC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5B,OAAO;SACR;QACD,SAAS,IAAI,mBAAmB,CAAC,SAAS,EAAE,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9F,CAAC,EACD,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,CACrC,CAAC;IAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAkC,EAClC,cAA2C,EAC3C,QAAmD;IAEnD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,OAAO;SACR;QACD,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAC3B,QAAQ,CAAC,IAAI,CAAC,CAAC;SAChB;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YACzD,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;SAC9D;IACH,CAAC,CAAC,CAAC;AACL,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 *--------------------------------------------------------------------------------------------*/\n\nimport { useCallback } from \"react\";\nimport { isPresentationHierarchyNode } from \"@itwin/presentation-hierarchies-react\";\n\nimport type { PresentationHierarchyNode, PresentationTreeNode } from \"@itwin/presentation-hierarchies-react\";\nimport type { TreeItemVisibilityButtonProps } from \"./TreeNodeVisibilityButton.js\";\n\ninterface UseVisibilityButtonHandlerProps {\n rootNodes: PresentationTreeNode[] | undefined;\n isNodeSelected?: (nodeId: string) => boolean;\n onClick: TreeItemVisibilityButtonProps[\"onVisibilityButtonClick\"];\n}\n\ninterface UseVisibilityButtonHandlerResult {\n onVisibilityButtonClick: TreeItemVisibilityButtonProps[\"onVisibilityButtonClick\"];\n}\n\n/** @internal */\nexport function useVisibilityButtonHandler({ rootNodes, isNodeSelected, onClick }: UseVisibilityButtonHandlerProps): UseVisibilityButtonHandlerResult {\n const onVisibilityButtonClick = useCallback<TreeItemVisibilityButtonProps[\"onVisibilityButtonClick\"]>(\n (clickedNode, state) => {\n if (!isNodeSelected?.(clickedNode.id)) {\n onClick(clickedNode, state);\n return;\n }\n rootNodes && forEachSelectedNode(rootNodes, isNodeSelected, (node) => onClick(node, state));\n },\n [rootNodes, isNodeSelected, onClick],\n );\n\n return { onVisibilityButtonClick };\n}\n\nfunction forEachSelectedNode(\n nodes: Array<PresentationTreeNode>,\n isNodeSelected: (nodeId: string) => boolean,\n callback: (node: PresentationHierarchyNode) => void,\n) {\n nodes.forEach((node) => {\n if (!isPresentationHierarchyNode(node)) {\n return;\n }\n if (isNodeSelected(node.id)) {\n callback(node);\n }\n if (node.isExpanded && typeof node.children !== \"boolean\") {\n forEachSelectedNode(node.children, isNodeSelected, callback);\n }\n });\n}\n"]}
1
+ {"version":3,"file":"UseVisibilityButtonHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAejD,gBAAgB;AAChB,MAAM,UAAU,0BAA0B,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAmC;IAChH,MAAM,iBAAiB,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAE1C,MAAM,uBAAuB,GAAG,WAAW,CACzC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;YAChD,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5B,OAAO;SACR;QACD,YAAY,CAAC,OAAO,IAAI,mBAAmB,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/H,CAAC,EACD,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAC3C,CAAC;IAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAkC,EAClC,cAA2C,EAC3C,QAAmD;IAEnD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,OAAO;SACR;QACD,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAC3B,QAAQ,CAAC,IAAI,CAAC,CAAC;SAChB;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YACzD,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;SAC9D;IACH,CAAC,CAAC,CAAC;AACL,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 *--------------------------------------------------------------------------------------------*/\n\nimport { useCallback } from \"react\";\nimport { isPresentationHierarchyNode } from \"@itwin/presentation-hierarchies-react\";\nimport { useLatest } from \"../internal/Utils.js\";\n\nimport type { PresentationHierarchyNode, PresentationTreeNode } from \"@itwin/presentation-hierarchies-react\";\nimport type { TreeItemVisibilityButtonProps } from \"./TreeNodeVisibilityButton.js\";\n\ninterface UseVisibilityButtonHandlerProps {\n rootNodes: PresentationTreeNode[] | undefined;\n isNodeSelected?: (nodeId: string) => boolean;\n onClick: TreeItemVisibilityButtonProps[\"onVisibilityButtonClick\"];\n}\n\ninterface UseVisibilityButtonHandlerResult {\n onVisibilityButtonClick: TreeItemVisibilityButtonProps[\"onVisibilityButtonClick\"];\n}\n\n/** @internal */\nexport function useVisibilityButtonHandler({ rootNodes, isNodeSelected, onClick }: UseVisibilityButtonHandlerProps): UseVisibilityButtonHandlerResult {\n const isNodeSelectedRef = useLatest(isNodeSelected);\n const rootNodesRef = useLatest(rootNodes);\n\n const onVisibilityButtonClick = useCallback<TreeItemVisibilityButtonProps[\"onVisibilityButtonClick\"]>(\n (clickedNode, state) => {\n if (!isNodeSelectedRef.current?.(clickedNode.id)) {\n onClick(clickedNode, state);\n return;\n }\n rootNodesRef.current && forEachSelectedNode(rootNodesRef.current, isNodeSelectedRef.current, (node) => onClick(node, state));\n },\n [onClick, isNodeSelectedRef, rootNodesRef],\n );\n\n return { onVisibilityButtonClick };\n}\n\nfunction forEachSelectedNode(\n nodes: Array<PresentationTreeNode>,\n isNodeSelected: (nodeId: string) => boolean,\n callback: (node: PresentationHierarchyNode) => void,\n) {\n nodes.forEach((node) => {\n if (!isPresentationHierarchyNode(node)) {\n return;\n }\n if (isNodeSelected(node.id)) {\n callback(node);\n }\n if (node.isExpanded && typeof node.children !== \"boolean\") {\n forEachSelectedNode(node.children, isNodeSelected, callback);\n }\n });\n}\n"]}
@@ -6,5 +6,5 @@ export type VisibilityTreeRendererProps = BaseTreeRendererProps & TreeItemVisibi
6
6
  * Tree renderer that renders tree nodes with eye checkboxes for controlling visibility of instances represented by tree nodes.
7
7
  * @beta
8
8
  */
9
- export declare function VisibilityTreeRenderer({ getVisibilityButtonState, onVisibilityButtonClick: onClick, actions, ...props }: VisibilityTreeRendererProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function VisibilityTreeRenderer({ getVisibilityButtonState, onVisibilityButtonClick: onClick, getActions, onFilterClick, getHierarchyLevelDetails, ...props }: VisibilityTreeRendererProps): import("react/jsx-runtime").JSX.Element;
10
10
  //# sourceMappingURL=VisibilityTreeRenderer.d.ts.map
@@ -4,23 +4,24 @@ import { jsx as _jsx } from "react/jsx-runtime";
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  /* eslint-disable @itwin/no-internal */
7
- import { useMemo } from "react";
8
- import { useFilterAction } from "@itwin/presentation-hierarchies-react";
7
+ import { useCallback } from "react";
8
+ import { FilterAction } from "@itwin/presentation-hierarchies-react";
9
9
  import { BaseTreeRenderer } from "./BaseTreeRenderer.js";
10
- import { createVisibilityAction } from "./TreeNodeVisibilityButton.js";
10
+ import { VisibilityAction } from "./TreeNodeVisibilityButton.js";
11
11
  import { useVisibilityButtonHandler } from "./UseVisibilityButtonHandler.js";
12
12
  /**
13
13
  * Tree renderer that renders tree nodes with eye checkboxes for controlling visibility of instances represented by tree nodes.
14
14
  * @beta
15
15
  */
16
- export function VisibilityTreeRenderer({ getVisibilityButtonState, onVisibilityButtonClick: onClick, actions, ...props }) {
16
+ export function VisibilityTreeRenderer({ getVisibilityButtonState, onVisibilityButtonClick: onClick, getActions, onFilterClick, getHierarchyLevelDetails, ...props }) {
17
17
  const { onVisibilityButtonClick } = useVisibilityButtonHandler({ rootNodes: props.rootNodes, isNodeSelected: props.isNodeSelected, onClick });
18
- const visibilityButtonProps = useMemo(() => ({
19
- variant: "eyeball",
20
- getVisibilityButtonState,
21
- onVisibilityButtonClick,
22
- }), [getVisibilityButtonState, onVisibilityButtonClick]);
23
- const filterAction = useFilterAction({ onFilter: props.onFilterClick, getHierarchyLevelDetails: props.getHierarchyLevelDetails });
24
- return (_jsx(BaseTreeRenderer, { ...props, actions: [...(visibilityButtonProps ? [createVisibilityAction(visibilityButtonProps)] : []), filterAction, ...(actions ? actions : [])] }));
18
+ const nodeActions = useCallback((node) => {
19
+ return [
20
+ _jsx(VisibilityAction, { node: node, onVisibilityButtonClick: onVisibilityButtonClick, getVisibilityButtonState: getVisibilityButtonState }, "Visibility"),
21
+ _jsx(FilterAction, { node: node, onFilter: onFilterClick, getHierarchyLevelDetails: getHierarchyLevelDetails }, "Filter"),
22
+ ...(getActions ? getActions(node) : []),
23
+ ];
24
+ }, [onVisibilityButtonClick, getVisibilityButtonState, onFilterClick, getHierarchyLevelDetails, getActions]);
25
+ return _jsx(BaseTreeRenderer, { ...props, onFilterClick: onFilterClick, getHierarchyLevelDetails: getHierarchyLevelDetails, getActions: nodeActions });
25
26
  }
26
27
  //# sourceMappingURL=VisibilityTreeRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityTreeRenderer.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG,uCAAuC;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAQ7E;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,EAA+B;IACnJ,MAAM,EAAE,uBAAuB,EAAE,GAAG,0BAA0B,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9I,MAAM,qBAAqB,GAAkC,OAAO,CAClE,GAAG,EAAE,CAAC,CAAC;QACL,OAAO,EAAE,SAAS;QAClB,wBAAwB;QACxB,uBAAuB;KACxB,CAAC,EACF,CAAC,wBAAwB,EAAE,uBAAuB,CAAC,CACpD,CAAC;IAEF,MAAM,YAAY,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,wBAAwB,EAAE,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAElI,OAAO,CACL,KAAC,gBAAgB,OACX,KAAK,EACT,OAAO,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACvI,CACH,CAAC;AACJ,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 *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @itwin/no-internal */\n\nimport { useMemo } from \"react\";\nimport { useFilterAction } from \"@itwin/presentation-hierarchies-react\";\nimport { BaseTreeRenderer } from \"./BaseTreeRenderer.js\";\nimport { createVisibilityAction } from \"./TreeNodeVisibilityButton.js\";\nimport { useVisibilityButtonHandler } from \"./UseVisibilityButtonHandler.js\";\n\nimport type { BaseTreeRendererProps } from \"./BaseTreeRenderer.js\";\nimport type { TreeItemVisibilityButtonProps } from \"./TreeNodeVisibilityButton.js\";\n\n/** @beta */\nexport type VisibilityTreeRendererProps = BaseTreeRendererProps & TreeItemVisibilityButtonProps;\n\n/**\n * Tree renderer that renders tree nodes with eye checkboxes for controlling visibility of instances represented by tree nodes.\n * @beta\n */\nexport function VisibilityTreeRenderer({ getVisibilityButtonState, onVisibilityButtonClick: onClick, actions, ...props }: VisibilityTreeRendererProps) {\n const { onVisibilityButtonClick } = useVisibilityButtonHandler({ rootNodes: props.rootNodes, isNodeSelected: props.isNodeSelected, onClick });\n const visibilityButtonProps: TreeItemVisibilityButtonProps = useMemo(\n () => ({\n variant: \"eyeball\",\n getVisibilityButtonState,\n onVisibilityButtonClick,\n }),\n [getVisibilityButtonState, onVisibilityButtonClick],\n );\n\n const filterAction = useFilterAction({ onFilter: props.onFilterClick, getHierarchyLevelDetails: props.getHierarchyLevelDetails });\n\n return (\n <BaseTreeRenderer\n {...props}\n actions={[...(visibilityButtonProps ? [createVisibilityAction(visibilityButtonProps)] : []), filterAction, ...(actions ? actions : [])]}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"VisibilityTreeRenderer.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG,uCAAuC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAS7E;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,EACrC,wBAAwB,EACxB,uBAAuB,EAAE,OAAO,EAChC,UAAU,EACV,aAAa,EACb,wBAAwB,EACxB,GAAG,KAAK,EACoB;IAC5B,MAAM,EAAE,uBAAuB,EAAE,GAAG,0BAA0B,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;IAE9I,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,IAA+B,EAAE,EAAE;QAClC,OAAO;YACL,KAAC,gBAAgB,IAEf,IAAI,EAAE,IAAI,EACV,uBAAuB,EAAE,uBAAuB,EAChD,wBAAwB,EAAE,wBAAwB,IAH7C,YAAY,CAIjB;YACF,KAAC,YAAY,IAAgB,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,wBAAwB,EAAE,wBAAwB,IAAjG,QAAQ,CAA6F;YACxH,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC;IACJ,CAAC,EACD,CAAC,uBAAuB,EAAE,wBAAwB,EAAE,aAAa,EAAE,wBAAwB,EAAE,UAAU,CAAC,CACzG,CAAC;IAEF,OAAO,KAAC,gBAAgB,OAAK,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,UAAU,EAAE,WAAW,GAAI,CAAC;AACpJ,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 *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @itwin/no-internal */\n\nimport { useCallback } from \"react\";\nimport { FilterAction } from \"@itwin/presentation-hierarchies-react\";\nimport { BaseTreeRenderer } from \"./BaseTreeRenderer.js\";\nimport { VisibilityAction } from \"./TreeNodeVisibilityButton.js\";\nimport { useVisibilityButtonHandler } from \"./UseVisibilityButtonHandler.js\";\n\nimport type { PresentationHierarchyNode } from \"@itwin/presentation-hierarchies-react\";\nimport type { BaseTreeRendererProps } from \"./BaseTreeRenderer.js\";\nimport type { TreeItemVisibilityButtonProps } from \"./TreeNodeVisibilityButton.js\";\n\n/** @beta */\nexport type VisibilityTreeRendererProps = BaseTreeRendererProps & TreeItemVisibilityButtonProps;\n\n/**\n * Tree renderer that renders tree nodes with eye checkboxes for controlling visibility of instances represented by tree nodes.\n * @beta\n */\nexport function VisibilityTreeRenderer({\n getVisibilityButtonState,\n onVisibilityButtonClick: onClick,\n getActions,\n onFilterClick,\n getHierarchyLevelDetails,\n ...props\n}: VisibilityTreeRendererProps) {\n const { onVisibilityButtonClick } = useVisibilityButtonHandler({ rootNodes: props.rootNodes, isNodeSelected: props.isNodeSelected, onClick });\n\n const nodeActions = useCallback(\n (node: PresentationHierarchyNode) => {\n return [\n <VisibilityAction\n key={\"Visibility\"}\n node={node}\n onVisibilityButtonClick={onVisibilityButtonClick}\n getVisibilityButtonState={getVisibilityButtonState}\n />,\n <FilterAction key={\"Filter\"} node={node} onFilter={onFilterClick} getHierarchyLevelDetails={getHierarchyLevelDetails} />,\n ...(getActions ? getActions(node) : []),\n ];\n },\n [onVisibilityButtonClick, getVisibilityButtonState, onFilterClick, getHierarchyLevelDetails, getActions],\n );\n\n return <BaseTreeRenderer {...props} onFilterClick={onFilterClick} getHierarchyLevelDetails={getHierarchyLevelDetails} getActions={nodeActions} />;\n}\n"]}
@@ -5,17 +5,9 @@ export type Visibility = "visible" | "hidden" | "partial";
5
5
  export type NonPartialVisibilityStatus = Omit<VisibilityStatus, "state"> & {
6
6
  state: "visible" | "hidden";
7
7
  };
8
- interface VisibilityStatusOptions {
9
- useTooltip?: string | false;
10
- }
11
8
  /** @internal */
12
- export declare function createVisibilityStatus(status: "visible" | "hidden", options?: VisibilityStatusOptions): NonPartialVisibilityStatus;
13
- export declare function createVisibilityStatus(status: "visible" | "hidden" | "partial" | "disabled", options?: VisibilityStatusOptions): VisibilityStatus;
9
+ export declare function createVisibilityStatus(status: "visible" | "hidden"): NonPartialVisibilityStatus;
10
+ export declare function createVisibilityStatus(status: "visible" | "hidden" | "partial" | "disabled"): VisibilityStatus;
14
11
  /** @internal */
15
- export declare function createTooltip(status: Visibility | "disabled", tooltipStringId: string | undefined): string;
16
- /** @internal */
17
- export declare function getTooltipOptions(key: string | undefined, ignoreTooltip?: boolean): {
18
- useTooltip: string | false | undefined;
19
- };
20
- export {};
12
+ export declare function createTooltip(status: Visibility | "disabled" | "determining"): string;
21
13
  //# sourceMappingURL=Tooltip.d.ts.map
@@ -3,28 +3,16 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { TreeWidget } from "../../../../TreeWidget.js";
6
- export function createVisibilityStatus(status, { useTooltip } = {}) {
6
+ export function createVisibilityStatus(status) {
7
7
  return {
8
8
  state: status === "disabled" ? "hidden" : status,
9
9
  isDisabled: status === "disabled",
10
- tooltip: useTooltip === false ? undefined : createTooltip(status, useTooltip),
11
10
  };
12
11
  }
13
12
  /** @internal */
14
- export function createTooltip(status, tooltipStringId) {
13
+ export function createTooltip(status) {
15
14
  const statusStringId = `visibilityTooltips.status.${status}`;
16
15
  const statusString = TreeWidget.translate(statusStringId);
17
- if (!tooltipStringId) {
18
- return statusString;
19
- }
20
- tooltipStringId = `visibilityTooltips.${tooltipStringId}`;
21
- const tooltipString = TreeWidget.translate(tooltipStringId);
22
- return `${statusString}: ${tooltipString}`;
23
- }
24
- /** @internal */
25
- export function getTooltipOptions(key, ignoreTooltip) {
26
- return {
27
- useTooltip: ignoreTooltip ? false : key,
28
- };
16
+ return statusString;
29
17
  }
30
18
  //# sourceMappingURL=Tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/Tooltip.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAmBvD,MAAM,UAAU,sBAAsB,CAAC,MAA+B,EAAE,EAAE,UAAU,KAA8B,EAAE;IAClH,OAAO;QACL,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;QAChD,UAAU,EAAE,MAAM,KAAK,UAAU;QACjC,OAAO,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,MAA+B,EAAE,eAAmC;IAChG,MAAM,cAAc,GAAG,6BAA6B,MAAM,EAAE,CAAC;IAC7D,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC,eAAe,EAAE;QACpB,OAAO,YAAY,CAAC;KACrB;IAED,eAAe,GAAG,sBAAsB,eAAe,EAAE,CAAC;IAC1D,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC5D,OAAO,GAAG,YAAY,KAAK,aAAa,EAAE,CAAC;AAC7C,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,iBAAiB,CAAC,GAAuB,EAAE,aAAuB;IAChF,OAAO;QACL,UAAU,EAAE,aAAa,CAAC,CAAC,CAAE,KAAe,CAAC,CAAC,CAAC,GAAG;KACnD,CAAC;AACJ,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 *--------------------------------------------------------------------------------------------*/\n\nimport { TreeWidget } from \"../../../../TreeWidget.js\";\n\nimport type { VisibilityStatus } from \"../UseHierarchyVisibility.js\";\n\n/** @internal */\nexport type Visibility = \"visible\" | \"hidden\" | \"partial\";\n\n/** @internal */\nexport type NonPartialVisibilityStatus = Omit<VisibilityStatus, \"state\"> & { state: \"visible\" | \"hidden\" };\n\ninterface VisibilityStatusOptions {\n // id of localized string to use as an additional tooltip or false to not use tooltip at all\n // if undefined tooltip will be created based only on the visibility status\n useTooltip?: string | false;\n}\n\n/** @internal */\nexport function createVisibilityStatus(status: \"visible\" | \"hidden\", options?: VisibilityStatusOptions): NonPartialVisibilityStatus;\nexport function createVisibilityStatus(status: \"visible\" | \"hidden\" | \"partial\" | \"disabled\", options?: VisibilityStatusOptions): VisibilityStatus;\nexport function createVisibilityStatus(status: Visibility | \"disabled\", { useTooltip }: VisibilityStatusOptions = {}): VisibilityStatus {\n return {\n state: status === \"disabled\" ? \"hidden\" : status,\n isDisabled: status === \"disabled\",\n tooltip: useTooltip === false ? undefined : createTooltip(status, useTooltip),\n };\n}\n\n/** @internal */\nexport function createTooltip(status: Visibility | \"disabled\", tooltipStringId: string | undefined): string {\n const statusStringId = `visibilityTooltips.status.${status}`;\n const statusString = TreeWidget.translate(statusStringId);\n if (!tooltipStringId) {\n return statusString;\n }\n\n tooltipStringId = `visibilityTooltips.${tooltipStringId}`;\n const tooltipString = TreeWidget.translate(tooltipStringId);\n return `${statusString}: ${tooltipString}`;\n}\n\n/** @internal */\nexport function getTooltipOptions(key: string | undefined, ignoreTooltip?: boolean) {\n return {\n useTooltip: ignoreTooltip ? (false as const) : key,\n };\n}\n"]}
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/Tooltip.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAavD,MAAM,UAAU,sBAAsB,CAAC,MAA+B;IACpE,OAAO;QACL,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;QAChD,UAAU,EAAE,MAAM,KAAK,UAAU;KAClC,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,MAA+C;IAC3E,MAAM,cAAc,GAAG,6BAA6B,MAAM,EAAE,CAAC;IAC7D,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC;AACtB,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 *--------------------------------------------------------------------------------------------*/\n\nimport { TreeWidget } from \"../../../../TreeWidget.js\";\n\nimport type { VisibilityStatus } from \"../UseHierarchyVisibility.js\";\n\n/** @internal */\nexport type Visibility = \"visible\" | \"hidden\" | \"partial\";\n\n/** @internal */\nexport type NonPartialVisibilityStatus = Omit<VisibilityStatus, \"state\"> & { state: \"visible\" | \"hidden\" };\n\n/** @internal */\nexport function createVisibilityStatus(status: \"visible\" | \"hidden\"): NonPartialVisibilityStatus;\nexport function createVisibilityStatus(status: \"visible\" | \"hidden\" | \"partial\" | \"disabled\"): VisibilityStatus;\nexport function createVisibilityStatus(status: Visibility | \"disabled\"): VisibilityStatus {\n return {\n state: status === \"disabled\" ? \"hidden\" : status,\n isDisabled: status === \"disabled\",\n };\n}\n\n/** @internal */\nexport function createTooltip(status: Visibility | \"disabled\" | \"determining\"): string {\n const statusStringId = `visibilityTooltips.status.${status}`;\n const statusString = TreeWidget.translate(statusStringId);\n return statusString;\n}\n"]}
@@ -1,24 +1,18 @@
1
1
  import type { Viewport } from "@itwin/core-frontend";
2
2
  import type { Observable, OperatorFunction } from "rxjs";
3
3
  import type { Id64Array, Id64String } from "@itwin/core-bentley";
4
- import type { NonPartialVisibilityStatus, Visibility } from "./Tooltip.js";
4
+ import type { NonPartialVisibilityStatus } from "./Tooltip.js";
5
5
  import type { VisibilityStatus } from "../UseHierarchyVisibility.js";
6
6
  import type { ElementId, ModelId } from "./Types.js";
7
7
  import type { CategoryInfo } from "../CategoriesVisibilityUtils.js";
8
8
  /** @internal */
9
- export declare function mergeVisibilityStatuses(tooltipMap: {
10
- [key in Visibility]: string | undefined;
11
- }, ignoreTooltip?: boolean): OperatorFunction<VisibilityStatus, VisibilityStatus>;
9
+ export declare function mergeVisibilityStatuses(obs: Observable<VisibilityStatus>): Observable<VisibilityStatus>;
12
10
  /** @internal */
13
- export declare function getSubModeledElementsVisibilityStatus({ parentNodeVisibilityStatus, tooltips, ignoreTooltips, getModelVisibilityStatus, }: {
11
+ export declare function getSubModeledElementsVisibilityStatus({ parentNodeVisibilityStatus, getModelVisibilityStatus, }: {
14
12
  parentNodeVisibilityStatus: VisibilityStatus;
15
13
  getModelVisibilityStatus: ({ modelId }: {
16
14
  modelId: Id64String;
17
15
  }) => Observable<VisibilityStatus>;
18
- tooltips: {
19
- [key in Visibility]: string | undefined;
20
- };
21
- ignoreTooltips?: boolean;
22
16
  }): OperatorFunction<Id64Array, VisibilityStatus>;
23
17
  /** @internal */
24
18
  export declare function filterSubModeledElementIds({ doesSubModelExist, }: {
@@ -35,33 +29,20 @@ export declare function getVisibilityFromAlwaysAndNeverDrawnElementsImpl(props:
35
29
  alwaysDrawn: Set<ElementId> | undefined;
36
30
  neverDrawn: Set<ElementId> | undefined;
37
31
  totalCount: number;
38
- ignoreTooltip?: boolean;
39
32
  viewport: Viewport;
40
33
  } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps): VisibilityStatus;
41
34
  /** @internal */
42
35
  export declare function getElementOverriddenVisibility(props: {
43
36
  elementId: Id64String;
44
- ignoreTooltip?: boolean;
45
37
  viewport: Viewport;
46
- tooltips: {
47
- hiddenThroughNeverDrawn?: string;
48
- hiddenThroughAlwaysDrawnExclusive?: string;
49
- visibileThorughAlwaysDrawn?: string;
50
- };
51
38
  }): NonPartialVisibilityStatus | undefined;
52
39
  /** @internal */
53
40
  export interface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {
54
- tooltips: {
55
- allElementsInNeverDrawnList: string;
56
- allElementsInAlwaysDrawnList: string;
57
- elementsInBothAlwaysAndNeverDrawn: string;
58
- noElementsInExclusiveAlwaysDrawnList: string;
59
- };
60
41
  /** Status when always/never lists are empty and exclusive mode is off */
61
42
  defaultStatus: () => VisibilityStatus;
62
43
  }
63
44
  /** @internal */
64
- export declare function getElementVisibility(ignoreTooltip: boolean | undefined, viewsModel: boolean, overridenVisibility: NonPartialVisibilityStatus | undefined, categoryVisibility: NonPartialVisibilityStatus, treeType: "modelsTree" | "categoriesTree", subModelVisibilityStatus?: VisibilityStatus): VisibilityStatus;
45
+ export declare function getElementVisibility(viewsModel: boolean, overridenVisibility: NonPartialVisibilityStatus | undefined, categoryVisibility: NonPartialVisibilityStatus, subModelVisibilityStatus?: VisibilityStatus): VisibilityStatus;
65
46
  /**
66
47
  * Toggles visibility of categories to show or hide.
67
48
  * @internal
@@ -6,7 +6,7 @@ import { filter, from, map, mergeAll, mergeMap, of, reduce, startWith, toArray }
6
6
  import { QueryRowFormat } from "@itwin/core-common";
7
7
  import { PerModelCategoryVisibility } from "@itwin/core-frontend";
8
8
  import { reduceWhile } from "./Rxjs.js";
9
- import { createVisibilityStatus, getTooltipOptions } from "./Tooltip.js";
9
+ import { createVisibilityStatus } from "./Tooltip.js";
10
10
  import { getClassesByView, releaseMainThreadOnItemsCount } from "./Utils.js";
11
11
  function mergeVisibilities(obs) {
12
12
  return obs.pipe(reduceWhile((x) => x.allVisible || x.allHidden, (acc, val) => {
@@ -21,18 +21,16 @@ function mergeVisibilities(obs) {
21
21
  }));
22
22
  }
23
23
  /** @internal */
24
- export function mergeVisibilityStatuses(tooltipMap, ignoreTooltip) {
25
- return (obs) => {
26
- return obs.pipe(map((visibilityStatus) => visibilityStatus.state), mergeVisibilities, map((visibility) => {
27
- if (visibility === "empty") {
28
- visibility = "visible";
29
- }
30
- return createVisibilityStatus(visibility, getTooltipOptions(tooltipMap[visibility], ignoreTooltip));
31
- }));
32
- };
24
+ export function mergeVisibilityStatuses(obs) {
25
+ return obs.pipe(map((visibilityStatus) => visibilityStatus.state), mergeVisibilities, map((visibility) => {
26
+ if (visibility === "empty") {
27
+ visibility = "visible";
28
+ }
29
+ return createVisibilityStatus(visibility);
30
+ }));
33
31
  }
34
32
  /** @internal */
35
- export function getSubModeledElementsVisibilityStatus({ parentNodeVisibilityStatus, tooltips, ignoreTooltips, getModelVisibilityStatus, }) {
33
+ export function getSubModeledElementsVisibilityStatus({ parentNodeVisibilityStatus, getModelVisibilityStatus, }) {
36
34
  return (obs) => {
37
35
  return obs.pipe(
38
36
  // combine visibility status of sub-models with visibility status of parent node
@@ -40,7 +38,7 @@ export function getSubModeledElementsVisibilityStatus({ parentNodeVisibilityStat
40
38
  if (modeledElementIds.length === 0) {
41
39
  return of(parentNodeVisibilityStatus);
42
40
  }
43
- return from(modeledElementIds).pipe(mergeMap((modeledElementId) => getModelVisibilityStatus({ modelId: modeledElementId })), startWith(parentNodeVisibilityStatus), mergeVisibilityStatuses(tooltips, ignoreTooltips));
41
+ return from(modeledElementIds).pipe(mergeMap((modeledElementId) => getModelVisibilityStatus({ modelId: modeledElementId })), startWith(parentNodeVisibilityStatus), mergeVisibilityStatuses);
44
42
  }));
45
43
  };
46
44
  }
@@ -92,74 +90,52 @@ export function changeElementStateNoChildrenOperator(props) {
92
90
  }
93
91
  /** @internal */
94
92
  export function getVisibilityFromAlwaysAndNeverDrawnElementsImpl(props) {
95
- const { alwaysDrawn, neverDrawn, totalCount, ignoreTooltip } = props;
93
+ const { alwaysDrawn, neverDrawn, totalCount, viewport } = props;
96
94
  if (neverDrawn?.size === totalCount) {
97
- return createVisibilityStatus("hidden", getTooltipOptions(props.tooltips.allElementsInNeverDrawnList, ignoreTooltip));
95
+ return createVisibilityStatus("hidden");
98
96
  }
99
97
  if (alwaysDrawn?.size === totalCount) {
100
- return createVisibilityStatus("visible", getTooltipOptions(props.tooltips.allElementsInAlwaysDrawnList, ignoreTooltip));
98
+ return createVisibilityStatus("visible");
101
99
  }
102
- const viewport = props.viewport;
103
- if (viewport.isAlwaysDrawnExclusive && viewport.alwaysDrawn?.size) {
104
- return alwaysDrawn?.size
105
- ? createVisibilityStatus("partial", getTooltipOptions(props.tooltips.elementsInBothAlwaysAndNeverDrawn, ignoreTooltip))
106
- : createVisibilityStatus("hidden", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip));
100
+ if (viewport.isAlwaysDrawnExclusive) {
101
+ return createVisibilityStatus(alwaysDrawn?.size ? "partial" : "hidden");
107
102
  }
108
103
  const status = props.defaultStatus();
109
104
  if ((status.state === "visible" && neverDrawn?.size) || (status.state === "hidden" && alwaysDrawn?.size)) {
110
- return createVisibilityStatus("partial", getTooltipOptions(undefined, ignoreTooltip));
105
+ return createVisibilityStatus("partial");
111
106
  }
112
107
  return status;
113
108
  }
114
109
  /** @internal */
115
110
  export function getElementOverriddenVisibility(props) {
116
- const { ignoreTooltip, viewport, elementId, tooltips } = props;
111
+ const { viewport, elementId } = props;
117
112
  if (viewport.neverDrawn?.has(elementId)) {
118
- return createVisibilityStatus("hidden", getTooltipOptions(tooltips.hiddenThroughNeverDrawn, ignoreTooltip));
113
+ return createVisibilityStatus("hidden");
119
114
  }
120
- if (viewport.alwaysDrawn?.size) {
121
- if (viewport.alwaysDrawn.has(elementId)) {
122
- return createVisibilityStatus("visible", getTooltipOptions(tooltips.visibileThorughAlwaysDrawn, ignoreTooltip));
123
- }
124
- if (viewport.isAlwaysDrawnExclusive) {
125
- return createVisibilityStatus("hidden", getTooltipOptions(tooltips.hiddenThroughAlwaysDrawnExclusive, ignoreTooltip));
126
- }
115
+ if (viewport.alwaysDrawn?.has(elementId)) {
116
+ return createVisibilityStatus("visible");
117
+ }
118
+ if (viewport.isAlwaysDrawnExclusive) {
119
+ return createVisibilityStatus("hidden");
127
120
  }
128
121
  return undefined;
129
122
  }
130
123
  /** @internal */
131
- export function getElementVisibility(ignoreTooltip, viewsModel, overridenVisibility, categoryVisibility, treeType, subModelVisibilityStatus) {
132
- if (subModelVisibilityStatus === undefined) {
133
- if (!viewsModel) {
134
- return createVisibilityStatus("hidden", getTooltipOptions(`${treeType}.element.hiddenThroughModel`, ignoreTooltip));
135
- }
136
- if (overridenVisibility) {
137
- return overridenVisibility;
138
- }
139
- return createVisibilityStatus(categoryVisibility.state, getTooltipOptions(categoryVisibility.state === "visible" ? undefined : `${treeType}.element.hiddenThroughCategory`, ignoreTooltip));
140
- }
141
- if (subModelVisibilityStatus.state === "partial") {
142
- return createVisibilityStatus("partial", getTooltipOptions(`${treeType}.element.someElementsAreHidden`, ignoreTooltip));
143
- }
144
- if (subModelVisibilityStatus.state === "visible") {
145
- if (!viewsModel || overridenVisibility?.state === "hidden" || (categoryVisibility.state === "hidden" && !overridenVisibility)) {
146
- return createVisibilityStatus("partial", getTooltipOptions(`${treeType}.element.partialThroughSubModel`, ignoreTooltip));
147
- }
148
- return createVisibilityStatus("visible", getTooltipOptions(undefined, ignoreTooltip));
124
+ export function getElementVisibility(viewsModel, overridenVisibility, categoryVisibility, subModelVisibilityStatus) {
125
+ if (subModelVisibilityStatus?.state === "partial") {
126
+ return createVisibilityStatus("partial");
149
127
  }
150
128
  if (!viewsModel) {
151
- return createVisibilityStatus("hidden", getTooltipOptions(`${treeType}.element.hiddenThroughModel`, ignoreTooltip));
129
+ return createVisibilityStatus(subModelVisibilityStatus?.state === "visible" ? "partial" : "hidden");
152
130
  }
153
- if (overridenVisibility) {
154
- if (overridenVisibility.state === "hidden") {
155
- return overridenVisibility;
156
- }
157
- return createVisibilityStatus("partial", getTooltipOptions(`${treeType}.element.partialThroughElement`, ignoreTooltip));
131
+ const elementVisibilityWithoutSubModels = overridenVisibility ?? categoryVisibility;
132
+ if (!subModelVisibilityStatus) {
133
+ return elementVisibilityWithoutSubModels;
158
134
  }
159
- if (categoryVisibility.state === "visible") {
160
- return createVisibilityStatus("partial", getTooltipOptions(`${treeType}.element.partialThroughCategory`, ignoreTooltip));
135
+ if (elementVisibilityWithoutSubModels.state === subModelVisibilityStatus.state) {
136
+ return elementVisibilityWithoutSubModels;
161
137
  }
162
- return createVisibilityStatus("hidden", getTooltipOptions(`${treeType}.element.hiddenThroughCategory`, ignoreTooltip));
138
+ return createVisibilityStatus("partial");
163
139
  }
164
140
  /**
165
141
  * Toggles visibility of categories to show or hide.
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityUtils.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/VisibilityUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { filter, from, map, mergeAll, mergeMap, of, reduce, startWith, toArray } from \"rxjs\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { reduceWhile } from \"./Rxjs.js\";\nimport { createVisibilityStatus, getTooltipOptions } from \"./Tooltip.js\";\nimport { getClassesByView, releaseMainThreadOnItemsCount } from \"./Utils.js\";\n\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { Observable, OperatorFunction } from \"rxjs\";\nimport type { Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { NonPartialVisibilityStatus, Visibility } from \"./Tooltip.js\";\nimport type { VisibilityStatus } from \"../UseHierarchyVisibility.js\";\nimport type { ElementId, ModelId } from \"./Types.js\";\nimport type { CategoryInfo } from \"../CategoriesVisibilityUtils.js\";\n\nfunction mergeVisibilities(obs: Observable<Visibility>): Observable<Visibility | \"empty\"> {\n return obs.pipe(\n reduceWhile(\n (x) => x.allVisible || x.allHidden,\n (acc, val) => {\n acc.allVisible &&= val === \"visible\";\n acc.allHidden &&= val === \"hidden\";\n return acc;\n },\n { allVisible: true, allHidden: true },\n ),\n map((x) => {\n if (!x) {\n return \"empty\";\n }\n return x.allVisible ? \"visible\" : x.allHidden ? \"hidden\" : \"partial\";\n }),\n );\n}\n\n/** @internal */\nexport function mergeVisibilityStatuses(\n tooltipMap: { [key in Visibility]: string | undefined },\n ignoreTooltip?: boolean,\n): OperatorFunction<VisibilityStatus, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n map((visibilityStatus) => visibilityStatus.state),\n mergeVisibilities,\n map((visibility) => {\n if (visibility === \"empty\") {\n visibility = \"visible\";\n }\n return createVisibilityStatus(visibility, getTooltipOptions(tooltipMap[visibility], ignoreTooltip));\n }),\n );\n };\n}\n\n/** @internal */\nexport function getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus,\n tooltips,\n ignoreTooltips,\n getModelVisibilityStatus,\n}: {\n parentNodeVisibilityStatus: VisibilityStatus;\n getModelVisibilityStatus: ({ modelId }: { modelId: Id64String }) => Observable<VisibilityStatus>;\n tooltips: { [key in Visibility]: string | undefined };\n ignoreTooltips?: boolean;\n}): OperatorFunction<Id64Array, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n // combine visibility status of sub-models with visibility status of parent node\n mergeMap((modeledElementIds) => {\n if (modeledElementIds.length === 0) {\n return of(parentNodeVisibilityStatus);\n }\n return from(modeledElementIds).pipe(\n mergeMap((modeledElementId) => getModelVisibilityStatus({ modelId: modeledElementId })),\n startWith<VisibilityStatus>(parentNodeVisibilityStatus),\n mergeVisibilityStatuses(tooltips, ignoreTooltips),\n );\n }),\n );\n };\n}\n\n/** @internal */\nexport function filterSubModeledElementIds({\n doesSubModelExist,\n}: {\n doesSubModelExist: (elementId: Id64String) => Promise<boolean>;\n}): OperatorFunction<Array<ElementId>, Array<ModelId>> {\n return (obs) => {\n return obs.pipe(\n mergeAll(),\n mergeMap(async (elementId) => ({ elementId, hasSubModel: await doesSubModelExist(elementId) })),\n filter(({ hasSubModel }) => hasSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n );\n };\n}\n\n/** @internal */\nexport function changeElementStateNoChildrenOperator(props: {\n on: boolean;\n isDisplayedByDefault: boolean;\n viewport: Viewport;\n}): OperatorFunction<string, void> {\n return (elementIds: Observable<Id64String>) => {\n const { on, isDisplayedByDefault } = props;\n const isAlwaysDrawnExclusive = props.viewport.isAlwaysDrawnExclusive;\n return elementIds.pipe(\n releaseMainThreadOnItemsCount(500),\n reduce<\n string,\n { changedNeverDrawn: boolean; changedAlwaysDrawn: boolean; neverDrawn: Set<ElementId> | undefined; alwaysDrawn: Set<ElementId> | undefined }\n >(\n (acc, elementId) => {\n if (acc.alwaysDrawn === undefined || acc.neverDrawn === undefined) {\n acc.alwaysDrawn = new Set(props.viewport.alwaysDrawn || []);\n acc.neverDrawn = new Set(props.viewport.neverDrawn || []);\n }\n if (on) {\n const wasRemoved = acc.neverDrawn.delete(elementId);\n acc.changedNeverDrawn ||= wasRemoved;\n // If exclusive mode is enabled, we must add the element to the always drawn list.\n if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {\n acc.alwaysDrawn.add(elementId);\n acc.changedAlwaysDrawn = true;\n }\n } else {\n const wasRemoved = acc.alwaysDrawn.delete(elementId);\n acc.changedAlwaysDrawn ||= wasRemoved;\n // If exclusive mode is not enabled, we have to add the element to the never drawn list.\n if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {\n acc.neverDrawn.add(elementId);\n acc.changedNeverDrawn = true;\n }\n }\n return acc;\n },\n {\n changedNeverDrawn: false,\n changedAlwaysDrawn: false,\n neverDrawn: undefined,\n alwaysDrawn: undefined,\n },\n ),\n map((state) => {\n state.changedNeverDrawn && state.neverDrawn && props.viewport.setNeverDrawn(state.neverDrawn);\n state.changedAlwaysDrawn && state.alwaysDrawn && props.viewport.setAlwaysDrawn(state.alwaysDrawn, props.viewport.isAlwaysDrawnExclusive);\n }),\n );\n };\n}\n\n/** @internal */\nexport function getVisibilityFromAlwaysAndNeverDrawnElementsImpl(\n props: {\n alwaysDrawn: Set<ElementId> | undefined;\n neverDrawn: Set<ElementId> | undefined;\n totalCount: number;\n ignoreTooltip?: boolean;\n viewport: Viewport;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps,\n): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount, ignoreTooltip } = props;\n\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.allElementsInNeverDrawnList, ignoreTooltip));\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\", getTooltipOptions(props.tooltips.allElementsInAlwaysDrawnList, ignoreTooltip));\n }\n\n const viewport = props.viewport;\n if (viewport.isAlwaysDrawnExclusive && viewport.alwaysDrawn?.size) {\n return alwaysDrawn?.size\n ? createVisibilityStatus(\"partial\", getTooltipOptions(props.tooltips.elementsInBothAlwaysAndNeverDrawn, ignoreTooltip))\n : createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip));\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\", getTooltipOptions(undefined, ignoreTooltip));\n }\n return status;\n}\n\n/** @internal */\nexport function getElementOverriddenVisibility(props: {\n elementId: Id64String;\n ignoreTooltip?: boolean;\n viewport: Viewport;\n tooltips: {\n hiddenThroughNeverDrawn?: string;\n hiddenThroughAlwaysDrawnExclusive?: string;\n visibileThorughAlwaysDrawn?: string;\n };\n}): NonPartialVisibilityStatus | undefined {\n const { ignoreTooltip, viewport, elementId, tooltips } = props;\n if (viewport.neverDrawn?.has(elementId)) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(tooltips.hiddenThroughNeverDrawn, ignoreTooltip));\n }\n\n if (viewport.alwaysDrawn?.size) {\n if (viewport.alwaysDrawn.has(elementId)) {\n return createVisibilityStatus(\"visible\", getTooltipOptions(tooltips.visibileThorughAlwaysDrawn, ignoreTooltip));\n }\n\n if (viewport.isAlwaysDrawnExclusive) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(tooltips.hiddenThroughAlwaysDrawnExclusive, ignoreTooltip));\n }\n }\n\n return undefined;\n}\n\n/** @internal */\nexport interface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n tooltips: {\n allElementsInNeverDrawnList: string;\n allElementsInAlwaysDrawnList: string;\n elementsInBothAlwaysAndNeverDrawn: string;\n noElementsInExclusiveAlwaysDrawnList: string;\n };\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: () => VisibilityStatus;\n}\n\n/** @internal */\nexport function getElementVisibility(\n ignoreTooltip: boolean | undefined,\n viewsModel: boolean,\n overridenVisibility: NonPartialVisibilityStatus | undefined,\n categoryVisibility: NonPartialVisibilityStatus,\n treeType: \"modelsTree\" | \"categoriesTree\",\n subModelVisibilityStatus?: VisibilityStatus,\n): VisibilityStatus {\n if (subModelVisibilityStatus === undefined) {\n if (!viewsModel) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(`${treeType}.element.hiddenThroughModel`, ignoreTooltip));\n }\n\n if (overridenVisibility) {\n return overridenVisibility;\n }\n\n return createVisibilityStatus(\n categoryVisibility.state,\n getTooltipOptions(categoryVisibility.state === \"visible\" ? undefined : `${treeType}.element.hiddenThroughCategory`, ignoreTooltip),\n );\n }\n\n if (subModelVisibilityStatus.state === \"partial\") {\n return createVisibilityStatus(\"partial\", getTooltipOptions(`${treeType}.element.someElementsAreHidden`, ignoreTooltip));\n }\n\n if (subModelVisibilityStatus.state === \"visible\") {\n if (!viewsModel || overridenVisibility?.state === \"hidden\" || (categoryVisibility.state === \"hidden\" && !overridenVisibility)) {\n return createVisibilityStatus(\"partial\", getTooltipOptions(`${treeType}.element.partialThroughSubModel`, ignoreTooltip));\n }\n return createVisibilityStatus(\"visible\", getTooltipOptions(undefined, ignoreTooltip));\n }\n\n if (!viewsModel) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(`${treeType}.element.hiddenThroughModel`, ignoreTooltip));\n }\n\n if (overridenVisibility) {\n if (overridenVisibility.state === \"hidden\") {\n return overridenVisibility;\n }\n return createVisibilityStatus(\"partial\", getTooltipOptions(`${treeType}.element.partialThroughElement`, ignoreTooltip));\n }\n\n if (categoryVisibility.state === \"visible\") {\n return createVisibilityStatus(\"partial\", getTooltipOptions(`${treeType}.element.partialThroughCategory`, ignoreTooltip));\n }\n return createVisibilityStatus(\"hidden\", getTooltipOptions(`${treeType}.element.hiddenThroughCategory`, ignoreTooltip));\n}\n\n/**\n * Toggles visibility of categories to show or hide.\n * @internal\n */\nexport async function toggleAllCategories(viewport: Viewport, display: boolean) {\n const categoryIds = await getCategoryIds(viewport);\n if (categoryIds.length === 0) {\n return;\n }\n\n await enableCategoryDisplay(viewport, categoryIds, display);\n}\n\n/**\n * Gets ids of all categories from specified imodel and viewport.\n * @internal\n */\nasync function getCategoryIds(viewport: Viewport): Promise<Id64Array> {\n const categories = await loadCategoriesFromViewport(viewport);\n return categories.map((category) => category.categoryId);\n}\n\n/**\n * Changes category display in the viewport.\n * @internal\n */\nexport async function enableCategoryDisplay(viewport: Viewport, categoryIds: Id64Array, enabled: boolean, enableAllSubCategories = true) {\n viewport.changeCategoryDisplay(categoryIds, enabled, enableAllSubCategories);\n\n // remove category overrides per model\n const modelsContainingOverrides = new Array<ModelId>();\n for (const ovr of viewport.perModelCategoryVisibility) {\n if (categoryIds.findIndex((id) => id === ovr.categoryId) !== -1) {\n modelsContainingOverrides.push(ovr.modelId);\n }\n }\n viewport.perModelCategoryVisibility.setOverride(modelsContainingOverrides, categoryIds, PerModelCategoryVisibility.Override.None);\n\n // changeCategoryDisplay only enables subcategories, it does not disabled them. So we must do that ourselves.\n if (false === enabled) {\n (await viewport.iModel.categories.getCategoryInfo(categoryIds)).forEach((categoryInfo) => {\n categoryInfo.subCategories.forEach((value) => enableSubCategoryDisplay(viewport, value.id, false));\n });\n }\n}\n\n/**\n * Changes subcategory display in the viewport\n * @internal\n */\nexport function enableSubCategoryDisplay(viewport: Viewport, subCategoryId: Id64String, enabled: boolean) {\n viewport.changeSubCategoryDisplay(subCategoryId, enabled);\n}\n\n/** @internal */\nexport async function loadCategoriesFromViewport(vp: Viewport) {\n // Query categories and add them to state\n const { categoryClass, elementClass } = getClassesByView(vp.view.is3d() ? \"3d\" : \"2d\");\n const ecsql = `\n SELECT ECInstanceId as id\n FROM ${categoryClass}\n WHERE\n ECInstanceId IN (\n SELECT DISTINCT Category.Id\n FROM ${elementClass}\n WHERE\n Category.Id IN (SELECT ECInstanceId FROM ${categoryClass})\n ${vp.view.is3d() ? \"\" : \"AND Model.Id=?\"}\n )\n `;\n\n const categories: CategoryInfo[] = [];\n\n const rows = await vp.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames }).toArray();\n (await vp.iModel.categories.getCategoryInfo(rows.map((row) => row.id))).forEach((val) => {\n categories.push({ categoryId: val.id, subCategoryIds: val.subCategories.size ? [...val.subCategories.keys()] : undefined });\n });\n return categories;\n}\n"]}
1
+ {"version":3,"file":"VisibilityUtils.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/VisibilityUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { filter, from, map, mergeAll, mergeMap, of, reduce, startWith, toArray } from \"rxjs\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { reduceWhile } from \"./Rxjs.js\";\nimport { createVisibilityStatus } from \"./Tooltip.js\";\nimport { getClassesByView, releaseMainThreadOnItemsCount } from \"./Utils.js\";\n\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { Observable, OperatorFunction } from \"rxjs\";\nimport type { Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { NonPartialVisibilityStatus, Visibility } from \"./Tooltip.js\";\nimport type { VisibilityStatus } from \"../UseHierarchyVisibility.js\";\nimport type { ElementId, ModelId } from \"./Types.js\";\nimport type { CategoryInfo } from \"../CategoriesVisibilityUtils.js\";\n\nfunction mergeVisibilities(obs: Observable<Visibility>): Observable<Visibility | \"empty\"> {\n return obs.pipe(\n reduceWhile(\n (x) => x.allVisible || x.allHidden,\n (acc, val) => {\n acc.allVisible &&= val === \"visible\";\n acc.allHidden &&= val === \"hidden\";\n return acc;\n },\n { allVisible: true, allHidden: true },\n ),\n map((x) => {\n if (!x) {\n return \"empty\";\n }\n return x.allVisible ? \"visible\" : x.allHidden ? \"hidden\" : \"partial\";\n }),\n );\n}\n\n/** @internal */\nexport function mergeVisibilityStatuses(obs: Observable<VisibilityStatus>): Observable<VisibilityStatus> {\n return obs.pipe(\n map((visibilityStatus) => visibilityStatus.state),\n mergeVisibilities,\n map((visibility) => {\n if (visibility === \"empty\") {\n visibility = \"visible\";\n }\n return createVisibilityStatus(visibility);\n }),\n );\n}\n\n/** @internal */\nexport function getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus,\n getModelVisibilityStatus,\n}: {\n parentNodeVisibilityStatus: VisibilityStatus;\n getModelVisibilityStatus: ({ modelId }: { modelId: Id64String }) => Observable<VisibilityStatus>;\n}): OperatorFunction<Id64Array, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n // combine visibility status of sub-models with visibility status of parent node\n mergeMap((modeledElementIds) => {\n if (modeledElementIds.length === 0) {\n return of(parentNodeVisibilityStatus);\n }\n return from(modeledElementIds).pipe(\n mergeMap((modeledElementId) => getModelVisibilityStatus({ modelId: modeledElementId })),\n startWith<VisibilityStatus>(parentNodeVisibilityStatus),\n mergeVisibilityStatuses,\n );\n }),\n );\n };\n}\n\n/** @internal */\nexport function filterSubModeledElementIds({\n doesSubModelExist,\n}: {\n doesSubModelExist: (elementId: Id64String) => Promise<boolean>;\n}): OperatorFunction<Array<ElementId>, Array<ModelId>> {\n return (obs) => {\n return obs.pipe(\n mergeAll(),\n mergeMap(async (elementId) => ({ elementId, hasSubModel: await doesSubModelExist(elementId) })),\n filter(({ hasSubModel }) => hasSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n );\n };\n}\n\n/** @internal */\nexport function changeElementStateNoChildrenOperator(props: {\n on: boolean;\n isDisplayedByDefault: boolean;\n viewport: Viewport;\n}): OperatorFunction<string, void> {\n return (elementIds: Observable<Id64String>) => {\n const { on, isDisplayedByDefault } = props;\n const isAlwaysDrawnExclusive = props.viewport.isAlwaysDrawnExclusive;\n return elementIds.pipe(\n releaseMainThreadOnItemsCount(500),\n reduce<\n string,\n { changedNeverDrawn: boolean; changedAlwaysDrawn: boolean; neverDrawn: Set<ElementId> | undefined; alwaysDrawn: Set<ElementId> | undefined }\n >(\n (acc, elementId) => {\n if (acc.alwaysDrawn === undefined || acc.neverDrawn === undefined) {\n acc.alwaysDrawn = new Set(props.viewport.alwaysDrawn || []);\n acc.neverDrawn = new Set(props.viewport.neverDrawn || []);\n }\n if (on) {\n const wasRemoved = acc.neverDrawn.delete(elementId);\n acc.changedNeverDrawn ||= wasRemoved;\n // If exclusive mode is enabled, we must add the element to the always drawn list.\n if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {\n acc.alwaysDrawn.add(elementId);\n acc.changedAlwaysDrawn = true;\n }\n } else {\n const wasRemoved = acc.alwaysDrawn.delete(elementId);\n acc.changedAlwaysDrawn ||= wasRemoved;\n // If exclusive mode is not enabled, we have to add the element to the never drawn list.\n if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {\n acc.neverDrawn.add(elementId);\n acc.changedNeverDrawn = true;\n }\n }\n return acc;\n },\n {\n changedNeverDrawn: false,\n changedAlwaysDrawn: false,\n neverDrawn: undefined,\n alwaysDrawn: undefined,\n },\n ),\n map((state) => {\n state.changedNeverDrawn && state.neverDrawn && props.viewport.setNeverDrawn(state.neverDrawn);\n state.changedAlwaysDrawn && state.alwaysDrawn && props.viewport.setAlwaysDrawn(state.alwaysDrawn, props.viewport.isAlwaysDrawnExclusive);\n }),\n );\n };\n}\n\n/** @internal */\nexport function getVisibilityFromAlwaysAndNeverDrawnElementsImpl(\n props: {\n alwaysDrawn: Set<ElementId> | undefined;\n neverDrawn: Set<ElementId> | undefined;\n totalCount: number;\n viewport: Viewport;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps,\n): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount, viewport } = props;\n\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\");\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\");\n }\n\n if (viewport.isAlwaysDrawnExclusive) {\n return createVisibilityStatus(alwaysDrawn?.size ? \"partial\" : \"hidden\")\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\");\n }\n return status;\n}\n\n/** @internal */\nexport function getElementOverriddenVisibility(props: { elementId: Id64String; viewport: Viewport }): NonPartialVisibilityStatus | undefined {\n const { viewport, elementId } = props;\n if (viewport.neverDrawn?.has(elementId)) {\n return createVisibilityStatus(\"hidden\");\n }\n if (viewport.alwaysDrawn?.has(elementId)) {\n return createVisibilityStatus(\"visible\");\n }\n\n if (viewport.isAlwaysDrawnExclusive) {\n return createVisibilityStatus(\"hidden\");\n }\n\n return undefined;\n}\n\n/** @internal */\nexport interface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: () => VisibilityStatus;\n}\n\n/** @internal */\nexport function getElementVisibility(\n viewsModel: boolean,\n overridenVisibility: NonPartialVisibilityStatus | undefined,\n categoryVisibility: NonPartialVisibilityStatus,\n subModelVisibilityStatus?: VisibilityStatus,\n): VisibilityStatus {\n if (subModelVisibilityStatus?.state === \"partial\") {\n return createVisibilityStatus(\"partial\");\n }\n\n if (!viewsModel) {\n return createVisibilityStatus(subModelVisibilityStatus?.state === \"visible\" ? \"partial\" : \"hidden\");\n }\n\n const elementVisibilityWithoutSubModels = overridenVisibility ?? categoryVisibility;\n if (!subModelVisibilityStatus) {\n return elementVisibilityWithoutSubModels;\n }\n\n if (elementVisibilityWithoutSubModels.state === subModelVisibilityStatus.state) {\n return elementVisibilityWithoutSubModels;\n }\n\n return createVisibilityStatus(\"partial\");\n}\n\n/**\n * Toggles visibility of categories to show or hide.\n * @internal\n */\nexport async function toggleAllCategories(viewport: Viewport, display: boolean) {\n const categoryIds = await getCategoryIds(viewport);\n if (categoryIds.length === 0) {\n return;\n }\n\n await enableCategoryDisplay(viewport, categoryIds, display);\n}\n\n/**\n * Gets ids of all categories from specified imodel and viewport.\n * @internal\n */\nasync function getCategoryIds(viewport: Viewport): Promise<Id64Array> {\n const categories = await loadCategoriesFromViewport(viewport);\n return categories.map((category) => category.categoryId);\n}\n\n/**\n * Changes category display in the viewport.\n * @internal\n */\nexport async function enableCategoryDisplay(viewport: Viewport, categoryIds: Id64Array, enabled: boolean, enableAllSubCategories = true) {\n viewport.changeCategoryDisplay(categoryIds, enabled, enableAllSubCategories);\n\n // remove category overrides per model\n const modelsContainingOverrides = new Array<ModelId>();\n for (const ovr of viewport.perModelCategoryVisibility) {\n if (categoryIds.findIndex((id) => id === ovr.categoryId) !== -1) {\n modelsContainingOverrides.push(ovr.modelId);\n }\n }\n viewport.perModelCategoryVisibility.setOverride(modelsContainingOverrides, categoryIds, PerModelCategoryVisibility.Override.None);\n\n // changeCategoryDisplay only enables subcategories, it does not disabled them. So we must do that ourselves.\n if (false === enabled) {\n (await viewport.iModel.categories.getCategoryInfo(categoryIds)).forEach((categoryInfo) => {\n categoryInfo.subCategories.forEach((value) => enableSubCategoryDisplay(viewport, value.id, false));\n });\n }\n}\n\n/**\n * Changes subcategory display in the viewport\n * @internal\n */\nexport function enableSubCategoryDisplay(viewport: Viewport, subCategoryId: Id64String, enabled: boolean) {\n viewport.changeSubCategoryDisplay(subCategoryId, enabled);\n}\n\n/** @internal */\nexport async function loadCategoriesFromViewport(vp: Viewport) {\n // Query categories and add them to state\n const { categoryClass, elementClass } = getClassesByView(vp.view.is3d() ? \"3d\" : \"2d\");\n const ecsql = `\n SELECT ECInstanceId as id\n FROM ${categoryClass}\n WHERE\n ECInstanceId IN (\n SELECT DISTINCT Category.Id\n FROM ${elementClass}\n WHERE\n Category.Id IN (SELECT ECInstanceId FROM ${categoryClass})\n ${vp.view.is3d() ? \"\" : \"AND Model.Id=?\"}\n )\n `;\n\n const categories: CategoryInfo[] = [];\n\n const rows = await vp.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames }).toArray();\n (await vp.iModel.categories.getCategoryInfo(rows.map((row) => row.id))).forEach((val) => {\n categories.push({ categoryId: val.id, subCategoryIds: val.subCategories.size ? [...val.subCategories.keys()] : undefined });\n });\n return categories;\n}\n"]}
@@ -2,13 +2,13 @@ import type { PresentationHierarchyNode } from "@itwin/presentation-hierarchies-
2
2
  import type { BaseTreeRendererProps } from "../common/components/BaseTreeRenderer.js";
3
3
  import type { TreeProps } from "../common/components/Tree.js";
4
4
  /** @beta */
5
- export type ExternalSourcesTreeProps = Pick<TreeProps, "imodel" | "getSchemaContext" | "selectionStorage" | "selectionMode" | "emptyTreeContent"> & Pick<BaseTreeRendererProps, "actions" | "getDecorations"> & {
5
+ export type ExternalSourcesTreeProps = Pick<TreeProps, "imodel" | "getSchemaContext" | "selectionStorage" | "selectionMode" | "emptyTreeContent"> & Pick<BaseTreeRendererProps, "getActions" | "getDecorations"> & {
6
6
  hierarchyLevelConfig?: {
7
7
  sizeLimit?: number;
8
8
  };
9
9
  };
10
10
  /** @beta */
11
- export declare function ExternalSourcesTree({ actions, getDecorations, selectionMode, ...rest }: ExternalSourcesTreeProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function ExternalSourcesTree({ getActions, getDecorations, selectionMode, ...rest }: ExternalSourcesTreeProps): import("react/jsx-runtime").JSX.Element;
12
12
  /** @beta */
13
13
  export declare function ExternalSourcesTreeIcon({ node }: {
14
14
  node: PresentationHierarchyNode;