@itwin/tree-widget-react 4.0.0-alpha.2 → 4.0.0-alpha.20
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 +281 -1
- package/README.md +190 -63
- package/lib/esm/tree-widget-react/TreeWidget.d.ts +7 -4
- package/lib/esm/tree-widget-react/TreeWidget.js +32 -12
- package/lib/esm/tree-widget-react/TreeWidget.js.map +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.d.ts +7 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js +22 -23
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js.map +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +4 -3
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js +4 -3
- package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js +6 -6
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.css +3 -2
- 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 +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.css +1 -0
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.d.ts +12 -5
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +13 -9
- 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 +3 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +3 -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 +11 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +64 -14
- 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 -6
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +4 -4
- 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 +41 -8
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +700 -125
- 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 +18 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +124 -83
- 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 +70 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +504 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.d.ts +41 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js +50 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.d.ts +27 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +136 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.d.ts +54 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js +291 -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 +64 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js +94 -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 +36 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/FilteredTree.js +219 -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 +12 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js +19 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +30 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +47 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.d.ts +45 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +569 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.d.ts +6 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.js +33 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +24 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +115 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.d.ts +44 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js +61 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +50 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +364 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.d.ts +19 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js +32 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.d.ts +20 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.js +53 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.js.map +1 -0
- 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 +177 -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 +32 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.js +168 -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 +11 -23
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +22 -76
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContext.d.ts +28 -4
- package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContext.js +73 -2
- package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContext.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.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 +15 -7
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +33 -22
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js +2 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +45 -23
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js +110 -44
- 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 +2 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +4 -5
- 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/Delayed.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.css +25 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.d.ts +27 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js +47 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js +4 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.css +16 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.d.ts +7 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js +19 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.css +11 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +9 -12
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +55 -38
- 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.css +2 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +24 -8
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +41 -25
- 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 +6 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +13 -4
- 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 +6 -5
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js +7 -7
- 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 +5 -5
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js +10 -6
- 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 +5 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +17 -15
- 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 +74 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js +207 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.d.ts +43 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.js +47 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.d.ts +12 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js +112 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{Rxjs.d.ts → internal/Rxjs.d.ts} +9 -2
- package/lib/esm/tree-widget-react/components/trees/common/{Rxjs.js → internal/Rxjs.js} +10 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/Rxjs.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{Tooltip.d.ts → internal/Tooltip.d.ts} +4 -8
- package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js +18 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Types.d.ts +14 -0
- package/lib/esm/tree-widget-react/components/{tree-header/SearchBox.css → trees/common/internal/Types.js} +2 -4
- package/lib/esm/tree-widget-react/components/trees/common/internal/Types.js.map +1 -0
- 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/{UseHierarchiesLocalization.d.ts → internal/UseHierarchiesLocalization.d.ts} +3 -2
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchiesLocalization.js → internal/UseHierarchiesLocalization.js} +6 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseHierarchiesLocalization.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchyFiltering.d.ts → internal/UseHierarchyFiltering.d.ts} +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchyFiltering.js → internal/UseHierarchyFiltering.js} +5 -4
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseHierarchyFiltering.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.d.ts +17 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js +32 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseIModelChangeListener.d.ts → internal/UseIModelChangeListener.d.ts} +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseIModelChangeListener.js → internal/UseIModelChangeListener.js} +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelChangeListener.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +70 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +172 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.d.ts +20 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.js +60 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +39 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +160 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useGuid.d.ts +3 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useGuid.js +12 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useGuid.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.d.ts +68 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js +170 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.d.ts +20 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js +46 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.d.ts +91 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.js +112 -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 +236 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js +600 -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/common/useGuid.d.ts +2 -0
- package/lib/esm/tree-widget-react/components/trees/common/useGuid.js +11 -0
- package/lib/esm/tree-widget-react/components/trees/common/useGuid.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +7 -2
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +29 -20
- 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 +2 -6
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +2 -2
- 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.d.ts +5 -6
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +36 -21
- 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 +9 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +48 -36
- 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 +2 -6
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +13 -4
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +80 -74
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +7 -10
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +45 -36
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/index.d.ts +16 -5
- package/lib/esm/tree-widget-react/components/trees/index.js +16 -4
- 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 +3 -3
- 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 -3
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +34 -24
- 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 +14 -7
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +11 -7
- 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 +24 -20
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +193 -154
- 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 +60 -10
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +97 -238
- 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 +22 -25
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +280 -298
- 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/ModelsTreeNode.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +41 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +253 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/FilteredTree.d.ts +27 -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 +269 -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 +12 -0
- package/lib/esm/tree-widget-react-internal.js +18 -0
- package/lib/esm/tree-widget-react-internal.js.map +1 -0
- package/lib/public/locales/en/TreeWidget.json +41 -54
- package/package.json +76 -79
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesVisibilityHandler.d.ts +0 -28
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesVisibilityHandler.js +0 -87
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContextProvider.d.ts +0 -7
- package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContextProvider.js +0 -66
- package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContextProvider.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/Rxjs.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/Tooltip.js +0 -24
- package/lib/esm/tree-widget-react/components/trees/common/Tooltip.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.d.ts +0 -7
- package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.js +0 -21
- package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.d.ts +0 -11
- package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.js +0 -24
- package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchiesLocalization.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyFiltering.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseIModelChangeListener.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 -127
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTreeContent.d.ts +0 -7
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTreeContent.js +0 -12
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTreeContent.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.d.ts +0 -7
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js +0 -21
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +0 -29
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +0 -138
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.d.ts +0 -25
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js +0 -173
- 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 -106
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +0 -663
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +0 -12
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.js +0 -48
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +0 -1
|
@@ -2,19 +2,23 @@
|
|
|
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 { bufferCount, defer, from, lastValueFrom, map, merge, mergeAll, mergeMap, reduce, switchMap } from "rxjs";
|
|
5
|
+
import { bufferCount, defaultIfEmpty, defer, firstValueFrom, forkJoin, from, fromEvent, identity, lastValueFrom, map, merge, mergeAll, mergeMap, reduce, switchMap, takeUntil, toArray, } from "rxjs";
|
|
6
|
+
import { Guid } from "@itwin/core-bentley";
|
|
6
7
|
import { IModel } from "@itwin/core-common";
|
|
7
|
-
import { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition, NodeSelectClauseColumnNames, ProcessedHierarchyNode, } from "@itwin/presentation-hierarchies";
|
|
8
|
+
import { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition, HierarchyFilteringPath, NodeSelectClauseColumnNames, ProcessedHierarchyNode, } from "@itwin/presentation-hierarchies";
|
|
8
9
|
import { createBisInstanceLabelSelectClauseFactory, ECSql } from "@itwin/presentation-shared";
|
|
9
|
-
import {
|
|
10
|
+
import { CLASS_NAME_Element, CLASS_NAME_GeometricElement3d, CLASS_NAME_GeometricModel3d, CLASS_NAME_InformationPartitionElement, CLASS_NAME_ISubModeledElement, CLASS_NAME_Model, CLASS_NAME_SpatialCategory, CLASS_NAME_Subject, } from "../common/internal/ClassNameDefinitions.js";
|
|
11
|
+
import { collect } from "../common/internal/Rxjs.js";
|
|
12
|
+
import { createIdsSelector, getOptimalBatchSize, groupingNodeHasFilterTargets, parseIdsSelectorResult, releaseMainThreadOnItemsCount, } from "../common/internal/Utils.js";
|
|
10
13
|
import { FilterLimitExceededError } from "../common/TreeErrors.js";
|
|
11
|
-
import { createIdsSelector, parseIdsSelectorResult } from "../common/Utils.js";
|
|
12
|
-
import { releaseMainThreadOnItemsCount } from "./Utils.js";
|
|
13
14
|
const MAX_FILTERING_INSTANCE_KEY_COUNT = 100;
|
|
15
|
+
/** @internal */
|
|
14
16
|
export const defaultHierarchyConfiguration = {
|
|
15
17
|
elementClassGrouping: "enable",
|
|
16
|
-
elementClassSpecification:
|
|
18
|
+
elementClassSpecification: CLASS_NAME_GeometricElement3d,
|
|
17
19
|
showEmptyModels: false,
|
|
20
|
+
hideRootSubject: false,
|
|
21
|
+
hierarchyLevelFiltering: "enable",
|
|
18
22
|
};
|
|
19
23
|
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
20
24
|
export var ModelsTreeInstanceKeyPathsProps;
|
|
@@ -24,54 +28,68 @@ export var ModelsTreeInstanceKeyPathsProps;
|
|
|
24
28
|
}
|
|
25
29
|
ModelsTreeInstanceKeyPathsProps.isLabelProps = isLabelProps;
|
|
26
30
|
})(ModelsTreeInstanceKeyPathsProps || (ModelsTreeInstanceKeyPathsProps = {}));
|
|
31
|
+
/** @internal */
|
|
27
32
|
export class ModelsTreeDefinition {
|
|
33
|
+
#impl;
|
|
34
|
+
#idsCache;
|
|
35
|
+
#hierarchyConfig;
|
|
36
|
+
#selectQueryFactory;
|
|
37
|
+
#nodeLabelSelectClauseFactory;
|
|
38
|
+
#queryExecutor;
|
|
39
|
+
#isSupported;
|
|
40
|
+
static #componentName = "ModelsTreeDefinition";
|
|
41
|
+
#componentId;
|
|
28
42
|
constructor(props) {
|
|
29
|
-
this
|
|
43
|
+
this.#impl = createPredicateBasedHierarchyDefinition({
|
|
30
44
|
classHierarchyInspector: props.imodelAccess,
|
|
31
45
|
hierarchy: {
|
|
32
|
-
rootNodes: async (requestProps) => this.createSubjectChildrenQuery({ ...requestProps, parentNodeInstanceIds: [IModel.rootSubjectId] }),
|
|
46
|
+
rootNodes: async (requestProps) => this.createSubjectChildrenQuery({ ...requestProps, parentNodeInstanceIds: this.#hierarchyConfig.hideRootSubject ? [IModel.rootSubjectId] : [] }),
|
|
33
47
|
childNodes: [
|
|
34
48
|
{
|
|
35
|
-
parentInstancesNodePredicate:
|
|
49
|
+
parentInstancesNodePredicate: CLASS_NAME_Subject,
|
|
36
50
|
definitions: async (requestProps) => this.createSubjectChildrenQuery(requestProps),
|
|
37
51
|
},
|
|
38
52
|
{
|
|
39
|
-
parentInstancesNodePredicate:
|
|
53
|
+
parentInstancesNodePredicate: CLASS_NAME_ISubModeledElement,
|
|
40
54
|
definitions: async (requestProps) => this.createISubModeledElementChildrenQuery(requestProps),
|
|
41
55
|
},
|
|
42
56
|
{
|
|
43
|
-
parentInstancesNodePredicate:
|
|
57
|
+
parentInstancesNodePredicate: CLASS_NAME_GeometricModel3d,
|
|
44
58
|
definitions: async (requestProps) => this.createGeometricModel3dChildrenQuery(requestProps),
|
|
45
59
|
},
|
|
46
60
|
{
|
|
47
|
-
parentInstancesNodePredicate:
|
|
61
|
+
parentInstancesNodePredicate: CLASS_NAME_SpatialCategory,
|
|
48
62
|
definitions: async (requestProps) => this.createSpatialCategoryChildrenQuery(requestProps),
|
|
49
63
|
},
|
|
50
64
|
{
|
|
51
|
-
parentInstancesNodePredicate:
|
|
65
|
+
parentInstancesNodePredicate: CLASS_NAME_GeometricElement3d,
|
|
52
66
|
definitions: async (requestProps) => this.createGeometricElement3dChildrenQuery(requestProps),
|
|
53
67
|
},
|
|
54
68
|
],
|
|
55
69
|
},
|
|
56
70
|
});
|
|
57
|
-
this
|
|
58
|
-
this
|
|
59
|
-
this
|
|
60
|
-
this
|
|
61
|
-
this
|
|
71
|
+
this.#componentId = props.componentId ?? Guid.createValue();
|
|
72
|
+
this.#idsCache = props.idsCache;
|
|
73
|
+
this.#queryExecutor = props.imodelAccess;
|
|
74
|
+
this.#hierarchyConfig = props.hierarchyConfig;
|
|
75
|
+
this.#nodeLabelSelectClauseFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });
|
|
76
|
+
this.#selectQueryFactory = createNodesQueryClauseFactory({
|
|
62
77
|
imodelAccess: props.imodelAccess,
|
|
63
|
-
instanceLabelSelectClauseFactory: this
|
|
78
|
+
instanceLabelSelectClauseFactory: this.#nodeLabelSelectClauseFactory,
|
|
64
79
|
});
|
|
65
80
|
}
|
|
66
81
|
async postProcessNode(node) {
|
|
67
82
|
if (ProcessedHierarchyNode.isGroupingNode(node)) {
|
|
83
|
+
const { hasFilterTargetAncestor, hasDirectNonFilteredTargets } = groupingNodeHasFilterTargets(node.children);
|
|
68
84
|
return {
|
|
69
85
|
...node,
|
|
70
|
-
label: this.
|
|
86
|
+
label: this.#hierarchyConfig.elementClassGrouping === "enableWithCounts" ? `${node.label} (${node.children.length})` : node.label,
|
|
71
87
|
extendedData: {
|
|
72
88
|
...node.extendedData,
|
|
73
89
|
// add `modelId` and `categoryId` from the first grouped element
|
|
74
90
|
...node.children[0].extendedData,
|
|
91
|
+
...(hasDirectNonFilteredTargets ? { hasDirectNonFilteredTargets } : {}),
|
|
92
|
+
...(hasFilterTargetAncestor ? { hasFilterTargetAncestor } : {}),
|
|
75
93
|
// `imageId` is assigned to instance nodes at query time, but grouping ones need to
|
|
76
94
|
// be handled during post-processing
|
|
77
95
|
imageId: "icon-ec-class",
|
|
@@ -81,53 +99,56 @@ export class ModelsTreeDefinition {
|
|
|
81
99
|
return node;
|
|
82
100
|
}
|
|
83
101
|
async defineHierarchyLevel(props) {
|
|
84
|
-
if (this
|
|
85
|
-
this
|
|
102
|
+
if (this.#isSupported === undefined) {
|
|
103
|
+
this.#isSupported = this.isSupported();
|
|
86
104
|
}
|
|
87
|
-
if ((await this
|
|
105
|
+
if ((await this.#isSupported) === false) {
|
|
88
106
|
return [];
|
|
89
107
|
}
|
|
90
|
-
return this.
|
|
108
|
+
return this.#impl.defineHierarchyLevel(props);
|
|
91
109
|
}
|
|
92
|
-
async createSubjectChildrenQuery({ parentNodeInstanceIds:
|
|
110
|
+
async createSubjectChildrenQuery({ parentNodeInstanceIds: parentSubjectIds, instanceFilter, }) {
|
|
93
111
|
const [subjectFilterClauses, modelFilterClauses] = await Promise.all([
|
|
94
|
-
this.
|
|
112
|
+
this.#selectQueryFactory.createFilterClauses({
|
|
95
113
|
filter: instanceFilter,
|
|
96
|
-
contentClass: { fullName:
|
|
114
|
+
contentClass: { fullName: CLASS_NAME_Subject, alias: "this" },
|
|
97
115
|
}),
|
|
98
|
-
this.
|
|
116
|
+
this.#selectQueryFactory.createFilterClauses({
|
|
99
117
|
filter: instanceFilter,
|
|
100
|
-
contentClass: { fullName:
|
|
118
|
+
contentClass: { fullName: CLASS_NAME_GeometricModel3d, alias: "this" },
|
|
101
119
|
}),
|
|
102
120
|
]);
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
121
|
+
const { childSubjectIds, childModelIds } = parentSubjectIds.length
|
|
122
|
+
? await firstValueFrom(forkJoin({
|
|
123
|
+
childSubjectIds: this.#idsCache.getChildSubjectIds(parentSubjectIds),
|
|
124
|
+
childModelIds: this.#idsCache.getChildSubjectModelIds(parentSubjectIds),
|
|
125
|
+
}))
|
|
126
|
+
: { childSubjectIds: [IModel.rootSubjectId], childModelIds: [] };
|
|
107
127
|
const defs = new Array();
|
|
108
128
|
childSubjectIds.length &&
|
|
109
129
|
defs.push({
|
|
110
|
-
fullClassName:
|
|
130
|
+
fullClassName: CLASS_NAME_Subject,
|
|
111
131
|
query: {
|
|
112
132
|
ecsql: `
|
|
113
133
|
SELECT
|
|
114
|
-
${await this.
|
|
134
|
+
${await this.#selectQueryFactory.createSelectClause({
|
|
115
135
|
ecClassId: { selector: "this.ECClassId" },
|
|
116
136
|
ecInstanceId: { selector: "this.ECInstanceId" },
|
|
117
137
|
nodeLabel: {
|
|
118
|
-
selector: await this.
|
|
138
|
+
selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({
|
|
119
139
|
classAlias: "this",
|
|
120
|
-
className:
|
|
140
|
+
className: CLASS_NAME_Subject,
|
|
121
141
|
}),
|
|
122
142
|
},
|
|
123
143
|
hideIfNoChildren: true,
|
|
124
144
|
hasChildren: { selector: `InVirtualSet(?, this.ECInstanceId)` },
|
|
125
145
|
grouping: { byLabel: { action: "merge", groupId: "subject" } },
|
|
126
146
|
extendedData: {
|
|
127
|
-
imageId:
|
|
147
|
+
imageId: { selector: `IIF(this.ECInstanceId = ${IModel.rootSubjectId}, 'icon-imodel-hollow-2', 'icon-folder')` },
|
|
128
148
|
isSubject: true,
|
|
129
149
|
},
|
|
130
|
-
|
|
150
|
+
autoExpand: { selector: `IIF(this.ECInstanceId = ${IModel.rootSubjectId}, true, false)` },
|
|
151
|
+
supportsFiltering: this.supportsFiltering(),
|
|
131
152
|
})}
|
|
132
153
|
FROM ${subjectFilterClauses.from} this
|
|
133
154
|
${subjectFilterClauses.joins}
|
|
@@ -136,26 +157,26 @@ export class ModelsTreeDefinition {
|
|
|
136
157
|
${subjectFilterClauses.where ? `AND ${subjectFilterClauses.where}` : ""}
|
|
137
158
|
`,
|
|
138
159
|
bindings: [
|
|
139
|
-
{ type: "idset", value: await this.
|
|
160
|
+
{ type: "idset", value: await firstValueFrom(this.#idsCache.getParentSubjectIds()) },
|
|
140
161
|
...childSubjectIds.map((id) => ({ type: "id", value: id })),
|
|
141
162
|
],
|
|
142
163
|
},
|
|
143
164
|
});
|
|
144
165
|
childModelIds.length &&
|
|
145
166
|
defs.push({
|
|
146
|
-
fullClassName:
|
|
167
|
+
fullClassName: CLASS_NAME_GeometricModel3d,
|
|
147
168
|
query: {
|
|
148
169
|
ecsql: `
|
|
149
170
|
SELECT model.ECInstanceId AS ECInstanceId, model.*
|
|
150
171
|
FROM (
|
|
151
172
|
SELECT
|
|
152
|
-
${await this.
|
|
173
|
+
${await this.#selectQueryFactory.createSelectClause({
|
|
153
174
|
ecClassId: { selector: "m.ECClassId" },
|
|
154
175
|
ecInstanceId: { selector: "m.ECInstanceId" },
|
|
155
176
|
nodeLabel: {
|
|
156
|
-
selector: await this.
|
|
177
|
+
selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({
|
|
157
178
|
classAlias: "partition",
|
|
158
|
-
className:
|
|
179
|
+
className: CLASS_NAME_InformationPartitionElement,
|
|
159
180
|
}),
|
|
160
181
|
},
|
|
161
182
|
hideNodeInHierarchy: {
|
|
@@ -169,12 +190,12 @@ export class ModelsTreeDefinition {
|
|
|
169
190
|
END
|
|
170
191
|
`,
|
|
171
192
|
},
|
|
172
|
-
hasChildren: this.
|
|
193
|
+
hasChildren: this.#hierarchyConfig.showEmptyModels
|
|
173
194
|
? {
|
|
174
195
|
selector: `
|
|
175
196
|
IFNULL((
|
|
176
197
|
SELECT 1
|
|
177
|
-
FROM ${this.
|
|
198
|
+
FROM ${this.#hierarchyConfig.elementClassSpecification} e
|
|
178
199
|
WHERE e.Model.Id = m.ECInstanceId
|
|
179
200
|
LIMIT 1
|
|
180
201
|
), 0)
|
|
@@ -185,10 +206,10 @@ export class ModelsTreeDefinition {
|
|
|
185
206
|
imageId: "icon-model",
|
|
186
207
|
isModel: true,
|
|
187
208
|
},
|
|
188
|
-
supportsFiltering:
|
|
209
|
+
supportsFiltering: this.supportsFiltering(),
|
|
189
210
|
})}
|
|
190
|
-
FROM
|
|
191
|
-
JOIN
|
|
211
|
+
FROM ${CLASS_NAME_GeometricModel3d} m
|
|
212
|
+
JOIN ${CLASS_NAME_InformationPartitionElement} [partition] ON [partition].ECInstanceId = m.ModeledElement.Id
|
|
192
213
|
WHERE
|
|
193
214
|
m.ECInstanceId IN (${childModelIds.map(() => "?").join(",")})
|
|
194
215
|
) model
|
|
@@ -206,21 +227,21 @@ export class ModelsTreeDefinition {
|
|
|
206
227
|
// hidden - the filter will get applied on the child hierarchy levels
|
|
207
228
|
return [
|
|
208
229
|
{
|
|
209
|
-
fullClassName:
|
|
230
|
+
fullClassName: CLASS_NAME_GeometricModel3d,
|
|
210
231
|
query: {
|
|
211
232
|
ecsql: `
|
|
212
233
|
SELECT
|
|
213
|
-
${await this.
|
|
234
|
+
${await this.#selectQueryFactory.createSelectClause({
|
|
214
235
|
ecClassId: { selector: "this.ECClassId" },
|
|
215
236
|
ecInstanceId: { selector: "this.ECInstanceId" },
|
|
216
|
-
nodeLabel: "",
|
|
237
|
+
nodeLabel: "", // doesn't matter - the node is always hidden
|
|
217
238
|
hideNodeInHierarchy: true,
|
|
218
239
|
})}
|
|
219
|
-
FROM
|
|
240
|
+
FROM ${CLASS_NAME_GeometricModel3d} this
|
|
220
241
|
WHERE
|
|
221
242
|
this.ModeledElement.Id IN (${elementIds.map(() => "?").join(",")})
|
|
222
243
|
AND NOT this.IsPrivate
|
|
223
|
-
AND this.ECInstanceId IN (SELECT Model.Id FROM ${this.
|
|
244
|
+
AND this.ECInstanceId IN (SELECT Model.Id FROM ${this.#hierarchyConfig.elementClassSpecification})
|
|
224
245
|
`,
|
|
225
246
|
bindings: [...elementIds.map((id) => ({ type: "id", value: id }))],
|
|
226
247
|
},
|
|
@@ -228,23 +249,23 @@ export class ModelsTreeDefinition {
|
|
|
228
249
|
];
|
|
229
250
|
}
|
|
230
251
|
async createGeometricModel3dChildrenQuery({ parentNodeInstanceIds: modelIds, instanceFilter, }) {
|
|
231
|
-
const instanceFilterClauses = await this.
|
|
252
|
+
const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
|
|
232
253
|
filter: instanceFilter,
|
|
233
|
-
contentClass: { fullName:
|
|
254
|
+
contentClass: { fullName: CLASS_NAME_SpatialCategory, alias: "this" },
|
|
234
255
|
});
|
|
235
256
|
return [
|
|
236
257
|
{
|
|
237
|
-
fullClassName:
|
|
258
|
+
fullClassName: CLASS_NAME_SpatialCategory,
|
|
238
259
|
query: {
|
|
239
260
|
ecsql: `
|
|
240
261
|
SELECT
|
|
241
|
-
${await this.
|
|
262
|
+
${await this.#selectQueryFactory.createSelectClause({
|
|
242
263
|
ecClassId: { selector: "this.ECClassId" },
|
|
243
264
|
ecInstanceId: { selector: "this.ECInstanceId" },
|
|
244
265
|
nodeLabel: {
|
|
245
|
-
selector: await this.
|
|
266
|
+
selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({
|
|
246
267
|
classAlias: "this",
|
|
247
|
-
className:
|
|
268
|
+
className: CLASS_NAME_SpatialCategory,
|
|
248
269
|
}),
|
|
249
270
|
},
|
|
250
271
|
grouping: { byLabel: { action: "merge", groupId: "category" } },
|
|
@@ -254,14 +275,14 @@ export class ModelsTreeDefinition {
|
|
|
254
275
|
isCategory: true,
|
|
255
276
|
modelIds: { selector: createIdsSelector(modelIds) },
|
|
256
277
|
},
|
|
257
|
-
supportsFiltering:
|
|
278
|
+
supportsFiltering: this.supportsFiltering(),
|
|
258
279
|
})}
|
|
259
280
|
FROM ${instanceFilterClauses.from} this
|
|
260
281
|
${instanceFilterClauses.joins}
|
|
261
282
|
WHERE
|
|
262
283
|
EXISTS (
|
|
263
284
|
SELECT 1
|
|
264
|
-
FROM ${this.
|
|
285
|
+
FROM ${this.#hierarchyConfig.elementClassSpecification} element
|
|
265
286
|
WHERE
|
|
266
287
|
element.Model.Id IN (${modelIds.map(() => "?").join(",")})
|
|
267
288
|
AND element.Category.Id = +this.ECInstanceId
|
|
@@ -279,40 +300,43 @@ export class ModelsTreeDefinition {
|
|
|
279
300
|
if (modelIds.length === 0) {
|
|
280
301
|
throw new Error(`Invalid category node "${parentNode.label}" - missing model information.`);
|
|
281
302
|
}
|
|
282
|
-
const instanceFilterClauses = await this.
|
|
303
|
+
const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
|
|
283
304
|
filter: instanceFilter,
|
|
284
|
-
contentClass: { fullName: this.
|
|
305
|
+
contentClass: { fullName: this.#hierarchyConfig.elementClassSpecification, alias: "this" },
|
|
285
306
|
});
|
|
307
|
+
const modeledElements = await firstValueFrom(from(modelIds).pipe(mergeMap((modelId) => this.#idsCache.getCategoriesModeledElements(modelId, categoryIds)), reduce((acc, foundModeledElements) => {
|
|
308
|
+
return acc.concat(foundModeledElements);
|
|
309
|
+
}, new Array())));
|
|
286
310
|
return [
|
|
287
311
|
{
|
|
288
|
-
fullClassName: this.
|
|
312
|
+
fullClassName: this.#hierarchyConfig.elementClassSpecification,
|
|
289
313
|
query: {
|
|
290
314
|
ecsql: `
|
|
291
315
|
SELECT
|
|
292
|
-
${await this.
|
|
316
|
+
${await this.#selectQueryFactory.createSelectClause({
|
|
293
317
|
ecClassId: { selector: "this.ECClassId" },
|
|
294
318
|
ecInstanceId: { selector: "this.ECInstanceId" },
|
|
295
319
|
nodeLabel: {
|
|
296
|
-
selector: await this.
|
|
320
|
+
selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({
|
|
297
321
|
classAlias: "this",
|
|
298
|
-
className: this.
|
|
322
|
+
className: this.#hierarchyConfig.elementClassSpecification,
|
|
299
323
|
}),
|
|
300
324
|
},
|
|
301
325
|
grouping: {
|
|
302
|
-
byClass: this.
|
|
326
|
+
byClass: this.#hierarchyConfig.elementClassGrouping !== "disable",
|
|
303
327
|
},
|
|
304
328
|
hasChildren: {
|
|
305
329
|
selector: `
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
)
|
|
330
|
+
IIF(
|
|
331
|
+
${modeledElements.length ? `this.ECInstanceId IN (${modeledElements.join(",")})` : `FALSE`},
|
|
332
|
+
1,
|
|
333
|
+
IFNULL((
|
|
334
|
+
SELECT 1
|
|
335
|
+
FROM ${this.#hierarchyConfig.elementClassSpecification} ce
|
|
336
|
+
WHERE ce.Parent.Id = this.ECInstanceId
|
|
337
|
+
LIMIT 1
|
|
338
|
+
), 0)
|
|
339
|
+
)
|
|
316
340
|
`,
|
|
317
341
|
},
|
|
318
342
|
extendedData: {
|
|
@@ -320,7 +344,7 @@ export class ModelsTreeDefinition {
|
|
|
320
344
|
categoryId: { selector: "IdToHex(this.Category.Id)" },
|
|
321
345
|
imageId: "icon-item",
|
|
322
346
|
},
|
|
323
|
-
supportsFiltering:
|
|
347
|
+
supportsFiltering: this.supportsFiltering(),
|
|
324
348
|
})}
|
|
325
349
|
FROM ${instanceFilterClauses.from} this
|
|
326
350
|
${instanceFilterClauses.joins}
|
|
@@ -336,38 +360,35 @@ export class ModelsTreeDefinition {
|
|
|
336
360
|
];
|
|
337
361
|
}
|
|
338
362
|
async createGeometricElement3dChildrenQuery({ parentNodeInstanceIds: elementIds, instanceFilter, }) {
|
|
339
|
-
const instanceFilterClauses = await this.
|
|
363
|
+
const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
|
|
340
364
|
filter: instanceFilter,
|
|
341
|
-
contentClass: { fullName: this.
|
|
365
|
+
contentClass: { fullName: this.#hierarchyConfig.elementClassSpecification, alias: "this" },
|
|
342
366
|
});
|
|
343
367
|
return [
|
|
344
368
|
{
|
|
345
|
-
fullClassName: this.
|
|
369
|
+
fullClassName: this.#hierarchyConfig.elementClassSpecification,
|
|
346
370
|
query: {
|
|
347
371
|
ecsql: `
|
|
348
372
|
SELECT
|
|
349
|
-
${await this.
|
|
373
|
+
${await this.#selectQueryFactory.createSelectClause({
|
|
350
374
|
ecClassId: { selector: "this.ECClassId" },
|
|
351
375
|
ecInstanceId: { selector: "this.ECInstanceId" },
|
|
352
376
|
nodeLabel: {
|
|
353
|
-
selector: await this.
|
|
377
|
+
selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({
|
|
354
378
|
classAlias: "this",
|
|
355
|
-
className: this.
|
|
379
|
+
className: this.#hierarchyConfig.elementClassSpecification,
|
|
356
380
|
}),
|
|
357
381
|
},
|
|
358
382
|
grouping: {
|
|
359
|
-
byClass: this.
|
|
383
|
+
byClass: this.#hierarchyConfig.elementClassGrouping !== "disable",
|
|
360
384
|
},
|
|
361
385
|
hasChildren: {
|
|
362
386
|
selector: `
|
|
363
387
|
IFNULL((
|
|
364
388
|
SELECT 1
|
|
365
|
-
FROM
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
SELECT ModeledElement.Id ParentId FROM bis.GeometricModel3d
|
|
369
|
-
)
|
|
370
|
-
WHERE ParentId = this.ECInstanceId
|
|
389
|
+
FROM ${this.#hierarchyConfig.elementClassSpecification} ce
|
|
390
|
+
JOIN ${CLASS_NAME_Model} m ON ce.Model.Id = m.ECInstanceId
|
|
391
|
+
WHERE ce.Parent.Id = this.ECInstanceId OR (ce.Model.Id = this.ECInstanceId AND m.IsPrivate = false)
|
|
371
392
|
LIMIT 1
|
|
372
393
|
), 0)
|
|
373
394
|
`,
|
|
@@ -377,7 +398,7 @@ export class ModelsTreeDefinition {
|
|
|
377
398
|
categoryId: { selector: "IdToHex(this.Category.Id)" },
|
|
378
399
|
imageId: "icon-item",
|
|
379
400
|
},
|
|
380
|
-
supportsFiltering:
|
|
401
|
+
supportsFiltering: this.supportsFiltering(),
|
|
381
402
|
})}
|
|
382
403
|
FROM ${instanceFilterClauses.from} this
|
|
383
404
|
${instanceFilterClauses.joins}
|
|
@@ -391,16 +412,22 @@ export class ModelsTreeDefinition {
|
|
|
391
412
|
];
|
|
392
413
|
}
|
|
393
414
|
static async createInstanceKeyPaths(props) {
|
|
394
|
-
|
|
395
|
-
const
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
415
|
+
return lastValueFrom(defer(() => {
|
|
416
|
+
const componentInfo = { componentId: props.componentId ?? Guid.createValue(), componentName: this.#componentName };
|
|
417
|
+
if (ModelsTreeInstanceKeyPathsProps.isLabelProps(props)) {
|
|
418
|
+
const labelsFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });
|
|
419
|
+
return createInstanceKeyPathsFromInstanceLabelObs({ ...props, ...componentInfo, labelsFactory });
|
|
420
|
+
}
|
|
421
|
+
return createInstanceKeyPathsFromTargetItemsObs({ ...props, ...componentInfo });
|
|
422
|
+
}).pipe(props.abortSignal ? takeUntil(fromEvent(props.abortSignal, "abort")) : identity, defaultIfEmpty([])));
|
|
423
|
+
}
|
|
424
|
+
supportsFiltering() {
|
|
425
|
+
return this.#hierarchyConfig.hierarchyLevelFiltering === "enable";
|
|
399
426
|
}
|
|
400
427
|
async isSupported() {
|
|
401
|
-
const [schemaName, className] = this.
|
|
428
|
+
const [schemaName, className] = this.#hierarchyConfig.elementClassSpecification.split(/[\.:]/);
|
|
402
429
|
if (!schemaName || !className) {
|
|
403
|
-
throw new Error(`Provided class specification ${this.
|
|
430
|
+
throw new Error(`Provided class specification ${this.#hierarchyConfig.elementClassSpecification} should be in format {SchemaName}:{ClassName} or {SchemaName}.{ClassName}`);
|
|
404
431
|
}
|
|
405
432
|
const query = {
|
|
406
433
|
ecsql: `
|
|
@@ -414,13 +441,16 @@ export class ModelsTreeDefinition {
|
|
|
414
441
|
{ type: "string", value: className },
|
|
415
442
|
],
|
|
416
443
|
};
|
|
417
|
-
for await (const _row of this.
|
|
444
|
+
for await (const _row of this.#queryExecutor.createQueryReader(query, {
|
|
445
|
+
restartToken: `${ModelsTreeDefinition.#componentName}/${this.#componentId}/is-class-supported`,
|
|
446
|
+
})) {
|
|
418
447
|
return true;
|
|
419
448
|
}
|
|
420
449
|
return false;
|
|
421
450
|
}
|
|
422
451
|
}
|
|
423
|
-
function createGeometricElementInstanceKeyPaths(
|
|
452
|
+
function createGeometricElementInstanceKeyPaths(props) {
|
|
453
|
+
const { targetItems, chunkIndex, componentId, componentName, hierarchyConfig, idsCache, imodelAccess } = props;
|
|
424
454
|
const elementIds = targetItems.filter((info) => typeof info === "string");
|
|
425
455
|
const groupInfos = targetItems.filter((info) => typeof info !== "string");
|
|
426
456
|
const separator = ";";
|
|
@@ -455,8 +485,8 @@ function createGeometricElementInstanceKeyPaths(imodelAccess, idsCache, hierarch
|
|
|
455
485
|
)
|
|
456
486
|
|
|
457
487
|
FROM InstanceElementsWithClassGroupingNodes e
|
|
458
|
-
LEFT JOIN
|
|
459
|
-
LEFT JOIN
|
|
488
|
+
LEFT JOIN ${CLASS_NAME_GeometricModel3d} m ON (e.ParentId IS NULL AND m.ECInstanceId = e.ModelId)
|
|
489
|
+
LEFT JOIN ${CLASS_NAME_SpatialCategory} c ON (e.ParentId IS NULL AND c.ECInstanceId = e.CategoryId)
|
|
460
490
|
|
|
461
491
|
UNION ALL
|
|
462
492
|
|
|
@@ -471,8 +501,8 @@ function createGeometricElementInstanceKeyPaths(imodelAccess, idsCache, hierarch
|
|
|
471
501
|
)
|
|
472
502
|
FROM ModelsCategoriesElementsHierarchy ce
|
|
473
503
|
JOIN ${hierarchyConfig.elementClassSpecification} pe ON (pe.ECInstanceId = ce.ParentId OR pe.ECInstanceId = ce.ModelId AND ce.ParentId IS NULL)
|
|
474
|
-
LEFT JOIN
|
|
475
|
-
LEFT JOIN
|
|
504
|
+
LEFT JOIN ${CLASS_NAME_GeometricModel3d} m ON (pe.Parent.Id IS NULL AND m.ECInstanceId = pe.Model.Id)
|
|
505
|
+
LEFT JOIN ${CLASS_NAME_SpatialCategory} c ON (pe.Parent.Id IS NULL AND c.ECInstanceId = pe.Category.Id)
|
|
476
506
|
)`,
|
|
477
507
|
];
|
|
478
508
|
const ecsql = `
|
|
@@ -480,21 +510,20 @@ function createGeometricElementInstanceKeyPaths(imodelAccess, idsCache, hierarch
|
|
|
480
510
|
FROM ModelsCategoriesElementsHierarchy mce
|
|
481
511
|
WHERE mce.ParentId IS NULL
|
|
482
512
|
`;
|
|
483
|
-
return imodelAccess.createQueryReader({ ctes, ecsql }, { rowFormat: "Indexes", limit: "unbounded" });
|
|
484
|
-
}).pipe(releaseMainThreadOnItemsCount(300), map((row) => parseQueryRow(row, groupInfos, separator, hierarchyConfig.elementClassSpecification)), mergeMap(({ modelId, elementHierarchyPath, groupingNode }) =>
|
|
485
|
-
// We
|
|
513
|
+
return imodelAccess.createQueryReader({ ctes, ecsql }, { rowFormat: "Indexes", limit: "unbounded", restartToken: `${componentName}/${componentId}/geometric-element-paths/${chunkIndex}` });
|
|
514
|
+
}).pipe(releaseMainThreadOnItemsCount(300), map((row) => parseQueryRow(row, groupInfos, separator, hierarchyConfig.elementClassSpecification)), mergeMap(({ modelId, elementHierarchyPath, groupingNode }) => idsCache.createModelInstanceKeyPaths(modelId).pipe(mergeAll(), map((modelPath) => {
|
|
515
|
+
// We don't want to modify the original path, we create a copy that we can modify
|
|
486
516
|
const newModelPath = [...modelPath];
|
|
487
517
|
newModelPath.pop(); // model is already included in the element hierarchy path
|
|
488
518
|
const path = [...newModelPath, ...elementHierarchyPath];
|
|
489
519
|
if (!groupingNode) {
|
|
490
|
-
return path;
|
|
520
|
+
return { path };
|
|
491
521
|
}
|
|
492
522
|
return {
|
|
493
523
|
path,
|
|
494
524
|
options: {
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
depth: groupingNode.parentKeys.length,
|
|
525
|
+
reveal: {
|
|
526
|
+
depthInHierarchy: groupingNode.parentKeys.length,
|
|
498
527
|
},
|
|
499
528
|
},
|
|
500
529
|
};
|
|
@@ -509,10 +538,10 @@ function parseQueryRow(row, groupInfos, separator, elementClassName) {
|
|
|
509
538
|
path.push({ className: elementClassName, id: rowElements[i + 1] });
|
|
510
539
|
break;
|
|
511
540
|
case "c":
|
|
512
|
-
path.push({ className:
|
|
541
|
+
path.push({ className: CLASS_NAME_SpatialCategory, id: rowElements[i + 1] });
|
|
513
542
|
break;
|
|
514
543
|
case "m":
|
|
515
|
-
path.push({ className:
|
|
544
|
+
path.push({ className: CLASS_NAME_GeometricModel3d, id: rowElements[i + 1] });
|
|
516
545
|
break;
|
|
517
546
|
}
|
|
518
547
|
}
|
|
@@ -522,66 +551,74 @@ function parseQueryRow(row, groupInfos, separator, elementClassName) {
|
|
|
522
551
|
groupingNode: row[2] === -1 ? undefined : groupInfos[row[2]].groupingNode,
|
|
523
552
|
};
|
|
524
553
|
}
|
|
525
|
-
|
|
554
|
+
function createInstanceKeyPathsFromTargetItemsObs({ targetItems, imodelAccess, hierarchyConfig, idsCache, limit, componentId, componentName, }) {
|
|
526
555
|
if (limit !== "unbounded" && targetItems.length > (limit ?? MAX_FILTERING_INSTANCE_KEY_COUNT)) {
|
|
527
556
|
throw new FilterLimitExceededError(limit ?? MAX_FILTERING_INSTANCE_KEY_COUNT);
|
|
528
557
|
}
|
|
529
|
-
return
|
|
558
|
+
return from(targetItems).pipe(releaseMainThreadOnItemsCount(2000), mergeMap(async (key) => {
|
|
530
559
|
if ("parent" in key) {
|
|
531
560
|
return { key, type: 0 };
|
|
532
561
|
}
|
|
533
|
-
if (await imodelAccess.classDerivesFrom(key.className,
|
|
562
|
+
if (await imodelAccess.classDerivesFrom(key.className, CLASS_NAME_Subject)) {
|
|
534
563
|
return { key: key.id, type: 1 };
|
|
535
564
|
}
|
|
536
|
-
if (await imodelAccess.classDerivesFrom(key.className,
|
|
565
|
+
if (await imodelAccess.classDerivesFrom(key.className, CLASS_NAME_Model)) {
|
|
537
566
|
return { key: key.id, type: 2 };
|
|
538
567
|
}
|
|
539
|
-
if (await imodelAccess.classDerivesFrom(key.className,
|
|
568
|
+
if (await imodelAccess.classDerivesFrom(key.className, CLASS_NAME_SpatialCategory)) {
|
|
540
569
|
return { key: key.id, type: 3 };
|
|
541
570
|
}
|
|
542
571
|
return { key: key.id, type: 0 };
|
|
543
572
|
}, 2), reduce((acc, value) => {
|
|
544
573
|
if (value.type === 1) {
|
|
545
|
-
acc.
|
|
574
|
+
acc.subjectIds.push(value.key);
|
|
546
575
|
return acc;
|
|
547
576
|
}
|
|
548
577
|
if (value.type === 2) {
|
|
549
|
-
acc.
|
|
578
|
+
acc.modelIds.push(value.key);
|
|
550
579
|
return acc;
|
|
551
580
|
}
|
|
552
581
|
if (value.type === 3) {
|
|
553
|
-
acc.
|
|
582
|
+
acc.categoryIds.push(value.key);
|
|
554
583
|
return acc;
|
|
555
584
|
}
|
|
556
|
-
acc.
|
|
585
|
+
acc.elementIds.push(value.key);
|
|
557
586
|
return acc;
|
|
558
587
|
}, {
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
588
|
+
modelIds: new Array(),
|
|
589
|
+
categoryIds: new Array(),
|
|
590
|
+
subjectIds: new Array(),
|
|
591
|
+
elementIds: new Array(),
|
|
563
592
|
}), switchMap(async (ids) => {
|
|
564
|
-
const elementsLength = ids.
|
|
565
|
-
return collect(merge(from(ids.
|
|
566
|
-
|
|
593
|
+
const elementsLength = ids.elementIds.length;
|
|
594
|
+
return collect(merge(from(ids.subjectIds).pipe(mergeMap((id) => idsCache.createSubjectInstanceKeysPath(id).pipe(map(HierarchyFilteringPath.normalize)))), from(ids.modelIds).pipe(mergeMap((id) => idsCache.createModelInstanceKeyPaths(id).pipe(mergeAll(), map(HierarchyFilteringPath.normalize)))), from(ids.categoryIds).pipe(mergeMap((id) => idsCache.createCategoryInstanceKeyPaths(id).pipe(mergeAll(), map(HierarchyFilteringPath.normalize)))), from(ids.elementIds).pipe(bufferCount(getOptimalBatchSize({ totalSize: elementsLength, maximumBatchSize: 5000 })), releaseMainThreadOnItemsCount(1), mergeMap((block, chunkIndex) => createGeometricElementInstanceKeyPaths({
|
|
595
|
+
imodelAccess,
|
|
596
|
+
idsCache,
|
|
597
|
+
hierarchyConfig,
|
|
598
|
+
targetItems: block,
|
|
599
|
+
componentId,
|
|
600
|
+
componentName,
|
|
601
|
+
chunkIndex,
|
|
602
|
+
}), 10))));
|
|
603
|
+
}));
|
|
567
604
|
}
|
|
568
|
-
|
|
569
|
-
const
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
ecsql
|
|
605
|
+
function createInstanceKeyPathsFromInstanceLabelObs(props) {
|
|
606
|
+
const { labelsFactory, hierarchyConfig, label, imodelAccess, limit } = props;
|
|
607
|
+
return defer(async () => {
|
|
608
|
+
const elementLabelSelectClause = await labelsFactory.createSelectClause({
|
|
609
|
+
classAlias: "e",
|
|
610
|
+
className: CLASS_NAME_Element,
|
|
611
|
+
selectorsConcatenator: ECSql.createConcatenatedValueStringSelector,
|
|
612
|
+
});
|
|
613
|
+
const ecsql = `
|
|
577
614
|
SELECT *
|
|
578
615
|
FROM (
|
|
579
616
|
SELECT
|
|
580
617
|
ec_classname(e.ECClassId, 's.c'),
|
|
581
618
|
e.ECInstanceId,
|
|
582
619
|
${elementLabelSelectClause} Label
|
|
583
|
-
FROM
|
|
584
|
-
WHERE e.ECClassId IS (
|
|
620
|
+
FROM ${CLASS_NAME_Element} e
|
|
621
|
+
WHERE e.ECClassId IS (${CLASS_NAME_Subject}, ${CLASS_NAME_SpatialCategory}, ${hierarchyConfig.elementClassSpecification})
|
|
585
622
|
|
|
586
623
|
UNION ALL
|
|
587
624
|
|
|
@@ -589,22 +626,24 @@ async function createInstanceKeyPathsFromInstanceLabel(props) {
|
|
|
589
626
|
ec_classname(m.ECClassId, 's.c'),
|
|
590
627
|
m.ECInstanceId,
|
|
591
628
|
${elementLabelSelectClause} Label
|
|
592
|
-
FROM
|
|
593
|
-
JOIN
|
|
629
|
+
FROM ${CLASS_NAME_GeometricModel3d} m
|
|
630
|
+
JOIN ${CLASS_NAME_Element} e ON e.ECInstanceId = m.ModeledElement.Id
|
|
594
631
|
WHERE NOT m.IsPrivate
|
|
595
|
-
${
|
|
632
|
+
${hierarchyConfig.showEmptyModels ? "" : `AND EXISTS (SELECT 1 FROM ${hierarchyConfig.elementClassSpecification} WHERE Model.Id = m.ECInstanceId)`}
|
|
596
633
|
AND json_extract(e.JsonProperties, '$.PhysicalPartition.Model.Content') IS NULL
|
|
597
634
|
AND json_extract(e.JsonProperties, '$.GraphicalPartition3d.Model.Content') IS NULL
|
|
598
635
|
)
|
|
599
636
|
WHERE Label LIKE '%' || ? || '%' ESCAPE '\\'
|
|
600
637
|
LIMIT ${MAX_FILTERING_INSTANCE_KEY_COUNT + 1}
|
|
601
|
-
|
|
602
|
-
bindings
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
638
|
+
`;
|
|
639
|
+
const bindings = [{ type: "string", value: label.replace(/[%_\\]/g, "\\$&") }];
|
|
640
|
+
return { ecsql, bindings };
|
|
641
|
+
}).pipe(mergeMap((queryProps) => {
|
|
642
|
+
return imodelAccess.createQueryReader(queryProps, {
|
|
643
|
+
rowFormat: "Indexes",
|
|
644
|
+
restartToken: `${props.componentName}/${props.componentId}/filter-by-label`,
|
|
645
|
+
limit,
|
|
646
|
+
});
|
|
647
|
+
}), map((row) => ({ className: row[0], id: row[1] })), toArray(), mergeMap((targetKeys) => createInstanceKeyPathsFromTargetItemsObs({ ...props, targetItems: targetKeys })));
|
|
609
648
|
}
|
|
610
649
|
//# sourceMappingURL=ModelsTreeDefinition.js.map
|