@itwin/tree-widget-react 4.0.0-alpha.14 → 4.0.0-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +116 -1
- package/README.md +88 -11
- package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.d.ts +4 -4
- package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +5 -5
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +4 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +8 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +4 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +26 -20
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +4 -4
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +28 -17
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +8 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +27 -15
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +4 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.d.ts +51 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js +283 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.d.ts +62 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js +84 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/FilteredTree.d.ts +33 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/FilteredTree.js +218 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/FilteredTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +9 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.d.ts +3 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +4 -4
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +21 -8
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +12 -8
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +41 -21
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.d.ts +37 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js +170 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.d.ts +55 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js +53 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.d.ts +27 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.js +165 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.d.ts +8 -4
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +22 -19
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.d.ts +186 -0
- package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js +79 -0
- package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.d.ts +11 -3
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +24 -19
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +12 -6
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js +56 -13
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.d.ts +6 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js +4 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +2 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +4 -4
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +34 -8
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +26 -5
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +7 -8
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +10 -9
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.d.ts +6 -12
- package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js +53 -61
- package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js +54 -34
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveTreeWidgetViewport.d.ts +6 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveTreeWidgetViewport.js +24 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveTreeWidgetViewport.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +7 -17
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +26 -16
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.d.ts +3 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.js +10 -6
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +10 -29
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +28 -64
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.d.ts +53 -15
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js +142 -4
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.d.ts +87 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.js +107 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.d.ts +235 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js +584 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +4 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/index.d.ts +4 -1
- package/lib/esm/tree-widget-react/components/trees/index.js +4 -0
- package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +3 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.d.ts +3 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +12 -9
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +8 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +9 -9
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +37 -33
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.d.ts +28 -9
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +31 -16
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +9 -7
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +51 -51
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +14 -4
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +112 -36
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/FilteredTree.d.ts +24 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/FilteredTree.js +148 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/FilteredTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.d.ts +76 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js +263 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.d.ts +53 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js +71 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js.map +1 -0
- package/lib/esm/tree-widget-react-internal.d.ts +2 -2
- package/lib/esm/tree-widget-react-internal.js +2 -2
- package/lib/esm/tree-widget-react-internal.js.map +1 -1
- package/lib/public/locales/en/TreeWidget.json +3 -0
- package/package.json +19 -18
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.d.ts +0 -23
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js +0 -713
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.d.ts +0 -39
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.js +0 -221
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.d.ts +0 -21
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.js +0 -551
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.d.ts +0 -37
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.js +0 -193
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.d.ts +0 -20
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js +0 -125
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveViewport.d.ts +0 -7
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveViewport.js +0 -21
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveViewport.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.d.ts +0 -23
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js +0 -171
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +0 -80
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +0 -507
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseActiveTreeWidgetViewport.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/UseActiveTreeWidgetViewport.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAKpE,gBAAgB;AAChB,MAAM,UAAU,2BAA2B,CAAC,EAAE,kBAAkB,EAA+C;IAC7G,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,kBAAkB,IAAI,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,kBAAkB,EAAE,CAAC;YACvB,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,iBAAiB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,gCAAgC,CAAC,QAA8B;IACtE,OAAO,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,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 { useEffect, useState } from \"react\";\nimport { useActiveViewport } from \"@itwin/appui-react\";\nimport { createTreeWidgetViewport } from \"../TreeWidgetViewport.js\";\n\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { TreeWidgetViewport } from \"../TreeWidgetViewport.js\";\n\n/** @internal */\nexport function useActiveTreeWidgetViewport({ treeWidgetViewport }: { treeWidgetViewport?: TreeWidgetViewport }): TreeWidgetViewport | undefined {\n const viewport = useActiveViewport();\n const [activeViewport, setActiveViewport] = useState(treeWidgetViewport ?? createTreeWidgetViewportInternal(viewport));\n useEffect(() => {\n if (treeWidgetViewport) {\n setActiveViewport(treeWidgetViewport);\n return;\n }\n setActiveViewport(createTreeWidgetViewportInternal(viewport));\n }, [treeWidgetViewport, viewport]);\n\n return activeViewport;\n}\n\nfunction createTreeWidgetViewportInternal(viewport: Viewport | undefined): TreeWidgetViewport | undefined {\n return viewport ? createTreeWidgetViewport(viewport) : undefined;\n}\n"]}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import type { Observable } from "rxjs";
|
|
2
|
-
import type { Id64Array } from "@itwin/core-bentley";
|
|
3
|
-
import type { IModelConnection } from "@itwin/core-frontend";
|
|
4
|
-
import type { SchemaContext } from "@itwin/ecschema-metadata";
|
|
2
|
+
import type { Id64Arg, Id64Array, Id64String } from "@itwin/core-bentley";
|
|
5
3
|
/** @internal */
|
|
6
|
-
export declare function setDifference<T>(lhs:
|
|
4
|
+
export declare function setDifference<T>(lhs: Readonly<Iterable<T>>, rhs: ReadonlySet<T>): Set<T>;
|
|
7
5
|
/** @internal */
|
|
8
|
-
export declare function setIntersection<T>(lhs:
|
|
6
|
+
export declare function setIntersection<T>(lhs: Readonly<Iterable<T>>, rhs: ReadonlySet<T>): Set<T>;
|
|
9
7
|
/** @internal */
|
|
10
8
|
export declare function getDistinctMapValues(map: Map<any, Array<string> | Set<string>>): Set<string>;
|
|
11
9
|
/** @internal */
|
|
@@ -15,18 +13,6 @@ export declare function parseIdsSelectorResult(selectorResult: any): Id64Array;
|
|
|
15
13
|
/** @internal */
|
|
16
14
|
export declare function pushToMap<TKey, TValue>(targetMap: Map<TKey, Set<TValue>>, key: TKey, value: TValue): void;
|
|
17
15
|
/** @internal */
|
|
18
|
-
export declare function createIModelAccess({ imodel, getSchemaContext }: {
|
|
19
|
-
imodel: IModelConnection;
|
|
20
|
-
getSchemaContext: (imodel: IModelConnection) => SchemaContext;
|
|
21
|
-
}): {
|
|
22
|
-
createQueryReader(query: import("@itwin/presentation-shared").ECSqlQueryDef, config?: import("@itwin/presentation-shared").ECSqlQueryReaderOptions & {
|
|
23
|
-
limit?: number | "unbounded";
|
|
24
|
-
}): ReturnType<import("@itwin/presentation-shared").ECSqlQueryExecutor["createQueryReader"]>;
|
|
25
|
-
classDerivesFrom(derivedClassFullName: string, candidateBaseClassFullName: string): Promise<boolean> | boolean;
|
|
26
|
-
getSchema(schemaName: string): Promise<import("@itwin/presentation-shared").EC.Schema | undefined>;
|
|
27
|
-
imodelKey: string;
|
|
28
|
-
};
|
|
29
|
-
/** @internal */
|
|
30
16
|
export declare function useLatest<T>(value: T): import("react").MutableRefObject<T>;
|
|
31
17
|
/**
|
|
32
18
|
* Checks if all given models are displayed in given viewport.
|
|
@@ -43,4 +29,8 @@ export declare function getClassesByView(viewType: "2d" | "3d"): {
|
|
|
43
29
|
readonly elementClass: "BisCore.GeometricElement3d";
|
|
44
30
|
readonly modelClass: "BisCore.GeometricModel3d";
|
|
45
31
|
};
|
|
32
|
+
/** @internal */
|
|
33
|
+
export declare function joinId64Arg(arg: Id64Arg, separator: string): string;
|
|
34
|
+
/** @internal */
|
|
35
|
+
export declare function getSetFromId64Arg(arg: Id64Arg): Set<Id64String>;
|
|
46
36
|
//# sourceMappingURL=Utils.d.ts.map
|
|
@@ -4,20 +4,26 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { useEffect, useRef } from "react";
|
|
6
6
|
import { bufferCount, concatAll, concatMap, delay, of } from "rxjs";
|
|
7
|
-
import {
|
|
8
|
-
import { createLimitingECSqlQueryExecutor } from "@itwin/presentation-hierarchies";
|
|
9
|
-
import { createCachingECClassHierarchyInspector } from "@itwin/presentation-shared";
|
|
7
|
+
import { Id64 } from "@itwin/core-bentley";
|
|
10
8
|
import { CLASS_NAME_DrawingCategory, CLASS_NAME_GeometricElement2d, CLASS_NAME_GeometricElement3d, CLASS_NAME_GeometricModel2d, CLASS_NAME_GeometricModel3d, CLASS_NAME_SpatialCategory, } from "./ClassNameDefinitions.js";
|
|
11
9
|
/** @internal */
|
|
12
10
|
export function setDifference(lhs, rhs) {
|
|
13
11
|
const result = new Set();
|
|
14
|
-
|
|
12
|
+
for (const x of lhs) {
|
|
13
|
+
if (!rhs.has(x)) {
|
|
14
|
+
result.add(x);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
15
17
|
return result;
|
|
16
18
|
}
|
|
17
19
|
/** @internal */
|
|
18
20
|
export function setIntersection(lhs, rhs) {
|
|
19
21
|
const result = new Set();
|
|
20
|
-
|
|
22
|
+
for (const x of lhs) {
|
|
23
|
+
if (rhs.has(x)) {
|
|
24
|
+
result.add(x);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
21
27
|
return result;
|
|
22
28
|
}
|
|
23
29
|
/** @internal */
|
|
@@ -59,17 +65,6 @@ export function pushToMap(targetMap, key, value) {
|
|
|
59
65
|
set.add(value);
|
|
60
66
|
}
|
|
61
67
|
/** @internal */
|
|
62
|
-
export function createIModelAccess({ imodel, getSchemaContext }) {
|
|
63
|
-
const schemas = getSchemaContext(imodel);
|
|
64
|
-
const schemaProvider = createECSchemaProvider(schemas);
|
|
65
|
-
return {
|
|
66
|
-
imodelKey: imodel.key,
|
|
67
|
-
...schemaProvider,
|
|
68
|
-
...createCachingECClassHierarchyInspector({ schemaProvider, cacheSize: 100 }),
|
|
69
|
-
...createLimitingECSqlQueryExecutor(createECSqlQueryExecutor(imodel), 1000),
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
/** @internal */
|
|
73
68
|
export function useLatest(value) {
|
|
74
69
|
const ref = useRef(value);
|
|
75
70
|
useEffect(() => {
|
|
@@ -98,4 +93,19 @@ export function getClassesByView(viewType) {
|
|
|
98
93
|
? { categoryClass: CLASS_NAME_DrawingCategory, elementClass: CLASS_NAME_GeometricElement2d, modelClass: CLASS_NAME_GeometricModel2d }
|
|
99
94
|
: { categoryClass: CLASS_NAME_SpatialCategory, elementClass: CLASS_NAME_GeometricElement3d, modelClass: CLASS_NAME_GeometricModel3d };
|
|
100
95
|
}
|
|
96
|
+
/** @internal */
|
|
97
|
+
export function joinId64Arg(arg, separator) {
|
|
98
|
+
let joined = "";
|
|
99
|
+
for (const argItem of Id64.iterable(arg)) {
|
|
100
|
+
if (joined !== "") {
|
|
101
|
+
joined += separator;
|
|
102
|
+
}
|
|
103
|
+
joined += argItem;
|
|
104
|
+
}
|
|
105
|
+
return joined;
|
|
106
|
+
}
|
|
107
|
+
/** @internal */
|
|
108
|
+
export function getSetFromId64Arg(arg) {
|
|
109
|
+
return typeof arg === "string" ? new Set([arg]) : Array.isArray(arg) ? new Set(arg) : arg;
|
|
110
|
+
}
|
|
101
111
|
//# sourceMappingURL=Utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/Utils.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/Utils.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 { useEffect, useRef } from \"react\";\nimport { bufferCount, concatAll, concatMap, delay, of } from \"rxjs\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport {\n CLASS_NAME_DrawingCategory,\n CLASS_NAME_GeometricElement2d,\n CLASS_NAME_GeometricElement3d,\n CLASS_NAME_GeometricModel2d,\n CLASS_NAME_GeometricModel3d,\n CLASS_NAME_SpatialCategory,\n} from \"./ClassNameDefinitions.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\n\n/** @internal */\nexport function setDifference<T>(lhs: Readonly<Iterable<T>>, rhs: ReadonlySet<T>): Set<T> {\n const result = new Set<T>();\n for (const x of lhs) {\n if (!rhs.has(x)) {\n result.add(x);\n }\n }\n return result;\n}\n\n/** @internal */\nexport function setIntersection<T>(lhs: Readonly<Iterable<T>>, rhs: ReadonlySet<T>): Set<T> {\n const result = new Set<T>();\n for (const x of lhs) {\n if (rhs.has(x)) {\n result.add(x);\n }\n }\n return result;\n}\n/** @internal */\nexport function getDistinctMapValues(map: Map<any, Array<string> | Set<string>>): Set<string> {\n const result = new Set<string>();\n for (const values of map.values()) {\n values.forEach((value) => result.add(value));\n }\n return result;\n}\n\n/** @internal */\nexport function createIdsSelector(ids: Id64Array): string {\n // Note: `json_array` function only accepts up to 127 arguments and we may have more `ids` than that. As a workaround,\n // we're creating an array of arrays\n const slices = new Array<Id64String[]>();\n for (let sliceStartIndex = 0; sliceStartIndex < ids.length; sliceStartIndex += 127) {\n let sliceEndIndex: number | undefined = sliceStartIndex + 127;\n if (sliceEndIndex > ids.length) {\n sliceEndIndex = undefined;\n }\n slices.push(ids.slice(sliceStartIndex, sliceEndIndex));\n }\n return `json_array(${slices.map((sliceIds) => `json_array(${sliceIds.map((id) => `'${id}'`).join(\",\")})`).join(\",\")})`;\n}\n\n/** @internal */\nexport function parseIdsSelectorResult(selectorResult: any): Id64Array {\n if (!Array.isArray(selectorResult)) {\n return [];\n }\n return selectorResult.reduce((arr, ids: Id64String | Id64String[]) => [...arr, ...(Array.isArray(ids) ? ids : [ids])], new Array<Id64String>());\n}\n\n/** @internal */\nexport function pushToMap<TKey, TValue>(targetMap: Map<TKey, Set<TValue>>, key: TKey, value: TValue) {\n let set = targetMap.get(key);\n if (!set) {\n set = new Set();\n targetMap.set(key, set);\n }\n set.add(value);\n}\n\n/** @internal */\nexport function useLatest<T>(value: T) {\n const ref = useRef(value);\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref;\n}\n\n/**\n * Checks if all given models are displayed in given viewport.\n * @internal\n */\nexport function releaseMainThreadOnItemsCount<T>(elementCount: number) {\n return (obs: Observable<T>): Observable<T> => {\n return obs.pipe(\n bufferCount(elementCount),\n concatMap((buff, i) => {\n const out = of(buff);\n if (i === 0 && buff.length < elementCount) {\n return out;\n }\n return out.pipe(delay(0));\n }),\n concatAll(),\n );\n };\n}\n\n/** @internal */\nexport function getClassesByView(viewType: \"2d\" | \"3d\") {\n return viewType === \"2d\"\n ? ({ categoryClass: CLASS_NAME_DrawingCategory, elementClass: CLASS_NAME_GeometricElement2d, modelClass: CLASS_NAME_GeometricModel2d } as const)\n : ({ categoryClass: CLASS_NAME_SpatialCategory, elementClass: CLASS_NAME_GeometricElement3d, modelClass: CLASS_NAME_GeometricModel3d } as const);\n}\n\n/** @internal */\nexport function joinId64Arg(arg: Id64Arg, separator: string): string {\n let joined = \"\";\n for (const argItem of Id64.iterable(arg)) {\n if (joined !== \"\") {\n joined += separator;\n }\n\n joined += argItem;\n }\n return joined;\n}\n\n/** @internal */\nexport function getSetFromId64Arg(arg: Id64Arg): Set<Id64String> {\n return typeof arg === \"string\" ? new Set([arg]) : Array.isArray(arg) ? new Set(arg) : arg;\n}\n"]}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { BeEvent } from "@itwin/core-bentley";
|
|
2
|
-
import type {
|
|
2
|
+
import type { TreeWidgetViewport } from "../TreeWidgetViewport.js";
|
|
3
3
|
/** @internal */
|
|
4
4
|
export interface IVisibilityChangeEventListener extends Disposable {
|
|
5
5
|
onVisibilityChange: BeEvent<() => void>;
|
|
6
6
|
suppressChangeEvents(): void;
|
|
7
7
|
resumeChangeEvents(): void;
|
|
8
|
+
isVisibilityChangePending: () => boolean;
|
|
8
9
|
}
|
|
9
10
|
/** @internal */
|
|
10
11
|
export declare function createVisibilityChangeEventListener(props: {
|
|
11
|
-
viewport:
|
|
12
|
+
viewport: TreeWidgetViewport;
|
|
12
13
|
listeners: {
|
|
13
14
|
elements?: boolean;
|
|
14
15
|
categories?: boolean;
|
package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.js
CHANGED
|
@@ -8,7 +8,9 @@ export function createVisibilityChangeEventListener(props) {
|
|
|
8
8
|
const onVisibilityChange = new BeEvent();
|
|
9
9
|
let pendingVisibilityChange;
|
|
10
10
|
let suppressChangeEvents = 0;
|
|
11
|
+
let hasFiredDuringSuppress = true;
|
|
11
12
|
const handleVisibilityChange = () => {
|
|
13
|
+
hasFiredDuringSuppress = true;
|
|
12
14
|
if (pendingVisibilityChange || suppressChangeEvents > 0) {
|
|
13
15
|
return;
|
|
14
16
|
}
|
|
@@ -23,14 +25,14 @@ export function createVisibilityChangeEventListener(props) {
|
|
|
23
25
|
listeners.push(props.viewport.onNeverDrawnChanged.addListener(handleVisibilityChange));
|
|
24
26
|
}
|
|
25
27
|
if (props.listeners.categories) {
|
|
26
|
-
listeners.push(props.viewport.
|
|
27
|
-
listeners.push(props.viewport.
|
|
28
|
+
listeners.push(props.viewport.onPerModelCategoriesOverridesChanged.addListener(handleVisibilityChange));
|
|
29
|
+
listeners.push(props.viewport.onDisplayedCategoriesChanged.addListener(handleVisibilityChange));
|
|
28
30
|
}
|
|
29
31
|
if (props.listeners.displayStyle) {
|
|
30
32
|
listeners.push(props.viewport.onDisplayStyleChanged.addListener(handleVisibilityChange));
|
|
31
33
|
}
|
|
32
34
|
if (props.listeners.models) {
|
|
33
|
-
listeners.push(props.viewport.
|
|
35
|
+
listeners.push(props.viewport.onDisplayedModelsChanged.addListener(handleVisibilityChange));
|
|
34
36
|
}
|
|
35
37
|
return {
|
|
36
38
|
onVisibilityChange,
|
|
@@ -43,11 +45,13 @@ export function createVisibilityChangeEventListener(props) {
|
|
|
43
45
|
listeners.length = 0;
|
|
44
46
|
},
|
|
45
47
|
suppressChangeEvents: () => {
|
|
46
|
-
|
|
48
|
+
hasFiredDuringSuppress = false;
|
|
49
|
+
++suppressChangeEvents;
|
|
47
50
|
},
|
|
51
|
+
isVisibilityChangePending: () => pendingVisibilityChange !== undefined,
|
|
48
52
|
resumeChangeEvents: () => {
|
|
49
|
-
suppressChangeEvents
|
|
50
|
-
if (suppressChangeEvents === 0) {
|
|
53
|
+
--suppressChangeEvents;
|
|
54
|
+
if (suppressChangeEvents === 0 && hasFiredDuringSuppress) {
|
|
51
55
|
handleVisibilityChange();
|
|
52
56
|
}
|
|
53
57
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisibilityChangeEventListener.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"VisibilityChangeEventListener.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAY9C,gBAAgB;AAChB,MAAM,UAAU,mCAAmC,CAAC,KAQnD;IACC,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAc,CAAC;IACrD,IAAI,uBAAkE,CAAC;IACvE,IAAI,oBAAoB,GAAW,CAAC,CAAC;IACrC,IAAI,sBAAsB,GAAG,IAAI,CAAC;IAClC,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,sBAAsB,GAAG,IAAI,CAAC;QAC9B,IAAI,uBAAuB,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO;QACT,CAAC;QACD,uBAAuB,GAAG,UAAU,CAAC,GAAG,EAAE;YACxC,kBAAkB,CAAC,UAAU,EAAE,CAAC;YAChC,uBAAuB,GAAG,SAAS,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,KAAK,EAAc,CAAC;IAE1C,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC7B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxF,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,oCAAoC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,4BAA4B,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAC3B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO;QACL,kBAAkB;QAClB,CAAC,MAAM,CAAC,OAAO,CAAC;YACd,IAAI,uBAAuB,EAAE,CAAC;gBAC5B,YAAY,CAAC,uBAAuB,CAAC,CAAC;gBACtC,uBAAuB,GAAG,SAAS,CAAC;YACtC,CAAC;YACD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,oBAAoB,EAAE,GAAG,EAAE;YACzB,sBAAsB,GAAG,KAAK,CAAC;YAC/B,EAAE,oBAAoB,CAAC;QACzB,CAAC;QACD,yBAAyB,EAAE,GAAG,EAAE,CAAC,uBAAuB,KAAK,SAAS;QACtE,kBAAkB,EAAE,GAAG,EAAE;YACvB,EAAE,oBAAoB,CAAC;YACvB,IAAI,oBAAoB,KAAK,CAAC,IAAI,sBAAsB,EAAE,CAAC;gBACzD,sBAAsB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;KACF,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 { BeEvent } from \"@itwin/core-bentley\";\n\nimport type { TreeWidgetViewport } from \"../TreeWidgetViewport.js\";\n\n/** @internal */\nexport interface IVisibilityChangeEventListener extends Disposable {\n onVisibilityChange: BeEvent<() => void>;\n suppressChangeEvents(): void;\n resumeChangeEvents(): void;\n isVisibilityChangePending: () => boolean;\n}\n\n/** @internal */\nexport function createVisibilityChangeEventListener(props: {\n viewport: TreeWidgetViewport;\n listeners: {\n elements?: boolean;\n categories?: boolean;\n displayStyle?: boolean;\n models?: boolean;\n };\n}): IVisibilityChangeEventListener {\n const onVisibilityChange = new BeEvent<() => void>();\n let pendingVisibilityChange: undefined | ReturnType<typeof setTimeout>;\n let suppressChangeEvents: number = 0;\n let hasFiredDuringSuppress = true;\n const handleVisibilityChange = () => {\n hasFiredDuringSuppress = true;\n if (pendingVisibilityChange || suppressChangeEvents > 0) {\n return;\n }\n pendingVisibilityChange = setTimeout(() => {\n onVisibilityChange.raiseEvent();\n pendingVisibilityChange = undefined;\n });\n };\n\n const listeners = new Array<() => void>();\n\n if (props.listeners.elements) {\n listeners.push(props.viewport.onAlwaysDrawnChanged.addListener(handleVisibilityChange));\n listeners.push(props.viewport.onNeverDrawnChanged.addListener(handleVisibilityChange));\n }\n if (props.listeners.categories) {\n listeners.push(props.viewport.onPerModelCategoriesOverridesChanged.addListener(handleVisibilityChange));\n listeners.push(props.viewport.onDisplayedCategoriesChanged.addListener(handleVisibilityChange));\n }\n if (props.listeners.displayStyle) {\n listeners.push(props.viewport.onDisplayStyleChanged.addListener(handleVisibilityChange));\n }\n if (props.listeners.models) {\n listeners.push(props.viewport.onDisplayedModelsChanged.addListener(handleVisibilityChange));\n }\n\n return {\n onVisibilityChange,\n [Symbol.dispose]() {\n if (pendingVisibilityChange) {\n clearTimeout(pendingVisibilityChange);\n pendingVisibilityChange = undefined;\n }\n listeners.forEach((x) => x());\n listeners.length = 0;\n },\n suppressChangeEvents: () => {\n hasFiredDuringSuppress = false;\n ++suppressChangeEvents;\n },\n isVisibilityChangePending: () => pendingVisibilityChange !== undefined,\n resumeChangeEvents: () => {\n --suppressChangeEvents;\n if (suppressChangeEvents === 0 && hasFiredDuringSuppress) {\n handleVisibilityChange();\n }\n },\n };\n}\n"]}
|
|
@@ -1,63 +1,44 @@
|
|
|
1
|
-
import type { Viewport } from "@itwin/core-frontend";
|
|
2
1
|
import type { Observable, OperatorFunction } from "rxjs";
|
|
3
|
-
import type {
|
|
4
|
-
import type { NonPartialVisibilityStatus } from "./Tooltip.js";
|
|
5
|
-
import type { VisibilityStatus } from "../UseHierarchyVisibility.js";
|
|
6
|
-
import type { ElementId, ModelId } from "./Types.js";
|
|
2
|
+
import type { Id64Arg, Id64String } from "@itwin/core-bentley";
|
|
7
3
|
import type { CategoryInfo } from "../CategoriesVisibilityUtils.js";
|
|
4
|
+
import type { TreeWidgetViewport } from "../TreeWidgetViewport.js";
|
|
5
|
+
import type { VisibilityStatus } from "../UseHierarchyVisibility.js";
|
|
6
|
+
import type { ElementId } from "./Types.js";
|
|
8
7
|
/** @internal */
|
|
9
8
|
export declare function mergeVisibilityStatuses(obs: Observable<VisibilityStatus>): Observable<VisibilityStatus>;
|
|
10
9
|
/** @internal */
|
|
11
|
-
export declare function getSubModeledElementsVisibilityStatus({ parentNodeVisibilityStatus, getModelVisibilityStatus, }: {
|
|
12
|
-
parentNodeVisibilityStatus: VisibilityStatus;
|
|
13
|
-
getModelVisibilityStatus: ({ modelIds }: {
|
|
14
|
-
modelIds: Id64Array;
|
|
15
|
-
}) => Observable<VisibilityStatus>;
|
|
16
|
-
}): OperatorFunction<Id64Array, VisibilityStatus>;
|
|
17
|
-
/** @internal */
|
|
18
|
-
export declare function filterSubModeledElementIds({ doesSubModelExist, }: {
|
|
19
|
-
doesSubModelExist: (elementId: Id64String) => Promise<boolean>;
|
|
20
|
-
}): OperatorFunction<Array<ElementId>, Array<ModelId>>;
|
|
21
|
-
/** @internal */
|
|
22
10
|
export declare function changeElementStateNoChildrenOperator(props: {
|
|
23
11
|
on: boolean;
|
|
24
12
|
isDisplayedByDefault: boolean;
|
|
25
|
-
viewport:
|
|
13
|
+
viewport: TreeWidgetViewport;
|
|
26
14
|
}): OperatorFunction<string, void>;
|
|
27
15
|
/** @internal */
|
|
28
16
|
export declare function getVisibilityFromAlwaysAndNeverDrawnElementsImpl(props: {
|
|
29
17
|
alwaysDrawn: Set<ElementId> | undefined;
|
|
30
18
|
neverDrawn: Set<ElementId> | undefined;
|
|
31
19
|
totalCount: number;
|
|
32
|
-
viewport:
|
|
20
|
+
viewport: TreeWidgetViewport;
|
|
33
21
|
} & GetVisibilityFromAlwaysAndNeverDrawnElementsProps): VisibilityStatus;
|
|
34
22
|
/** @internal */
|
|
35
|
-
export declare function getElementOverriddenVisibility(props: {
|
|
36
|
-
elementId: Id64String;
|
|
37
|
-
viewport: Viewport;
|
|
38
|
-
}): NonPartialVisibilityStatus | undefined;
|
|
39
|
-
/** @internal */
|
|
40
23
|
export interface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {
|
|
41
24
|
/** Status when always/never lists are empty and exclusive mode is off */
|
|
42
25
|
defaultStatus: (categoryId?: string) => VisibilityStatus;
|
|
43
26
|
}
|
|
44
|
-
/** @internal */
|
|
45
|
-
export declare function getElementVisibility(viewsModel: boolean, overridenVisibility: NonPartialVisibilityStatus | undefined, categoryVisibility: NonPartialVisibilityStatus, subModelVisibilityStatus?: VisibilityStatus): VisibilityStatus;
|
|
46
27
|
/**
|
|
47
28
|
* Toggles visibility of categories to show or hide.
|
|
48
29
|
* @internal
|
|
49
30
|
*/
|
|
50
|
-
export declare function toggleAllCategories(viewport:
|
|
31
|
+
export declare function toggleAllCategories(viewport: TreeWidgetViewport, display: boolean): Promise<void>;
|
|
51
32
|
/**
|
|
52
33
|
* Changes category display in the viewport.
|
|
53
34
|
* @internal
|
|
54
35
|
*/
|
|
55
|
-
export declare function enableCategoryDisplay(viewport:
|
|
36
|
+
export declare function enableCategoryDisplay(viewport: TreeWidgetViewport, categoryIds: Id64Arg, enabled: boolean, enableAllSubCategories?: boolean): Promise<void>;
|
|
56
37
|
/**
|
|
57
38
|
* Changes subcategory display in the viewport
|
|
58
39
|
* @internal
|
|
59
40
|
*/
|
|
60
|
-
export declare function enableSubCategoryDisplay(viewport:
|
|
41
|
+
export declare function enableSubCategoryDisplay(viewport: TreeWidgetViewport, subCategoryId: Id64String, enabled: boolean): void;
|
|
61
42
|
/** @internal */
|
|
62
|
-
export declare function loadCategoriesFromViewport(vp:
|
|
43
|
+
export declare function loadCategoriesFromViewport(vp: TreeWidgetViewport): Promise<CategoryInfo[]>;
|
|
63
44
|
//# sourceMappingURL=VisibilityUtils.d.ts.map
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import {
|
|
5
|
+
import { map, reduce } from "rxjs";
|
|
6
|
+
import { Id64 } from "@itwin/core-bentley";
|
|
6
7
|
import { QueryRowFormat } from "@itwin/core-common";
|
|
7
|
-
import { PerModelCategoryVisibility } from "@itwin/core-frontend";
|
|
8
8
|
import { reduceWhile } from "./Rxjs.js";
|
|
9
9
|
import { createVisibilityStatus } from "./Tooltip.js";
|
|
10
10
|
import { getClassesByView, releaseMainThreadOnItemsCount } from "./Utils.js";
|
|
@@ -25,25 +25,6 @@ export function mergeVisibilityStatuses(obs) {
|
|
|
25
25
|
return obs.pipe(map((visibilityStatus) => visibilityStatus.state), mergeVisibilities, map((visibility) => createVisibilityStatus(visibility === "empty" ? "disabled" : visibility)));
|
|
26
26
|
}
|
|
27
27
|
/** @internal */
|
|
28
|
-
export function getSubModeledElementsVisibilityStatus({ parentNodeVisibilityStatus, getModelVisibilityStatus, }) {
|
|
29
|
-
return (obs) => {
|
|
30
|
-
return obs.pipe(
|
|
31
|
-
// combine visibility status of sub-models with visibility status of parent node
|
|
32
|
-
mergeMap((modeledElementIds) => {
|
|
33
|
-
if (modeledElementIds.length === 0) {
|
|
34
|
-
return of(parentNodeVisibilityStatus);
|
|
35
|
-
}
|
|
36
|
-
return getModelVisibilityStatus({ modelIds: modeledElementIds }).pipe(startWith(parentNodeVisibilityStatus), mergeVisibilityStatuses);
|
|
37
|
-
}));
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
/** @internal */
|
|
41
|
-
export function filterSubModeledElementIds({ doesSubModelExist, }) {
|
|
42
|
-
return (obs) => {
|
|
43
|
-
return obs.pipe(mergeAll(), mergeMap(async (elementId) => ({ elementId, hasSubModel: await doesSubModelExist(elementId) })), filter(({ hasSubModel }) => hasSubModel), map(({ elementId }) => elementId), toArray());
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
/** @internal */
|
|
47
28
|
export function changeElementStateNoChildrenOperator(props) {
|
|
48
29
|
return (elementIds) => {
|
|
49
30
|
const { on, isDisplayedByDefault } = props;
|
|
@@ -78,14 +59,19 @@ export function changeElementStateNoChildrenOperator(props) {
|
|
|
78
59
|
neverDrawn: undefined,
|
|
79
60
|
alwaysDrawn: undefined,
|
|
80
61
|
}), map((state) => {
|
|
81
|
-
state.changedNeverDrawn && state.neverDrawn && props.viewport.setNeverDrawn(state.neverDrawn);
|
|
82
|
-
state.changedAlwaysDrawn &&
|
|
62
|
+
state.changedNeverDrawn && state.neverDrawn && props.viewport.setNeverDrawn({ elementIds: state.neverDrawn });
|
|
63
|
+
state.changedAlwaysDrawn &&
|
|
64
|
+
state.alwaysDrawn &&
|
|
65
|
+
props.viewport.setAlwaysDrawn({ elementIds: state.alwaysDrawn, exclusive: props.viewport.isAlwaysDrawnExclusive });
|
|
83
66
|
}));
|
|
84
67
|
};
|
|
85
68
|
}
|
|
86
69
|
/** @internal */
|
|
87
70
|
export function getVisibilityFromAlwaysAndNeverDrawnElementsImpl(props) {
|
|
88
71
|
const { alwaysDrawn, neverDrawn, totalCount, viewport } = props;
|
|
72
|
+
if (totalCount === 0) {
|
|
73
|
+
return props.defaultStatus();
|
|
74
|
+
}
|
|
89
75
|
if (neverDrawn?.size === totalCount) {
|
|
90
76
|
return createVisibilityStatus("hidden");
|
|
91
77
|
}
|
|
@@ -101,37 +87,6 @@ export function getVisibilityFromAlwaysAndNeverDrawnElementsImpl(props) {
|
|
|
101
87
|
}
|
|
102
88
|
return status;
|
|
103
89
|
}
|
|
104
|
-
/** @internal */
|
|
105
|
-
export function getElementOverriddenVisibility(props) {
|
|
106
|
-
const { viewport, elementId } = props;
|
|
107
|
-
if (viewport.neverDrawn?.has(elementId)) {
|
|
108
|
-
return createVisibilityStatus("hidden");
|
|
109
|
-
}
|
|
110
|
-
if (viewport.alwaysDrawn?.has(elementId)) {
|
|
111
|
-
return createVisibilityStatus("visible");
|
|
112
|
-
}
|
|
113
|
-
if (viewport.isAlwaysDrawnExclusive) {
|
|
114
|
-
return createVisibilityStatus("hidden");
|
|
115
|
-
}
|
|
116
|
-
return undefined;
|
|
117
|
-
}
|
|
118
|
-
/** @internal */
|
|
119
|
-
export function getElementVisibility(viewsModel, overridenVisibility, categoryVisibility, subModelVisibilityStatus) {
|
|
120
|
-
if (subModelVisibilityStatus?.state === "partial") {
|
|
121
|
-
return createVisibilityStatus("partial");
|
|
122
|
-
}
|
|
123
|
-
if (!viewsModel) {
|
|
124
|
-
return createVisibilityStatus(subModelVisibilityStatus?.state === "visible" ? "partial" : "hidden");
|
|
125
|
-
}
|
|
126
|
-
const elementVisibilityWithoutSubModels = overridenVisibility ?? categoryVisibility;
|
|
127
|
-
if (!subModelVisibilityStatus) {
|
|
128
|
-
return elementVisibilityWithoutSubModels;
|
|
129
|
-
}
|
|
130
|
-
if (elementVisibilityWithoutSubModels.state === subModelVisibilityStatus.state) {
|
|
131
|
-
return elementVisibilityWithoutSubModels;
|
|
132
|
-
}
|
|
133
|
-
return createVisibilityStatus("partial");
|
|
134
|
-
}
|
|
135
90
|
/**
|
|
136
91
|
* Toggles visibility of categories to show or hide.
|
|
137
92
|
* @internal
|
|
@@ -156,18 +111,18 @@ async function getCategoryIds(viewport) {
|
|
|
156
111
|
* @internal
|
|
157
112
|
*/
|
|
158
113
|
export async function enableCategoryDisplay(viewport, categoryIds, enabled, enableAllSubCategories = true) {
|
|
159
|
-
viewport.changeCategoryDisplay(categoryIds, enabled, enableAllSubCategories);
|
|
114
|
+
viewport.changeCategoryDisplay({ categoryIds, display: enabled, enableAllSubCategories });
|
|
160
115
|
// remove category overrides per model
|
|
161
116
|
const modelsContainingOverrides = new Array();
|
|
162
|
-
for (const
|
|
163
|
-
if (
|
|
164
|
-
modelsContainingOverrides.push(
|
|
117
|
+
for (const override of viewport.perModelCategoryOverrides) {
|
|
118
|
+
if (Id64.has(categoryIds, override.categoryId)) {
|
|
119
|
+
modelsContainingOverrides.push(override.modelId);
|
|
165
120
|
}
|
|
166
121
|
}
|
|
167
|
-
viewport.
|
|
122
|
+
viewport.setPerModelCategoryOverride({ modelIds: modelsContainingOverrides, categoryIds, override: "none" });
|
|
168
123
|
// changeCategoryDisplay only enables subcategories, it does not disabled them. So we must do that ourselves.
|
|
169
124
|
if (false === enabled) {
|
|
170
|
-
(await viewport.iModel.categories.getCategoryInfo(categoryIds)).forEach((categoryInfo) => {
|
|
125
|
+
(await viewport.iModel.categories.getCategoryInfo(Id64.iterable(categoryIds))).forEach((categoryInfo) => {
|
|
171
126
|
categoryInfo.subCategories.forEach((value) => enableSubCategoryDisplay(viewport, value.id, false));
|
|
172
127
|
});
|
|
173
128
|
}
|
|
@@ -177,12 +132,15 @@ export async function enableCategoryDisplay(viewport, categoryIds, enabled, enab
|
|
|
177
132
|
* @internal
|
|
178
133
|
*/
|
|
179
134
|
export function enableSubCategoryDisplay(viewport, subCategoryId, enabled) {
|
|
180
|
-
viewport.changeSubCategoryDisplay(subCategoryId, enabled);
|
|
135
|
+
viewport.changeSubCategoryDisplay({ subCategoryId, display: enabled });
|
|
181
136
|
}
|
|
182
137
|
/** @internal */
|
|
183
138
|
export async function loadCategoriesFromViewport(vp) {
|
|
184
139
|
// Query categories and add them to state
|
|
185
|
-
|
|
140
|
+
if (vp.viewType === "other") {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
const { categoryClass, elementClass } = getClassesByView(vp.viewType);
|
|
186
144
|
const ecsql = `
|
|
187
145
|
SELECT ECInstanceId as id
|
|
188
146
|
FROM ${categoryClass}
|
|
@@ -192,11 +150,17 @@ export async function loadCategoriesFromViewport(vp) {
|
|
|
192
150
|
FROM ${elementClass}
|
|
193
151
|
WHERE
|
|
194
152
|
Category.Id IN (SELECT ECInstanceId FROM ${categoryClass})
|
|
195
|
-
${vp.
|
|
153
|
+
${vp.viewType !== "2d" ? "" : "AND Model.Id=?"}
|
|
196
154
|
)
|
|
197
155
|
`;
|
|
198
156
|
const categories = [];
|
|
199
|
-
const rows = await
|
|
157
|
+
const rows = await (async () => {
|
|
158
|
+
const result = new Array();
|
|
159
|
+
for await (const row of vp.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
|
|
160
|
+
result.push(row);
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
})();
|
|
200
164
|
(await vp.iModel.categories.getCategoryInfo(rows.map((row) => row.id))).forEach((val) => {
|
|
201
165
|
categories.push({ categoryId: val.id, subCategoryIds: val.subCategories.size ? [...val.subCategories.keys()] : undefined });
|
|
202
166
|
});
|
|
@@ -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, 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) => createVisibilityStatus(visibility === \"empty\" ? \"disabled\" : visibility)),\n );\n}\n\n/** @internal */\nexport function getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus,\n getModelVisibilityStatus,\n}: {\n parentNodeVisibilityStatus: VisibilityStatus;\n getModelVisibilityStatus: ({ modelIds }: { modelIds: Id64Array }) => 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 getModelVisibilityStatus({ modelIds: modeledElementIds }).pipe(startWith<VisibilityStatus>(parentNodeVisibilityStatus), mergeVisibilityStatuses);\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: (categoryId?: string) => 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"]}
|
|
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 { map, reduce } from \"rxjs\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\nimport { reduceWhile } from \"./Rxjs.js\";\nimport { createVisibilityStatus } from \"./Tooltip.js\";\nimport { getClassesByView, releaseMainThreadOnItemsCount } from \"./Utils.js\";\n\nimport type { Observable, OperatorFunction } from \"rxjs\";\nimport type { Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { CategoryInfo } from \"../CategoriesVisibilityUtils.js\";\nimport type { TreeWidgetViewport } from \"../TreeWidgetViewport.js\";\nimport type { VisibilityStatus } from \"../UseHierarchyVisibility.js\";\nimport type { Visibility } from \"./Tooltip.js\";\nimport type { ElementId, ModelId } from \"./Types.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) => createVisibilityStatus(visibility === \"empty\" ? \"disabled\" : visibility)),\n );\n}\n\n/** @internal */\nexport function changeElementStateNoChildrenOperator(props: {\n on: boolean;\n isDisplayedByDefault: boolean;\n viewport: TreeWidgetViewport;\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({ elementIds: state.neverDrawn });\n state.changedAlwaysDrawn &&\n state.alwaysDrawn &&\n props.viewport.setAlwaysDrawn({ elementIds: state.alwaysDrawn, exclusive: 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: TreeWidgetViewport;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps,\n): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount, viewport } = props;\n if (totalCount === 0) {\n return props.defaultStatus();\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 interface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: (categoryId?: string) => VisibilityStatus;\n}\n\n/**\n * Toggles visibility of categories to show or hide.\n * @internal\n */\nexport async function toggleAllCategories(viewport: TreeWidgetViewport, 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: TreeWidgetViewport): 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: TreeWidgetViewport, categoryIds: Id64Arg, enabled: boolean, enableAllSubCategories = true) {\n viewport.changeCategoryDisplay({ categoryIds, display: enabled, enableAllSubCategories });\n\n // remove category overrides per model\n const modelsContainingOverrides = new Array<ModelId>();\n for (const override of viewport.perModelCategoryOverrides) {\n if (Id64.has(categoryIds, override.categoryId)) {\n modelsContainingOverrides.push(override.modelId);\n }\n }\n viewport.setPerModelCategoryOverride({ modelIds: modelsContainingOverrides, categoryIds, 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(Id64.iterable(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: TreeWidgetViewport, subCategoryId: Id64String, enabled: boolean) {\n viewport.changeSubCategoryDisplay({ subCategoryId, display: enabled });\n}\n\n/** @internal */\nexport async function loadCategoriesFromViewport(vp: TreeWidgetViewport) {\n // Query categories and add them to state\n if (vp.viewType === \"other\") {\n return [];\n }\n const { categoryClass, elementClass } = getClassesByView(vp.viewType);\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.viewType !== \"2d\" ? \"\" : \"AND Model.Id=?\"}\n )\n `;\n\n const categories: CategoryInfo[] = [];\n const rows = await (async () => {\n const result = new Array<any>();\n for await (const row of vp.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n result.push(row);\n }\n return result;\n })();\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"]}
|