@itwin/tree-widget-react 4.0.0-alpha.1 → 4.0.0-alpha.11
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 +84 -1
- package/README.md +5 -53
- package/lib/esm/tree-widget-react/TreeWidget.d.ts +7 -2
- package/lib/esm/tree-widget-react/TreeWidget.js +22 -2
- package/lib/esm/tree-widget-react/TreeWidget.js.map +1 -1
- package/lib/esm/tree-widget-react/components/{SelectableTree.scss → TreeWidgetComponentImpl.css} +0 -1
- package/lib/esm/tree-widget-react/components/{SelectableTree.d.ts → TreeWidgetComponentImpl.d.ts} +18 -14
- package/lib/esm/tree-widget-react/components/{SelectableTree.js → TreeWidgetComponentImpl.js} +28 -28
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js.map +1 -0
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.d.ts +4 -6
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +9 -10
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/ErrorState.d.ts +4 -0
- package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js +14 -0
- package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js.map +1 -0
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.d.ts +11 -0
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js +33 -0
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js.map +1 -0
- package/lib/esm/tree-widget-react/components/tree-header/{TreeWithHeader.scss → SelectableTree.css} +9 -8
- package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.d.ts +16 -0
- package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.js +14 -0
- package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/{TreeSelector.scss → tree-header/WidgetHeader.css} +12 -5
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.d.ts +36 -0
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +31 -0
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +3 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +4 -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 -5
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +60 -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 +1 -6
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +4 -10
- 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 +39 -4
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +658 -114
- 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 +19 -6
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +83 -82
- 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 +68 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +442 -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/CategoriesTreeVisibilityHandler.d.ts +23 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js +708 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.d.ts +39 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.js +221 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.d.ts +25 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +133 -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/UseIdsCache.d.ts +8 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js +48 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.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 +14 -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 +23 -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 +38 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +353 -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 +37 -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 +23 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +52 -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/internal/ClassificationsTreeIdsCache.d.ts +38 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +269 -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 +20 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js +36 -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/ClassificationsTreeVisibilityHandler.d.ts +19 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.js +484 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseIdsCache.d.ts +8 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseIdsCache.js +45 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseIdsCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.d.ts +5 -21
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +5 -62
- 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/UseHierarchyVisibility.d.ts +4 -4
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +12 -6
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js +13 -15
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.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 +38 -23
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js +65 -47
- 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 +6 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +13 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js.map +1 -0
- 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 +21 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js +43 -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 +2 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js +5 -4
- 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 +4 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js +16 -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 -13
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +53 -36
- 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 +5 -10
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +14 -20
- 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 +2 -8
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +11 -7
- 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 -2
- 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 +2 -2
- 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 +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +13 -10
- 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 +43 -0
- package/lib/esm/tree-widget-react/components/trees/{models-tree → common}/internal/AlwaysAndNeverDrawnElementInfo.js +91 -34
- 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 +15 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js +79 -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/trees/common/internal/Types.js +6 -0
- 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/UseActiveViewport.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 +46 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +101 -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 +19 -0
- package/lib/esm/tree-widget-react/components/trees/{models-tree → common}/internal/VisibilityChangeEventListener.js +17 -9
- 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 +63 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +205 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +8 -2
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +26 -16
- 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 -5
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +2 -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.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +6 -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 +10 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +46 -31
- 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 -5
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +2 -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/imodel-content-tree/IModelContentTreeDefinition.d.ts +13 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +47 -76
- 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 +5 -5
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +29 -24
- 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 +11 -4
- package/lib/esm/tree-widget-react/components/trees/index.js +10 -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 -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 +4 -4
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +38 -30
- 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 +7 -7
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +16 -19
- 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 +10 -3
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +91 -114
- 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 +9 -3
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +70 -239
- 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/FilteredTree.d.ts +7 -9
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js +7 -9
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +10 -7
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +106 -104
- 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.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +3 -29
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +177 -333
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +27 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +170 -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/UseIdsCache.d.ts +8 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js +47 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js.map +1 -0
- package/lib/esm/tree-widget-react-internal.d.ts +11 -0
- package/lib/esm/tree-widget-react-internal.js +17 -0
- package/lib/esm/tree-widget-react-internal.js.map +1 -0
- package/lib/esm/tree-widget-react.d.ts +2 -2
- package/lib/esm/tree-widget-react.js +1 -2
- package/lib/esm/tree-widget-react.js.map +1 -1
- package/lib/public/locales/en/TreeWidget.json +36 -56
- package/package.json +75 -73
- package/lib/esm/tree-widget-react/components/SelectableTree.js.map +0 -1
- package/lib/esm/tree-widget-react/components/TreeSelector.d.ts +0 -30
- package/lib/esm/tree-widget-react/components/TreeSelector.js +0 -23
- package/lib/esm/tree-widget-react/components/TreeSelector.js.map +0 -1
- package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.d.ts +0 -32
- package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.js +0 -25
- package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.js.map +0 -1
- package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.scss +0 -56
- package/lib/esm/tree-widget-react/components/tree-header/TreeWithHeader.d.ts +0 -13
- package/lib/esm/tree-widget-react/components/tree-header/TreeWithHeader.js +0 -13
- package/lib/esm/tree-widget-react/components/tree-header/TreeWithHeader.js.map +0 -1
- 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.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/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.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.map +0 -1
- /package/lib/esm/tree-widget-react/components/{TreeWidgetUiItemsProvider.scss → TreeWidgetUiItemsProvider.css} +0 -0
- /package/lib/esm/tree-widget-react/components/trees/common/components/{ProgressOverlay.scss → ProgressOverlay.css} +0 -0
- /package/lib/esm/tree-widget-react/components/trees/common/{UseActiveViewport.d.ts → internal/UseActiveViewport.d.ts} +0 -0
- /package/lib/esm/tree-widget-react/components/trees/common/{UseActiveViewport.js → internal/UseActiveViewport.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,92 @@
|
|
|
1
1
|
# Change Log - @itwin/tree-widget-react
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Thu, 15 May 2025 05:33:32 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 3.8.0
|
|
8
|
+
|
|
9
|
+
Thu, 15 May 2025 05:33:32 GMT
|
|
10
|
+
|
|
11
|
+
### Minor changes
|
|
12
|
+
|
|
13
|
+
- Fixed merged (categories and models) nodes visibility. Changed `@beta` APIs in a **breaking** way: `ModelsTreeVisibilityHandlerOverrides.getModelDisplayStatus` and `ModelsTreeVisibilityHandlerOverrides.getCategoryDisplayStatus` - `id` and `categoryId` props are now of `Id64Arg` type instead of `Id64String`. Use `Id64` from `@itwin/core-bentley` to access individual IDs. ([#1311](https://github.com/iTwin/viewer-components-react/pull/1311))
|
|
14
|
+
|
|
15
|
+
### Patches
|
|
16
|
+
|
|
17
|
+
- update presentation deps to versions that properly support core @ 5.0-rc ([#1304](https://github.com/iTwin/viewer-components-react/pull/1304))
|
|
18
|
+
|
|
19
|
+
## 3.7.0
|
|
20
|
+
|
|
21
|
+
Mon, 28 Apr 2025 16:18:43 GMT
|
|
22
|
+
|
|
23
|
+
### Minor changes
|
|
24
|
+
|
|
25
|
+
- Added ability to disabled hierarchy level filtering in `ModelsTree`. ([#1297](https://github.com/iTwin/viewer-components-react/pull/1297))
|
|
26
|
+
|
|
27
|
+
## 3.6.1
|
|
28
|
+
|
|
29
|
+
Fri, 18 Apr 2025 17:06:22 GMT
|
|
30
|
+
|
|
31
|
+
### Patches
|
|
32
|
+
|
|
33
|
+
- Fixed Categories tree not reacting to Category display changes from Models tree, when they're made on per-model category overrides. ([#1284](https://github.com/iTwin/viewer-components-react/pull/1284))
|
|
34
|
+
- Fixed `ModelsTree` and `CategoriesTree` not applying custom hierarchy level size limit. ([#1292](https://github.com/iTwin/viewer-components-react/pull/1292))
|
|
35
|
+
|
|
36
|
+
## 3.6.0
|
|
37
|
+
|
|
38
|
+
Fri, 21 Mar 2025 11:37:20 GMT
|
|
39
|
+
|
|
40
|
+
### Minor changes
|
|
41
|
+
|
|
42
|
+
- Add ability to remove root Subject node from Models and iModel content trees by setting `hideRootSubject: true` in the `hierarchyConfig` prop. ([#1251](https://github.com/iTwin/viewer-components-react/pull/1251))
|
|
43
|
+
|
|
44
|
+
### Patches
|
|
45
|
+
|
|
46
|
+
- Fixed Models tree showing that modeled elements have children, when their sub model is private or when sub model does not have any elements. Now it shows that modeled element has children only when it's sub model has children and is not private. ([#1253](https://github.com/iTwin/viewer-components-react/pull/1253))
|
|
47
|
+
- Fixed Categories tree showing definition containers that contain categories without elements. Now it displays definition containers only when they have categories that contain elements. ([#1248](https://github.com/iTwin/viewer-components-react/pull/1248))
|
|
48
|
+
|
|
49
|
+
## 3.5.1
|
|
50
|
+
|
|
51
|
+
Thu, 06 Mar 2025 12:37:44 GMT
|
|
52
|
+
|
|
53
|
+
### Patches
|
|
54
|
+
|
|
55
|
+
- Update import to use `@itwin/core-bentley` for types that are reexported by `@itwin/core-common` ([#1232](https://github.com/iTwin/viewer-components-react/pull/1232))
|
|
56
|
+
|
|
57
|
+
## 3.5.0
|
|
58
|
+
|
|
59
|
+
Wed, 19 Feb 2025 21:08:10 GMT
|
|
60
|
+
|
|
61
|
+
### Minor changes
|
|
62
|
+
|
|
63
|
+
- `CategoriesTree` component rendered `Categories` as a flat list, where each `Category` had zero or more child `SubCategories`. Some iTwin.js applications started to group `Categories` under `DefinitionContainers` and wanted to see them displayed in `CategoriesTree` component. Added `DefinitionContainers` to `CategoriesTree` component. This change doesn't affect applications that don't have `DefinitionContainers`. ([#1172](https://github.com/iTwin/viewer-components-react/pull/1172))
|
|
64
|
+
|
|
65
|
+
## 3.4.2
|
|
66
|
+
|
|
67
|
+
Fri, 14 Feb 2025 15:54:49 GMT
|
|
68
|
+
|
|
69
|
+
### Patches
|
|
70
|
+
|
|
71
|
+
- Adjusted modeled element / sub-model visibility controls. Now, if visibility of modeled element is changed, visibility of sub-model is adjusted accordingly and vice versa. ([#1183](https://github.com/iTwin/viewer-components-react/pull/1183))
|
|
72
|
+
|
|
73
|
+
## 3.4.1
|
|
74
|
+
|
|
75
|
+
Thu, 06 Feb 2025 13:36:20 GMT
|
|
76
|
+
|
|
77
|
+
### Patches
|
|
78
|
+
|
|
79
|
+
- Removed horizontal scroll from trees. ([#1180](https://github.com/iTwin/viewer-components-react/pull/1180))
|
|
80
|
+
|
|
81
|
+
## 3.4.0
|
|
82
|
+
|
|
83
|
+
Tue, 04 Feb 2025 15:29:52 GMT
|
|
84
|
+
|
|
85
|
+
### Minor changes
|
|
86
|
+
|
|
87
|
+
- Expose `FocusedInstancesContextProvider` and `useFocusedInstancesContext` to allow using `ModelsTreeComponent.ToggleInstancesFocusButton` from outside of `ModelsTreeComponent` and accesing the context from other React components. ([#1175](https://github.com/iTwin/viewer-components-react/pull/1175))
|
|
88
|
+
- Add `filterButtonsVisibility` prop to `TreeRenderer`. The prop allows to control visibility of hierarchy level filtering buttons in the tree: `show-on-hover` (default) shows them on hover or focus, `hide` only shows them when a node is filtered. ([#1178](https://github.com/iTwin/viewer-components-react/pull/1178))
|
|
89
|
+
|
|
7
90
|
## 3.3.0
|
|
8
91
|
|
|
9
92
|
Mon, 27 Jan 2025 18:30:40 GMT
|
package/README.md
CHANGED
|
@@ -69,8 +69,6 @@ UiItemsManager.register({
|
|
|
69
69
|
getLabel: () => ModelsTreeComponent.getLabel(),
|
|
70
70
|
render: (props) => (
|
|
71
71
|
<ModelsTreeComponent
|
|
72
|
-
// see "Creating schema context" section for example implementation
|
|
73
|
-
getSchemaContext={getSchemaContext}
|
|
74
72
|
// see "Creating unified selection storage" section for example implementation
|
|
75
73
|
selectionStorage={unifiedSelectionStorage}
|
|
76
74
|
/>
|
|
@@ -106,8 +104,6 @@ import { ModelsTreeComponent } from "@itwin/tree-widget-react";
|
|
|
106
104
|
function MyWidget() {
|
|
107
105
|
return (
|
|
108
106
|
<ModelsTreeComponent
|
|
109
|
-
// see "Creating schema context" section for example implementation
|
|
110
|
-
getSchemaContext={getSchemaContext}
|
|
111
107
|
// see "Creating unified selection storage" section for example implementation
|
|
112
108
|
selectionStorage={unifiedSelectionStorage}
|
|
113
109
|
headerButtons={[
|
|
@@ -144,10 +140,10 @@ This package provides building blocks for custom models tree:
|
|
|
144
140
|
Example:
|
|
145
141
|
|
|
146
142
|
```tsx
|
|
143
|
+
import { useCallback } from "react";
|
|
147
144
|
import { TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react";
|
|
148
145
|
import type { SelectionStorage } from "@itwin/unified-selection";
|
|
149
146
|
import type { IModelConnection, Viewport } from "@itwin/core-frontend";
|
|
150
|
-
import type { SchemaContext } from "@itwin/ecschema-metadata";
|
|
151
147
|
import type { ComponentPropsWithoutRef } from "react";
|
|
152
148
|
|
|
153
149
|
type VisibilityTreeRendererProps = ComponentPropsWithoutRef<typeof VisibilityTreeRenderer>;
|
|
@@ -161,17 +157,17 @@ function CustomModelsTreeRenderer(props: CustomModelsTreeRendererProps) {
|
|
|
161
157
|
},
|
|
162
158
|
[getLabel],
|
|
163
159
|
);
|
|
164
|
-
|
|
160
|
+
const getSublabelCallback = useCallback<Required<VisibilityTreeRendererProps>["getSublabel"]>((node) => <>Sublabel - {node.label}</>, []);
|
|
161
|
+
return <VisibilityTreeRenderer {...props} getLabel={getLabelCallback} getSublabel={getSublabelCallback} />;
|
|
165
162
|
}
|
|
166
163
|
|
|
167
164
|
interface CustomModelsTreeProps {
|
|
168
165
|
imodel: IModelConnection;
|
|
169
166
|
viewport: Viewport;
|
|
170
|
-
getSchemaContext: (imodel: IModelConnection) => SchemaContext;
|
|
171
167
|
selectionStorage: SelectionStorage;
|
|
172
168
|
}
|
|
173
169
|
|
|
174
|
-
function CustomModelsTreeComponent({ imodel, viewport,
|
|
170
|
+
function CustomModelsTreeComponent({ imodel, viewport, selectionStorage }: CustomModelsTreeProps) {
|
|
175
171
|
const { buttonProps } = useModelsTreeButtonProps({ imodel, viewport });
|
|
176
172
|
const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport });
|
|
177
173
|
|
|
@@ -184,7 +180,6 @@ function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selecti
|
|
|
184
180
|
>
|
|
185
181
|
<VisibilityTree
|
|
186
182
|
{...modelsTreeProps}
|
|
187
|
-
getSchemaContext={getSchemaContext}
|
|
188
183
|
selectionStorage={selectionStorage}
|
|
189
184
|
imodel={imodel}
|
|
190
185
|
treeRenderer={(props) => <CustomModelsTreeRenderer {...props} {...rendererProps} />}
|
|
@@ -224,7 +219,6 @@ function CustomModelsTreeComponent({ viewport, selectionStorage, imodel, targetI
|
|
|
224
219
|
return (
|
|
225
220
|
<VisibilityTree
|
|
226
221
|
{...modelsTreeProps}
|
|
227
|
-
getSchemaContext={getSchemaContext}
|
|
228
222
|
selectionStorage={selectionStorage}
|
|
229
223
|
imodel={imodel}
|
|
230
224
|
treeRenderer={(props) => <VisibilityTreeRenderer {...props} {...rendererProps} />}
|
|
@@ -247,8 +241,6 @@ import { CategoriesTreeComponent } from "@itwin/tree-widget-react";
|
|
|
247
241
|
function MyWidget() {
|
|
248
242
|
return (
|
|
249
243
|
<CategoriesTreeComponent
|
|
250
|
-
// see "Creating schema context" section for example implementation
|
|
251
|
-
getSchemaContext={getSchemaContext}
|
|
252
244
|
// see "Creating unified selection storage" section for example implementation
|
|
253
245
|
selectionStorage={unifiedSelectionStorage}
|
|
254
246
|
headerButtons={[(props) => <CategoriesTreeComponent.ShowAllButton {...props} />, (props) => <CategoriesTreeComponent.HideAllButton {...props} />]}
|
|
@@ -276,7 +268,6 @@ Example:
|
|
|
276
268
|
import { TreeWithHeader, useCategoriesTree, useCategoriesTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react";
|
|
277
269
|
import type { IModelConnection, Viewport } from "@itwin/core-frontend";
|
|
278
270
|
import type { SelectionStorage } from "@itwin/unified-selection";
|
|
279
|
-
import type { SchemaContext } from "@itwin/ecschema-metadata";
|
|
280
271
|
import type { ComponentPropsWithoutRef } from "react";
|
|
281
272
|
|
|
282
273
|
type VisibilityTreeRendererProps = ComponentPropsWithoutRef<typeof VisibilityTreeRenderer>;
|
|
@@ -291,25 +282,21 @@ function CustomCategoriesTreeRenderer(props: CustomCategoriesTreeRendererProps)
|
|
|
291
282
|
},
|
|
292
283
|
[getLabel],
|
|
293
284
|
);
|
|
294
|
-
|
|
295
285
|
const getSublabel = useCallback<Required<VisibilityTreeRendererProps>["getSublabel"]>(() => {
|
|
296
286
|
return <>Custom sub label</>;
|
|
297
287
|
}, []);
|
|
298
|
-
|
|
299
288
|
return <VisibilityTreeRenderer {...props} getLabel={getLabelCallback} getSublabel={getSublabel} />;
|
|
300
289
|
}
|
|
301
290
|
|
|
302
291
|
interface CustomCategoriesTreeProps {
|
|
303
292
|
imodel: IModelConnection;
|
|
304
293
|
viewport: Viewport;
|
|
305
|
-
getSchemaContext: (imodel: IModelConnection) => SchemaContext;
|
|
306
294
|
selectionStorage: SelectionStorage;
|
|
307
295
|
}
|
|
308
296
|
|
|
309
|
-
function CustomCategoriesTreeComponent({ imodel, viewport,
|
|
297
|
+
function CustomCategoriesTreeComponent({ imodel, viewport, selectionStorage }: CustomCategoriesTreeProps) {
|
|
310
298
|
const { buttonProps } = useCategoriesTreeButtonProps({ viewport });
|
|
311
299
|
const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" });
|
|
312
|
-
|
|
313
300
|
return (
|
|
314
301
|
<TreeWithHeader
|
|
315
302
|
buttons={[
|
|
@@ -319,7 +306,6 @@ function CustomCategoriesTreeComponent({ imodel, viewport, getSchemaContext, sel
|
|
|
319
306
|
>
|
|
320
307
|
<VisibilityTree
|
|
321
308
|
{...categoriesTreeProps}
|
|
322
|
-
getSchemaContext={getSchemaContext}
|
|
323
309
|
selectionStorage={selectionStorage}
|
|
324
310
|
imodel={imodel}
|
|
325
311
|
treeRenderer={(props) => <CustomCategoriesTreeRenderer {...props} {...rendererProps} />}
|
|
@@ -350,8 +336,6 @@ import { IModelContentTreeComponent } from "@itwin/tree-widget-react";
|
|
|
350
336
|
function MyWidget() {
|
|
351
337
|
return (
|
|
352
338
|
<IModelContentTreeComponent
|
|
353
|
-
// see "Creating schema context" section for example implementation
|
|
354
|
-
getSchemaContext={getSchemaContext}
|
|
355
339
|
// see "Creating unified selection storage" section for example implementation
|
|
356
340
|
selectionStorage={unifiedSelectionStorage}
|
|
357
341
|
/>
|
|
@@ -422,7 +406,6 @@ function MyTree({ imodel }: MyTreeProps) {
|
|
|
422
406
|
treeName="MyTree"
|
|
423
407
|
imodel={imodel}
|
|
424
408
|
selectionStorage={unifiedSelectionStorage}
|
|
425
|
-
getSchemaContext={getSchemaContext}
|
|
426
409
|
getHierarchyDefinition={getHierarchyDefinition}
|
|
427
410
|
treeRenderer={(props) => <TreeRenderer {...props} />}
|
|
428
411
|
/>
|
|
@@ -507,7 +490,6 @@ function MyVisibilityTree({ imodel }: MyVisibilityTreeProps) {
|
|
|
507
490
|
treeName="MyVisibilityTree"
|
|
508
491
|
imodel={imodel}
|
|
509
492
|
selectionStorage={unifiedSelectionStorage}
|
|
510
|
-
getSchemaContext={getSchemaContext}
|
|
511
493
|
getHierarchyDefinition={getHierarchyDefinition}
|
|
512
494
|
visibilityHandlerFactory={visibilityHandlerFactory}
|
|
513
495
|
treeRenderer={(props) => <VisibilityTreeRenderer {...props} />}
|
|
@@ -561,34 +543,6 @@ import { Presentation } from "@itwin/presentation-frontend";
|
|
|
561
543
|
await Presentation.initialize({ selection: { selectionStorage: getUnifiedSelectionStorage() } });
|
|
562
544
|
```
|
|
563
545
|
|
|
564
|
-
### Creating schema context
|
|
565
|
-
|
|
566
|
-
All tree components delivered with the package require a [`SchemaContext`](https://www.itwinjs.org/reference/ecschema-metadata/context/schemacontext/) to be able to access iModels metadata.
|
|
567
|
-
|
|
568
|
-
Typically, we want one schema context per iModel per application - this allows schema information to be shared across components, saving memory and time required to access the metadata. Below is an example implementation of `getSchemaContext` function, required by tree components:
|
|
569
|
-
|
|
570
|
-
```tsx
|
|
571
|
-
import { SchemaContext } from "@itwin/ecschema-metadata";
|
|
572
|
-
import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common";
|
|
573
|
-
import type { IModelConnection } from "@itwin/core-frontend";
|
|
574
|
-
|
|
575
|
-
const schemaContextCache = new Map<string, SchemaContext>();
|
|
576
|
-
function getSchemaContext(imodel: IModelConnection) {
|
|
577
|
-
const key = imodel.getRpcProps().key;
|
|
578
|
-
let schemaContext = schemaContextCache.get(key);
|
|
579
|
-
if (!schemaContext) {
|
|
580
|
-
const schemaLocater = new ECSchemaRpcLocater(imodel.getRpcProps());
|
|
581
|
-
schemaContext = new SchemaContext();
|
|
582
|
-
schemaContext.addLocater(schemaLocater);
|
|
583
|
-
schemaContextCache.set(key, schemaContext);
|
|
584
|
-
imodel.onClose.addOnce(() => schemaContextCache.delete(key));
|
|
585
|
-
}
|
|
586
|
-
return schemaContext;
|
|
587
|
-
}
|
|
588
|
-
```
|
|
589
|
-
|
|
590
|
-
Note: Using `ECSchemaRpcLocater` requires the application to support [ECSchemaRpcInterface](https://github.com/iTwin/itwinjs-core/blob/111ab9053f4718896de17bdaeb8de037bad281bd/core/ecschema-rpc/common/src/ECSchemaRpcInterface.ts#L14). This means [registering the interface](https://www.itwinjs.org/learning/rpcinterface/#configure-interfaces) and, on the backend, [registering the implementation](https://www.itwinjs.org/learning/rpcinterface/#server-side-configuration) by calling [ECSchemaRpcImpl.register()](https://github.com/iTwin/itwinjs-core/blob/111ab9053f4718896de17bdaeb8de037bad281bd/core/ecschema-rpc/impl/src/ECSchemaRpcImpl.ts#L29).
|
|
591
|
-
|
|
592
546
|
## Telemetry
|
|
593
547
|
|
|
594
548
|
### Performance tracking
|
|
@@ -646,7 +600,6 @@ function MyWidget() {
|
|
|
646
600
|
onFeatureUsed={(feature) => {
|
|
647
601
|
console.log(`TreeWidget [${feature}] used`);
|
|
648
602
|
}}
|
|
649
|
-
getSchemaContext={getSchemaContext}
|
|
650
603
|
selectionStorage={unifiedSelectionStorage}
|
|
651
604
|
/>
|
|
652
605
|
);
|
|
@@ -680,7 +633,6 @@ function MyTree() {
|
|
|
680
633
|
// VisibilityTree will use provided telemetry context to report used features and their performance
|
|
681
634
|
<VisibilityTree
|
|
682
635
|
{...categoriesTreeProps}
|
|
683
|
-
getSchemaContext={getSchemaContext}
|
|
684
636
|
selectionStorage={unifiedSelectionStorage}
|
|
685
637
|
imodel={imodel}
|
|
686
638
|
treeRenderer={(props) => <VisibilityTreeRenderer {...props} {...rendererProps} />}
|
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
import type { Localization, TranslationOptions } from "@itwin/core-common";
|
|
2
|
+
import type { ILogger } from "@itwin/presentation-shared";
|
|
2
3
|
/**
|
|
3
4
|
* Entry point for static initialization required by various components used in the package.
|
|
4
5
|
* @public
|
|
5
6
|
*/
|
|
6
7
|
export declare class TreeWidget {
|
|
7
8
|
private static _i18n?;
|
|
9
|
+
private static _logger?;
|
|
8
10
|
private static _initialized?;
|
|
9
11
|
/**
|
|
10
12
|
* Called by IModelApp to initialize the Tree Widget
|
|
11
13
|
* @param i18n - The internationalization service created by the IModelApp.
|
|
14
|
+
* @param logger - The logger to use for logging messages. Defaults to `Logger` from `@itwin/core-bentley`.
|
|
12
15
|
*/
|
|
13
|
-
static initialize(i18n?: Localization): Promise<void>;
|
|
16
|
+
static initialize(i18n?: Localization, logger?: ILogger): Promise<void>;
|
|
14
17
|
/** Unregisters the TreeWidget internationalization service namespace */
|
|
15
18
|
static terminate(): void;
|
|
19
|
+
/** The logger used by this components in this package. */
|
|
20
|
+
static get logger(): ILogger;
|
|
16
21
|
/** The internationalization service created by the IModelApp. */
|
|
17
22
|
static get i18n(): Localization;
|
|
18
23
|
/** The internationalization service namespace. */
|
|
19
24
|
static get i18nNamespace(): string;
|
|
20
25
|
/** Calls i18n.translateWithNamespace with the "TreeWidget" namespace. Do NOT include the namespace in the key.
|
|
21
26
|
*/
|
|
22
|
-
static translate(key: string
|
|
27
|
+
static translate(key: string, options?: TranslationOptions): string;
|
|
23
28
|
}
|
|
24
29
|
//# sourceMappingURL=TreeWidget.d.ts.map
|
|
@@ -2,22 +2,32 @@
|
|
|
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 { BentleyError, BentleyStatus } from "@itwin/core-
|
|
5
|
+
import { BentleyError, BentleyStatus, Logger } from "@itwin/core-bentley";
|
|
6
6
|
import { IModelApp } from "@itwin/core-frontend";
|
|
7
|
+
import { createLogger } from "@itwin/presentation-core-interop";
|
|
8
|
+
import { setLogger as setHierarchiesLogger } from "@itwin/presentation-hierarchies";
|
|
9
|
+
import { setLogger as setHierarchiesReactLogger } from "@itwin/presentation-hierarchies-react";
|
|
7
10
|
/**
|
|
8
11
|
* Entry point for static initialization required by various components used in the package.
|
|
9
12
|
* @public
|
|
10
13
|
*/
|
|
11
14
|
export class TreeWidget {
|
|
15
|
+
static _i18n;
|
|
16
|
+
static _logger;
|
|
17
|
+
static _initialized;
|
|
12
18
|
/**
|
|
13
19
|
* Called by IModelApp to initialize the Tree Widget
|
|
14
20
|
* @param i18n - The internationalization service created by the IModelApp.
|
|
21
|
+
* @param logger - The logger to use for logging messages. Defaults to `Logger` from `@itwin/core-bentley`.
|
|
15
22
|
*/
|
|
16
|
-
static async initialize(i18n) {
|
|
23
|
+
static async initialize(i18n, logger) {
|
|
17
24
|
if (this._initialized) {
|
|
18
25
|
return;
|
|
19
26
|
}
|
|
20
27
|
TreeWidget._initialized = true;
|
|
28
|
+
TreeWidget._logger = logger ?? createLogger(Logger);
|
|
29
|
+
setHierarchiesLogger(TreeWidget._logger);
|
|
30
|
+
setHierarchiesReactLogger(TreeWidget._logger);
|
|
21
31
|
TreeWidget._i18n = i18n ?? IModelApp.localization;
|
|
22
32
|
return TreeWidget._i18n.registerNamespace(TreeWidget.i18nNamespace);
|
|
23
33
|
}
|
|
@@ -27,8 +37,18 @@ export class TreeWidget {
|
|
|
27
37
|
TreeWidget._i18n.unregisterNamespace(TreeWidget.i18nNamespace);
|
|
28
38
|
TreeWidget._i18n = undefined;
|
|
29
39
|
}
|
|
40
|
+
TreeWidget._logger = undefined;
|
|
41
|
+
setHierarchiesLogger(undefined);
|
|
42
|
+
setHierarchiesReactLogger(undefined);
|
|
30
43
|
TreeWidget._initialized = false;
|
|
31
44
|
}
|
|
45
|
+
/** The logger used by this components in this package. */
|
|
46
|
+
static get logger() {
|
|
47
|
+
if (!TreeWidget._logger) {
|
|
48
|
+
throw new BentleyError(BentleyStatus.ERROR, "TreeWidget not initialized");
|
|
49
|
+
}
|
|
50
|
+
return TreeWidget._logger;
|
|
51
|
+
}
|
|
32
52
|
/** The internationalization service created by the IModelApp. */
|
|
33
53
|
static get i18n() {
|
|
34
54
|
if (!TreeWidget._i18n) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeWidget.js","sourceRoot":"","sources":["../../../src/tree-widget-react/TreeWidget.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"TreeWidget.js","sourceRoot":"","sources":["../../../src/tree-widget-react/TreeWidget.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,SAAS,IAAI,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,SAAS,IAAI,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAK/F;;;GAGG;AACH,MAAM,OAAO,UAAU;IACb,MAAM,CAAC,KAAK,CAAgB;IAC5B,MAAM,CAAC,OAAO,CAAW;IACzB,MAAM,CAAC,YAAY,CAAW;IAEtC;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAmB,EAAE,MAAgB;QAClE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;QAE/B,UAAU,CAAC,OAAO,GAAG,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACpD,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE9C,UAAU,CAAC,KAAK,GAAG,IAAI,IAAI,SAAS,CAAC,YAAY,CAAC;QAClD,OAAO,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,SAAS;QACrB,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC/D,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAC/B,CAAC;QAED,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;QAC/B,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAChC,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAErC,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC;IAClC,CAAC;IAED,0DAA0D;IACnD,MAAM,KAAK,MAAM;QACtB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,iEAAiE;IAC1D,MAAM,KAAK,IAAI;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,aAAa;QAC7B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;OACG;IACI,MAAM,CAAC,SAAS,CAAC,GAAW,EAAE,OAA4B;QAC/D,MAAM,SAAS,GAAG,GAAG,UAAU,CAAC,aAAa,IAAI,GAAG,EAAE,CAAC;QACvD,OAAO,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CACF","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 { BentleyError, BentleyStatus, Logger } from \"@itwin/core-bentley\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { createLogger } from \"@itwin/presentation-core-interop\";\nimport { setLogger as setHierarchiesLogger } from \"@itwin/presentation-hierarchies\";\nimport { setLogger as setHierarchiesReactLogger } from \"@itwin/presentation-hierarchies-react\";\n\nimport type { Localization, TranslationOptions } from \"@itwin/core-common\";\nimport type { ILogger } from \"@itwin/presentation-shared\";\n\n/**\n * Entry point for static initialization required by various components used in the package.\n * @public\n */\nexport class TreeWidget {\n private static _i18n?: Localization;\n private static _logger?: ILogger;\n private static _initialized?: boolean;\n\n /**\n * Called by IModelApp to initialize the Tree Widget\n * @param i18n - The internationalization service created by the IModelApp.\n * @param logger - The logger to use for logging messages. Defaults to `Logger` from `@itwin/core-bentley`.\n */\n public static async initialize(i18n?: Localization, logger?: ILogger): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n TreeWidget._initialized = true;\n\n TreeWidget._logger = logger ?? createLogger(Logger);\n setHierarchiesLogger(TreeWidget._logger);\n setHierarchiesReactLogger(TreeWidget._logger);\n\n TreeWidget._i18n = i18n ?? IModelApp.localization;\n return TreeWidget._i18n.registerNamespace(TreeWidget.i18nNamespace);\n }\n\n /** Unregisters the TreeWidget internationalization service namespace */\n public static terminate() {\n if (TreeWidget._i18n) {\n TreeWidget._i18n.unregisterNamespace(TreeWidget.i18nNamespace);\n TreeWidget._i18n = undefined;\n }\n\n TreeWidget._logger = undefined;\n setHierarchiesLogger(undefined);\n setHierarchiesReactLogger(undefined);\n\n TreeWidget._initialized = false;\n }\n\n /** The logger used by this components in this package. */\n public static get logger(): ILogger {\n if (!TreeWidget._logger) {\n throw new BentleyError(BentleyStatus.ERROR, \"TreeWidget not initialized\");\n }\n return TreeWidget._logger;\n }\n\n /** The internationalization service created by the IModelApp. */\n public static get i18n(): Localization {\n if (!TreeWidget._i18n) {\n throw new BentleyError(BentleyStatus.ERROR, \"TreeWidget not initialized\");\n }\n return TreeWidget._i18n;\n }\n\n /** The internationalization service namespace. */\n public static get i18nNamespace(): string {\n return \"TreeWidget\";\n }\n\n /** Calls i18n.translateWithNamespace with the \"TreeWidget\" namespace. Do NOT include the namespace in the key.\n */\n public static translate(key: string, options?: TranslationOptions): string {\n const stringKey = `${TreeWidget.i18nNamespace}:${key}`;\n return TreeWidget.i18n.getLocalizedString(stringKey, options);\n }\n}\n"]}
|
package/lib/esm/tree-widget-react/components/{SelectableTree.d.ts → TreeWidgetComponentImpl.d.ts}
RENAMED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
import "./SelectableTree.scss";
|
|
1
|
+
import "./TreeWidgetComponentImpl.css";
|
|
3
2
|
import type { IModelConnection } from "@itwin/core-frontend";
|
|
4
3
|
/**
|
|
5
4
|
* Props for rendering trees
|
|
6
5
|
* @public
|
|
7
6
|
*/
|
|
8
|
-
export interface
|
|
9
|
-
|
|
7
|
+
export interface TreeRenderProps {
|
|
8
|
+
filter?: string;
|
|
10
9
|
onPerformanceMeasured?: (featureId: string, elapsedTime: number) => void;
|
|
11
10
|
onFeatureUsed?: (feature: string) => void;
|
|
12
11
|
}
|
|
@@ -14,34 +13,39 @@ export interface SelectableTreeRenderProps {
|
|
|
14
13
|
* Definition of a tree component displayed in `SelectableTree`.
|
|
15
14
|
* @public
|
|
16
15
|
*/
|
|
17
|
-
export interface
|
|
16
|
+
export interface TreeDefinition {
|
|
18
17
|
/** Id of the tree */
|
|
19
18
|
id: string;
|
|
20
19
|
/** Callback that is used to get tree label */
|
|
21
20
|
getLabel: () => string;
|
|
22
21
|
/** Callback that is used to render tree component */
|
|
23
|
-
render: (props:
|
|
22
|
+
render: (props: TreeRenderProps) => React.ReactNode;
|
|
24
23
|
/**
|
|
25
24
|
* Callback that is used to determine if tree should be shown for current active iModel connection.
|
|
26
25
|
* If callback is `undefined` tree is shown for all iModel connections.
|
|
27
26
|
*/
|
|
28
27
|
shouldShow?: (imodel: IModelConnection) => Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Flag to determine if search box should be rendered.
|
|
30
|
+
* - false or undefined, the search box will not be rendered.
|
|
31
|
+
* - true, the search box will be rendered.
|
|
32
|
+
*/
|
|
33
|
+
isSearchable?: boolean;
|
|
29
34
|
/** Icon to render before tree label in tree selector */
|
|
30
35
|
startIcon?: React.ReactNode;
|
|
31
36
|
}
|
|
32
37
|
/**
|
|
33
|
-
* Props for `
|
|
34
|
-
* @
|
|
38
|
+
* Props for `TreeWidgetComponent`
|
|
39
|
+
* @internal
|
|
35
40
|
*/
|
|
36
|
-
export interface
|
|
37
|
-
trees:
|
|
38
|
-
density?: "enlarged" | "default";
|
|
41
|
+
export interface TreeWidgetComponentImplProps {
|
|
42
|
+
trees: TreeDefinition[];
|
|
39
43
|
onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;
|
|
40
44
|
onFeatureUsed?: (feature: string) => void;
|
|
41
45
|
}
|
|
42
46
|
/**
|
|
43
47
|
* A component that renders a tree (combo box) selector and the selected tree component.
|
|
44
|
-
* @
|
|
48
|
+
* @internal
|
|
45
49
|
*/
|
|
46
|
-
export declare function
|
|
47
|
-
//# sourceMappingURL=
|
|
50
|
+
export declare function TreeWidgetComponentImpl(props: TreeWidgetComponentImplProps): import("react/jsx-runtime").JSX.Element | null;
|
|
51
|
+
//# sourceMappingURL=TreeWidgetComponentImpl.d.ts.map
|
package/lib/esm/tree-widget-react/components/{SelectableTree.js → TreeWidgetComponentImpl.js}
RENAMED
|
@@ -1,29 +1,38 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/*---------------------------------------------------------------------------------------------
|
|
3
3
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
4
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
import "./
|
|
7
|
-
import { useEffect, useState } from "react";
|
|
6
|
+
import "./TreeWidgetComponentImpl.css";
|
|
7
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
8
8
|
import { useActiveIModelConnection } from "@itwin/appui-react";
|
|
9
|
-
import {
|
|
9
|
+
import { Skeleton } from "@stratakit/bricks";
|
|
10
10
|
import { TreeWidget } from "../TreeWidget.js";
|
|
11
|
-
import {
|
|
11
|
+
import { SelectableTree } from "./tree-header/SelectableTree.js";
|
|
12
|
+
import { WidgetHeader } from "./tree-header/WidgetHeader.js";
|
|
13
|
+
import { SkeletonTree } from "./trees/common/components/SkeletonTree.js";
|
|
12
14
|
/**
|
|
13
15
|
* A component that renders a tree (combo box) selector and the selected tree component.
|
|
14
|
-
* @
|
|
16
|
+
* @internal
|
|
15
17
|
*/
|
|
16
|
-
export function
|
|
18
|
+
export function TreeWidgetComponentImpl(props) {
|
|
17
19
|
const imodel = useActiveIModelConnection();
|
|
18
20
|
if (!imodel) {
|
|
19
21
|
return null;
|
|
20
22
|
}
|
|
21
23
|
return _jsx(SelectableTreeContent, { ...props, imodel: imodel });
|
|
22
24
|
}
|
|
23
|
-
function SelectableTreeContent(
|
|
24
|
-
const
|
|
25
|
-
const trees =
|
|
26
|
-
|
|
25
|
+
function SelectableTreeContent({ onPerformanceMeasured, onFeatureUsed, trees: treeDefinitions, imodel, }) {
|
|
26
|
+
const activeTrees = useActiveTrees(treeDefinitions, imodel);
|
|
27
|
+
const { trees, defaultSelectedContentId } = useMemo(() => getWidgetWithHeaderProps(activeTrees), [activeTrees]);
|
|
28
|
+
const [searchValue, setSearchValue] = useState(undefined);
|
|
29
|
+
const [selectedContentId, setSelectedContentId] = useState(defaultSelectedContentId);
|
|
30
|
+
const selectedContent = useMemo(() => trees.find((c) => c.id === selectedContentId) ?? trees[0], [selectedContentId, trees]);
|
|
31
|
+
const onSelect = useCallback((treeId) => {
|
|
32
|
+
onFeatureUsed?.(`choose-${treeId}`);
|
|
33
|
+
setSelectedContentId(treeId);
|
|
34
|
+
}, [onFeatureUsed]);
|
|
35
|
+
return (_jsx("div", { className: "tree-widget-selectable-tree", children: _jsxs("div", { className: "tw-content", children: [_jsx(WidgetHeader, { trees: trees, defaultSelectedContentId: defaultSelectedContentId, onSearch: setSearchValue, onSelect: onSelect, isLoading: selectedContent.id === "loading" }), _jsx("div", { className: "tw-content-wrapper", children: selectedContent?.render({ onPerformanceMeasured, onFeatureUsed, filter: searchValue }) })] }) }));
|
|
27
36
|
}
|
|
28
37
|
function useActiveTrees(treeDefinitions, imodel) {
|
|
29
38
|
const [trees, setTrees] = useState();
|
|
@@ -48,6 +57,7 @@ async function getActiveTrees(treeDefinitions, imodel) {
|
|
|
48
57
|
}
|
|
49
58
|
return {
|
|
50
59
|
id: treeDef.id,
|
|
60
|
+
isSearchable: treeDef.isSearchable,
|
|
51
61
|
label: treeDef.getLabel(),
|
|
52
62
|
render: treeDef.render,
|
|
53
63
|
startIcon: treeDef.startIcon,
|
|
@@ -55,7 +65,7 @@ async function getActiveTrees(treeDefinitions, imodel) {
|
|
|
55
65
|
};
|
|
56
66
|
return (await Promise.all(treeDefinitions.map(handleDefinition))).filter((tree) => tree !== undefined);
|
|
57
67
|
}
|
|
58
|
-
function
|
|
68
|
+
function getWidgetWithHeaderProps(trees) {
|
|
59
69
|
if (trees === undefined) {
|
|
60
70
|
return {
|
|
61
71
|
defaultSelectedContentId: "loading",
|
|
@@ -63,7 +73,8 @@ function getTreeSelectorProps(trees) {
|
|
|
63
73
|
{
|
|
64
74
|
id: "loading",
|
|
65
75
|
label: "",
|
|
66
|
-
|
|
76
|
+
isSearchable: false,
|
|
77
|
+
render: () => _jsx(LoadingTree, {}),
|
|
67
78
|
},
|
|
68
79
|
],
|
|
69
80
|
};
|
|
@@ -74,6 +85,7 @@ function getTreeSelectorProps(trees) {
|
|
|
74
85
|
trees: [
|
|
75
86
|
{
|
|
76
87
|
id: "no-trees",
|
|
88
|
+
isSearchable: false,
|
|
77
89
|
label: "",
|
|
78
90
|
render: () => (_jsx("div", { style: { display: "flex", justifyContent: "center", alignItems: "center" }, className: "tree-widget-no-trees-container", children: TreeWidget.translate("selectableTree.noTrees") })),
|
|
79
91
|
},
|
|
@@ -85,19 +97,7 @@ function getTreeSelectorProps(trees) {
|
|
|
85
97
|
trees,
|
|
86
98
|
};
|
|
87
99
|
}
|
|
88
|
-
function
|
|
89
|
-
|
|
90
|
-
useEffect(() => {
|
|
91
|
-
const id = setTimeout(() => {
|
|
92
|
-
setShow(true);
|
|
93
|
-
}, delay);
|
|
94
|
-
return () => {
|
|
95
|
-
clearTimeout(id);
|
|
96
|
-
};
|
|
97
|
-
}, [delay]);
|
|
98
|
-
if (!show) {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
return _jsx(_Fragment, { children: children });
|
|
100
|
+
function LoadingTree() {
|
|
101
|
+
return (_jsx(SelectableTree, { buttons: _jsxs(_Fragment, { children: [_jsx(Skeleton, { variant: "object", size: "medium" }), _jsx(Skeleton, { variant: "object", size: "medium" }), _jsx(Skeleton, { variant: "object", size: "medium" }), _jsx(Skeleton, { variant: "object", size: "medium" }), _jsx(Skeleton, { variant: "object", size: "medium" }), _jsx(Skeleton, { variant: "object", size: "medium" })] }), children: _jsx(SkeletonTree, {}) }));
|
|
102
102
|
}
|
|
103
|
-
//# sourceMappingURL=
|
|
103
|
+
//# sourceMappingURL=TreeWidgetComponentImpl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeWidgetComponentImpl.js","sourceRoot":"","sources":["../../../../src/tree-widget-react/components/TreeWidgetComponentImpl.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport \"./TreeWidgetComponentImpl.css\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { Skeleton } from \"@stratakit/bricks\";\nimport { TreeWidget } from \"../TreeWidget.js\";\nimport { SelectableTree } from \"./tree-header/SelectableTree.js\";\nimport { WidgetHeader } from \"./tree-header/WidgetHeader.js\";\nimport { SkeletonTree } from \"./trees/common/components/SkeletonTree.js\";\n\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { TreeContentDefinition, TreeSelectionProps } from \"./tree-header/WidgetHeader.js\";\n/**\n * Props for rendering trees\n * @public\n */\nexport interface TreeRenderProps {\n filter?: string;\n onPerformanceMeasured?: (featureId: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n// TODO: fix interface so startIcon type is taken from this interface for `TreeSelector`\n/**\n * Definition of a tree component displayed in `SelectableTree`.\n * @public\n */\nexport interface TreeDefinition {\n /** Id of the tree */\n id: string;\n /** Callback that is used to get tree label */\n getLabel: () => string;\n /** Callback that is used to render tree component */\n render: (props: TreeRenderProps) => React.ReactNode;\n /**\n * Callback that is used to determine if tree should be shown for current active iModel connection.\n * If callback is `undefined` tree is shown for all iModel connections.\n */\n shouldShow?: (imodel: IModelConnection) => Promise<boolean>;\n /**\n * Flag to determine if search box should be rendered.\n * - false or undefined, the search box will not be rendered.\n * - true, the search box will be rendered.\n */\n isSearchable?: boolean;\n /** Icon to render before tree label in tree selector */\n startIcon?: React.ReactNode;\n}\n\n/**\n * Props for `TreeWidgetComponent`\n * @internal\n */\nexport interface TreeWidgetComponentImplProps {\n trees: TreeDefinition[];\n onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that renders a tree (combo box) selector and the selected tree component.\n * @internal\n */\nexport function TreeWidgetComponentImpl(props: TreeWidgetComponentImplProps) {\n const imodel = useActiveIModelConnection();\n if (!imodel) {\n return null;\n }\n return <SelectableTreeContent {...props} imodel={imodel} />;\n}\n\nfunction SelectableTreeContent({\n onPerformanceMeasured,\n onFeatureUsed,\n trees: treeDefinitions,\n imodel,\n}: TreeWidgetComponentImplProps & { imodel: IModelConnection }) {\n const activeTrees = useActiveTrees(treeDefinitions, imodel);\n const { trees, defaultSelectedContentId } = useMemo(() => getWidgetWithHeaderProps(activeTrees), [activeTrees]);\n const [searchValue, setSearchValue] = useState<string | undefined>(undefined);\n const [selectedContentId, setSelectedContentId] = useState<string | undefined>(defaultSelectedContentId);\n const selectedContent = useMemo(() => trees.find((c) => c.id === selectedContentId) ?? trees[0], [selectedContentId, trees]);\n\n const onSelect = useCallback(\n (treeId: string) => {\n onFeatureUsed?.(`choose-${treeId}`);\n setSelectedContentId(treeId);\n },\n [onFeatureUsed],\n );\n\n return (\n <div className=\"tree-widget-selectable-tree\">\n <div className=\"tw-content\">\n <WidgetHeader\n trees={trees}\n defaultSelectedContentId={defaultSelectedContentId}\n onSearch={setSearchValue}\n onSelect={onSelect}\n isLoading={selectedContent.id === \"loading\"}\n />\n <div className=\"tw-content-wrapper\">{selectedContent?.render({ onPerformanceMeasured, onFeatureUsed, filter: searchValue })}</div>\n </div>\n </div>\n );\n}\n\nfunction useActiveTrees(treeDefinitions: TreeDefinition[], imodel: IModelConnection) {\n const [trees, setTrees] = useState<TreeContentDefinition[]>();\n\n useEffect(() => {\n let disposed = false;\n void (async () => {\n const visibleTrees = await getActiveTrees(treeDefinitions, imodel);\n if (!disposed) {\n setTrees(visibleTrees);\n }\n })();\n\n return () => {\n disposed = true;\n };\n }, [treeDefinitions, imodel]);\n\n return trees;\n}\n\nasync function getActiveTrees(treeDefinitions: TreeDefinition[], imodel: IModelConnection): Promise<TreeContentDefinition[]> {\n const handleDefinition = async (treeDef: TreeDefinition) => {\n if (treeDef.shouldShow !== undefined && !(await treeDef.shouldShow(imodel))) {\n return undefined;\n }\n return {\n id: treeDef.id,\n isSearchable: treeDef.isSearchable,\n label: treeDef.getLabel(),\n render: treeDef.render,\n startIcon: treeDef.startIcon,\n };\n };\n\n return (await Promise.all(treeDefinitions.map(handleDefinition))).filter((tree) => tree !== undefined) as TreeContentDefinition[];\n}\n\nfunction getWidgetWithHeaderProps(trees?: TreeContentDefinition[]): TreeSelectionProps {\n if (trees === undefined) {\n return {\n defaultSelectedContentId: \"loading\",\n trees: [\n {\n id: \"loading\",\n label: \"\",\n isSearchable: false,\n render: () => <LoadingTree />,\n },\n ],\n };\n }\n\n if (trees.length === 0) {\n return {\n defaultSelectedContentId: \"no-trees\",\n trees: [\n {\n id: \"no-trees\",\n isSearchable: false,\n label: \"\",\n render: () => (\n <div style={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }} className=\"tree-widget-no-trees-container\">\n {TreeWidget.translate(\"selectableTree.noTrees\")}\n </div>\n ),\n },\n ],\n };\n }\n\n return {\n defaultSelectedContentId: trees[0].id,\n trees,\n };\n}\n\nfunction LoadingTree() {\n return (\n <SelectableTree\n buttons={\n <>\n <Skeleton variant={\"object\"} size={\"medium\"} />\n <Skeleton variant={\"object\"} size={\"medium\"} />\n <Skeleton variant={\"object\"} size={\"medium\"} />\n <Skeleton variant={\"object\"} size={\"medium\"} />\n <Skeleton variant={\"object\"} size={\"medium\"} />\n <Skeleton variant={\"object\"} size={\"medium\"} />\n </>\n }\n >\n <SkeletonTree />\n </SelectableTree>\n );\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "./TreeWidgetUiItemsProvider.
|
|
1
|
+
import "./TreeWidgetUiItemsProvider.css";
|
|
2
2
|
import type { Widget } from "@itwin/appui-react";
|
|
3
|
-
import type {
|
|
3
|
+
import type { TreeDefinition } from "./TreeWidgetComponentImpl.js";
|
|
4
4
|
/**
|
|
5
5
|
* Props for `createWidget`.
|
|
6
6
|
* @public
|
|
@@ -13,9 +13,7 @@ interface TreeWidgetProps {
|
|
|
13
13
|
* @see ExternalSourcesTreeComponent
|
|
14
14
|
* @see IModelContentTreeComponent
|
|
15
15
|
*/
|
|
16
|
-
trees:
|
|
17
|
-
/** Modifies the density of the tree widget. `enlarged` widget contains larger content */
|
|
18
|
-
density?: "enlarged" | "default";
|
|
16
|
+
trees: TreeDefinition[];
|
|
19
17
|
/** Callback that is invoked when performance of tracked feature is measured. */
|
|
20
18
|
onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;
|
|
21
19
|
/** Callback that is invoked when a tracked feature is used. */
|
|
@@ -30,6 +28,6 @@ export declare function createTreeWidget(props: TreeWidgetProps): Widget;
|
|
|
30
28
|
* Tree widget component which allows selecting which tree to render.
|
|
31
29
|
* @public
|
|
32
30
|
*/
|
|
33
|
-
export declare function TreeWidgetComponent(props:
|
|
31
|
+
export declare function TreeWidgetComponent(props: TreeWidgetProps): import("react/jsx-runtime").JSX.Element;
|
|
34
32
|
export {};
|
|
35
33
|
//# sourceMappingURL=TreeWidgetUiItemsProvider.d.ts.map
|