@itwin/components-react 3.0.0-dev.83 → 3.0.0-dev.87
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 +1362 -1362
- package/README.md +11 -11
- package/lib/cjs/components-react/UiComponents.js.map +1 -1
- package/lib/cjs/components-react/_target.scss +9 -9
- package/lib/cjs/components-react/breadcrumb/BeInspireTree.js.map +1 -1
- package/lib/cjs/components-react/breadcrumb/Breadcrumb.js.map +1 -1
- package/lib/cjs/components-react/breadcrumb/Breadcrumb.scss +196 -196
- package/lib/cjs/components-react/breadcrumb/BreadcrumbDetails.js.map +1 -1
- package/lib/cjs/components-react/breadcrumb/BreadcrumbPath.js.map +1 -1
- package/lib/cjs/components-react/breadcrumb/BreadcrumbTreeUtils.js.map +1 -1
- package/lib/cjs/components-react/common/DateUtils.js.map +1 -1
- package/lib/cjs/components-react/common/DelayedSpinner.js.map +1 -1
- package/lib/cjs/components-react/common/HighlightedText.js.map +1 -1
- package/lib/cjs/components-react/common/HighlightingComponentProps.js.map +1 -1
- package/lib/cjs/components-react/common/IImageLoader.js.map +1 -1
- package/lib/cjs/components-react/common/ImageRenderer.js.map +1 -1
- package/lib/cjs/components-react/common/Links.js.map +1 -1
- package/lib/cjs/components-react/common/PageOptions.js.map +1 -1
- package/lib/cjs/components-react/common/SubscriptionScheduler.js.map +1 -1
- package/lib/cjs/components-react/common/UseAsyncValue.js.map +1 -1
- package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
- package/lib/cjs/components-react/common/UseDebouncedAsyncValue.js.map +1 -1
- package/lib/cjs/components-react/common/UseRerender.js.map +1 -1
- package/lib/cjs/components-react/common/countMatchesInString.js.map +1 -1
- package/lib/cjs/components-react/common/selection/SelectionHandler.js.map +1 -1
- package/lib/cjs/components-react/common/selection/SelectionModes.js.map +1 -1
- package/lib/cjs/components-react/common/showhide/ShowHideDialog.js.map +1 -1
- package/lib/cjs/components-react/common/showhide/ShowHideItem.js.map +1 -1
- package/lib/cjs/components-react/common/showhide/ShowHideMenu.js.map +1 -1
- package/lib/cjs/components-react/converters/BooleanTypeConverter.js.map +1 -1
- package/lib/cjs/components-react/converters/CompositeTypeConverter.js.map +1 -1
- package/lib/cjs/components-react/converters/DateTimeTypeConverter.js.map +1 -1
- package/lib/cjs/components-react/converters/EnumTypeConverter.js.map +1 -1
- package/lib/cjs/components-react/converters/HexadecimalTypeConverter.js.map +1 -1
- package/lib/cjs/components-react/converters/NavigationPropertyTypeConverter.js.map +1 -1
- package/lib/cjs/components-react/converters/NumericTypeConverter.js.map +1 -1
- package/lib/cjs/components-react/converters/PointTypeConverter.js.map +1 -1
- package/lib/cjs/components-react/converters/StringTypeConverter.js.map +1 -1
- package/lib/cjs/components-react/converters/TypeConverter.js.map +1 -1
- package/lib/cjs/components-react/converters/TypeConverterManager.js.map +1 -1
- package/lib/cjs/components-react/converters/valuetypes/ConvertedTypes.js.map +1 -1
- package/lib/cjs/components-react/datepicker/DateField.js.map +1 -1
- package/lib/cjs/components-react/datepicker/DateField.scss +22 -22
- package/lib/cjs/components-react/datepicker/DatePicker.js.map +1 -1
- package/lib/cjs/components-react/datepicker/DatePicker.scss +170 -170
- package/lib/cjs/components-react/datepicker/DatePickerPopupButton.js.map +1 -1
- package/lib/cjs/components-react/datepicker/DatePickerPopupButton.scss +57 -57
- package/lib/cjs/components-react/datepicker/IntlFormatter.js.map +1 -1
- package/lib/cjs/components-react/datepicker/TimeField.js.map +1 -1
- package/lib/cjs/components-react/datepicker/TimeField.scss +73 -73
- package/lib/cjs/components-react/editors/BooleanEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/BooleanEditor.scss +24 -24
- package/lib/cjs/components-react/editors/CustomNumberEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/CustomNumberEditor.scss +21 -21
- package/lib/cjs/components-react/editors/DateTimeEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/DateTimeEditor.scss +9 -9
- package/lib/cjs/components-react/editors/EditorContainer.js.map +1 -1
- package/lib/cjs/components-react/editors/EditorContainer.scss +6 -6
- package/lib/cjs/components-react/editors/EnumButtonGroupEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/EnumButtonGroupEditor.scss +182 -182
- package/lib/cjs/components-react/editors/EnumEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/EnumEditor.scss +22 -22
- package/lib/cjs/components-react/editors/IconEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/IconEditor.scss +16 -16
- package/lib/cjs/components-react/editors/ImageCheckBoxEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/ImageCheckBoxEditor.scss +23 -23
- package/lib/cjs/components-react/editors/NumericInputEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/NumericInputEditor.scss +17 -17
- package/lib/cjs/components-react/editors/PopupButton.js.map +1 -1
- package/lib/cjs/components-react/editors/PopupButton.scss +119 -119
- package/lib/cjs/components-react/editors/PropertyEditorManager.js.map +1 -1
- package/lib/cjs/components-react/editors/SliderEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/SliderEditor.scss +13 -13
- package/lib/cjs/components-react/editors/TextEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/TextEditor.scss +21 -21
- package/lib/cjs/components-react/editors/TextareaEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/TextareaEditor.scss +14 -14
- package/lib/cjs/components-react/editors/ThemedEnumEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/ThemedEnumEditor.scss +82 -82
- package/lib/cjs/components-react/editors/ToggleEditor.js.map +1 -1
- package/lib/cjs/components-react/editors/ToggleEditor.scss +25 -25
- package/lib/cjs/components-react/editors/variables.scss +6 -6
- package/lib/cjs/components-react/favorite/FavoritePropertiesRenderer.js.map +1 -1
- package/lib/cjs/components-react/favorite/FavoritePropertyList.js.map +1 -1
- package/lib/cjs/components-react/filtering/FilteringInput.js.map +1 -1
- package/lib/cjs/components-react/filtering/FilteringInput.scss +68 -68
- package/lib/cjs/components-react/filtering/ResultSelector.js.map +1 -1
- package/lib/cjs/components-react/filtering/ResultSelector.scss +72 -72
- package/lib/cjs/components-react/iconpicker/IconPickerButton.js.map +1 -1
- package/lib/cjs/components-react/iconpicker/IconPickerButton.scss +74 -74
- package/lib/cjs/components-react/inputs/ParsedInput.js.map +1 -1
- package/lib/cjs/components-react/inputs/ParsedInput.scss +23 -23
- package/lib/cjs/components-react/properties/ItemStyle.js.map +1 -1
- package/lib/cjs/components-react/properties/LinkHandler.js.map +1 -1
- package/lib/cjs/components-react/properties/ValueRendererManager.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/ActionButtonList.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/ActionButtonList.scss +25 -25
- package/lib/cjs/components-react/properties/renderers/ActionButtonRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/CommonPropertyRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/NonPrimitivePropertyRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/NonPrimitivePropertyRenderer.scss +16 -16
- package/lib/cjs/components-react/properties/renderers/PrimitivePropertyRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/PropertyGridColumns.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/PropertyRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/PropertyView.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/PropertyView.scss +106 -106
- package/lib/cjs/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.scss +87 -87
- package/lib/cjs/components-react/properties/renderers/value/ArrayPropertyValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/StructPropertyValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/UrlPropertyValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/WithContextStyle.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/table/ArrayValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.scss +10 -10
- package/lib/cjs/components-react/properties/renderers/value/table/StructValueRenderer.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/PropertyCategoryRendererManager.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/PropertyDataProvider.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/SimplePropertyDataProvider.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/FlatItemNestedBorderWrapper.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/PropertyGrid.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/PropertyGrid.scss +75 -75
- package/lib/cjs/components-react/propertygrid/component/PropertyGridCommons.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/PropertyList.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +94 -94
- package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/dataproviders/FilteringDataProvider.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/dataproviders/filterers/CompositePropertyDataFilterer.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/dataproviders/filterers/PropertyDataFiltererBase.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/PropertyGridEventHandler.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/PropertyGridModel.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/PropertyGridModelChangeEvent.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/PropertyGridModelSource.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/flat-items/FlatGridItem.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableCategorizedArrayProperty.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableCategorizedPrimitiveProperty.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableCategorizedStructProperty.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableCustomGridCategory.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableFlatGridItem.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableGridCategory.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableGridItemFactory.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js.map +1 -1
- package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.js.map +1 -1
- package/lib/cjs/components-react/selectable-content/SelectableContent.js.map +1 -1
- package/lib/cjs/components-react/selectable-content/SelectableContent.scss +19 -19
- package/lib/cjs/components-react/table/SimpleTableDataProvider.js.map +1 -1
- package/lib/cjs/components-react/table/TableDataProvider.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/ColumnFiltering.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/ColumnFiltering.scss +78 -78
- package/lib/cjs/components-react/table/columnfiltering/ColumnFilteringUtilities.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/DataGridFilterParser.d.ts.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/DataGridFilterParser.js +1 -0
- package/lib/cjs/components-react/table/columnfiltering/DataGridFilterParser.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/FilterableColumnBase.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/TableColumnFilterDescriptor.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/TableFilterDescriptor.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/TableFilterDescriptorCollection.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/data-grid-addons/AutoCompleteFilter.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/data-grid-addons/MultiSelectFilter.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/data-grid-addons/NumericFilter.d.ts.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/data-grid-addons/NumericFilter.js +1 -0
- package/lib/cjs/components-react/table/columnfiltering/data-grid-addons/NumericFilter.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/data-grid-addons/SingleSelectFilter.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/multi-value-filter/MultiValueFilter.d.ts.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/multi-value-filter/MultiValueFilter.js +1 -0
- package/lib/cjs/components-react/table/columnfiltering/multi-value-filter/MultiValueFilter.js.map +1 -1
- package/lib/cjs/components-react/table/columnfiltering/multi-value-filter/MultiValueFilter.scss +35 -35
- package/lib/cjs/components-react/table/component/ColumnDragLayer.js.map +1 -1
- package/lib/cjs/components-react/table/component/DragDropHeaderCell.js.map +1 -1
- package/lib/cjs/components-react/table/component/Table.d.ts +8 -8
- package/lib/cjs/components-react/table/component/Table.d.ts.map +1 -1
- package/lib/cjs/components-react/table/component/Table.js +3 -2
- package/lib/cjs/components-react/table/component/Table.js.map +1 -1
- package/lib/cjs/components-react/table/component/Table.scss +200 -200
- package/lib/cjs/components-react/table/component/TableCell.d.ts +5 -5
- package/lib/cjs/components-react/table/component/TableCell.d.ts.map +1 -1
- package/lib/cjs/components-react/table/component/TableCell.js +3 -2
- package/lib/cjs/components-react/table/component/TableCell.js.map +1 -1
- package/lib/cjs/components-react/table/component/TableCell.scss +48 -48
- package/lib/cjs/components-react/table/component/TableColumn.d.ts +1 -1
- package/lib/cjs/components-react/table/component/TableColumn.d.ts.map +1 -1
- package/lib/cjs/components-react/table/component/TableColumn.js +1 -0
- package/lib/cjs/components-react/table/component/TableColumn.js.map +1 -1
- package/lib/cjs/components-react/table/component/dragdrop/BeDragDropContext.js.map +1 -1
- package/lib/cjs/components-react/table/component/dragdrop/DragDropDef.js.map +1 -1
- package/lib/cjs/components-react/table/component/dragdrop/withDragSource.js.map +1 -1
- package/lib/cjs/components-react/table/component/dragdrop/withDropTarget.js.map +1 -1
- package/lib/cjs/components-react/toolbar/Item.js.map +1 -1
- package/lib/cjs/components-react/toolbar/Item.scss +122 -122
- package/lib/cjs/components-react/toolbar/ItemWrapper.js.map +1 -1
- package/lib/cjs/components-react/toolbar/ItemWrapper.scss +10 -10
- package/lib/cjs/components-react/toolbar/Items.js.map +1 -1
- package/lib/cjs/components-react/toolbar/Items.scss +94 -94
- package/lib/cjs/components-react/toolbar/Overflow.js.map +1 -1
- package/lib/cjs/components-react/toolbar/Overflow.scss +48 -48
- package/lib/cjs/components-react/toolbar/OverflowPanel.js.map +1 -1
- package/lib/cjs/components-react/toolbar/OverflowPanel.scss +37 -37
- package/lib/cjs/components-react/toolbar/PopupItem.js.map +1 -1
- package/lib/cjs/components-react/toolbar/PopupItem.scss +75 -75
- package/lib/cjs/components-react/toolbar/PopupItemWithDrag.js.map +1 -1
- package/lib/cjs/components-react/toolbar/PopupItemsPanel.js.map +1 -1
- package/lib/cjs/components-react/toolbar/Toolbar.js.map +1 -1
- package/lib/cjs/components-react/toolbar/Toolbar.scss +18 -18
- package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.js.map +1 -1
- package/lib/cjs/components-react/toolbar/_variables.scss +34 -34
- package/lib/cjs/components-react/toolbar/groupPanel/BackArrow.js.map +1 -1
- package/lib/cjs/components-react/toolbar/groupPanel/BackArrow.scss +44 -44
- package/lib/cjs/components-react/toolbar/groupPanel/Column.js.map +1 -1
- package/lib/cjs/components-react/toolbar/groupPanel/Column.scss +9 -9
- package/lib/cjs/components-react/toolbar/groupPanel/Columns.js.map +1 -1
- package/lib/cjs/components-react/toolbar/groupPanel/Columns.scss +10 -10
- package/lib/cjs/components-react/toolbar/groupPanel/Panel.js.map +1 -1
- package/lib/cjs/components-react/toolbar/groupPanel/Panel.scss +17 -17
- package/lib/cjs/components-react/toolbar/groupPanel/Title.js.map +1 -1
- package/lib/cjs/components-react/toolbar/groupPanel/Title.scss +34 -34
- package/lib/cjs/components-react/toolbar/groupPanel/_variables.scss +16 -16
- package/lib/cjs/components-react/toolbar/groupPanel/tool/Expander.js.map +1 -1
- package/lib/cjs/components-react/toolbar/groupPanel/tool/Expander.scss +29 -29
- package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.js.map +1 -1
- package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.scss +146 -146
- package/lib/cjs/components-react/toolbar/groupPanel/tool/_variables.scss +12 -12
- package/lib/cjs/components-react/toolbar/useDragInteraction.js.map +1 -1
- package/lib/cjs/components-react/toolbar/utilities/Direction.js.map +1 -1
- package/lib/cjs/components-react/tree/HighlightingEngine.js.map +1 -1
- package/lib/cjs/components-react/tree/HighlightingEngine.scss +7 -7
- package/lib/cjs/components-react/tree/ImageLoader.js.map +1 -1
- package/lib/cjs/components-react/tree/SimpleTreeDataProvider.js.map +1 -1
- package/lib/cjs/components-react/tree/TreeComponentTestId.js.map +1 -1
- package/lib/cjs/components-react/tree/TreeDataProvider.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/Observable.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeActions.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeEventDispatcher.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeEventHandler.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeEvents.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeHooks.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeModel.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeModelSource.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/ControlledTree.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/ControlledTree.scss +102 -102
- package/lib/cjs/components-react/tree/controlled/component/NodeContent.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/NodeContent.scss +28 -28
- package/lib/cjs/components-react/tree/controlled/component/TreeNodeEditor.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/TreeRenderer.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/internal/SparseTree.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/internal/TreeModelMutator.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/internal/TreeSelectionManager.js.map +1 -1
- package/lib/cjs/components-react.js.map +1 -1
- package/lib/esm/components-react/UiComponents.js.map +1 -1
- package/lib/esm/components-react/_target.scss +9 -9
- package/lib/esm/components-react/breadcrumb/BeInspireTree.js.map +1 -1
- package/lib/esm/components-react/breadcrumb/Breadcrumb.js.map +1 -1
- package/lib/esm/components-react/breadcrumb/Breadcrumb.scss +196 -196
- package/lib/esm/components-react/breadcrumb/BreadcrumbDetails.js.map +1 -1
- package/lib/esm/components-react/breadcrumb/BreadcrumbPath.js.map +1 -1
- package/lib/esm/components-react/breadcrumb/BreadcrumbTreeUtils.js.map +1 -1
- package/lib/esm/components-react/common/DateUtils.js.map +1 -1
- package/lib/esm/components-react/common/DelayedSpinner.js.map +1 -1
- package/lib/esm/components-react/common/HighlightedText.js.map +1 -1
- package/lib/esm/components-react/common/HighlightingComponentProps.js.map +1 -1
- package/lib/esm/components-react/common/IImageLoader.js.map +1 -1
- package/lib/esm/components-react/common/ImageRenderer.js.map +1 -1
- package/lib/esm/components-react/common/Links.js.map +1 -1
- package/lib/esm/components-react/common/PageOptions.js.map +1 -1
- package/lib/esm/components-react/common/SubscriptionScheduler.js.map +1 -1
- package/lib/esm/components-react/common/UseAsyncValue.js.map +1 -1
- package/lib/esm/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
- package/lib/esm/components-react/common/UseDebouncedAsyncValue.js.map +1 -1
- package/lib/esm/components-react/common/UseRerender.js.map +1 -1
- package/lib/esm/components-react/common/countMatchesInString.js.map +1 -1
- package/lib/esm/components-react/common/selection/SelectionHandler.js.map +1 -1
- package/lib/esm/components-react/common/selection/SelectionModes.js.map +1 -1
- package/lib/esm/components-react/common/showhide/ShowHideDialog.js.map +1 -1
- package/lib/esm/components-react/common/showhide/ShowHideItem.js.map +1 -1
- package/lib/esm/components-react/common/showhide/ShowHideMenu.js.map +1 -1
- package/lib/esm/components-react/converters/BooleanTypeConverter.js.map +1 -1
- package/lib/esm/components-react/converters/CompositeTypeConverter.js.map +1 -1
- package/lib/esm/components-react/converters/DateTimeTypeConverter.js.map +1 -1
- package/lib/esm/components-react/converters/EnumTypeConverter.js.map +1 -1
- package/lib/esm/components-react/converters/HexadecimalTypeConverter.js.map +1 -1
- package/lib/esm/components-react/converters/NavigationPropertyTypeConverter.js.map +1 -1
- package/lib/esm/components-react/converters/NumericTypeConverter.js.map +1 -1
- package/lib/esm/components-react/converters/PointTypeConverter.js.map +1 -1
- package/lib/esm/components-react/converters/StringTypeConverter.js.map +1 -1
- package/lib/esm/components-react/converters/TypeConverter.js.map +1 -1
- package/lib/esm/components-react/converters/TypeConverterManager.js.map +1 -1
- package/lib/esm/components-react/converters/valuetypes/ConvertedTypes.js.map +1 -1
- package/lib/esm/components-react/datepicker/DateField.js.map +1 -1
- package/lib/esm/components-react/datepicker/DateField.scss +22 -22
- package/lib/esm/components-react/datepicker/DatePicker.js.map +1 -1
- package/lib/esm/components-react/datepicker/DatePicker.scss +170 -170
- package/lib/esm/components-react/datepicker/DatePickerPopupButton.js.map +1 -1
- package/lib/esm/components-react/datepicker/DatePickerPopupButton.scss +57 -57
- package/lib/esm/components-react/datepicker/IntlFormatter.js.map +1 -1
- package/lib/esm/components-react/datepicker/TimeField.js.map +1 -1
- package/lib/esm/components-react/datepicker/TimeField.scss +73 -73
- package/lib/esm/components-react/editors/BooleanEditor.js.map +1 -1
- package/lib/esm/components-react/editors/BooleanEditor.scss +24 -24
- package/lib/esm/components-react/editors/CustomNumberEditor.js.map +1 -1
- package/lib/esm/components-react/editors/CustomNumberEditor.scss +21 -21
- package/lib/esm/components-react/editors/DateTimeEditor.js.map +1 -1
- package/lib/esm/components-react/editors/DateTimeEditor.scss +9 -9
- package/lib/esm/components-react/editors/EditorContainer.js.map +1 -1
- package/lib/esm/components-react/editors/EditorContainer.scss +6 -6
- package/lib/esm/components-react/editors/EnumButtonGroupEditor.js.map +1 -1
- package/lib/esm/components-react/editors/EnumButtonGroupEditor.scss +182 -182
- package/lib/esm/components-react/editors/EnumEditor.js.map +1 -1
- package/lib/esm/components-react/editors/EnumEditor.scss +22 -22
- package/lib/esm/components-react/editors/IconEditor.js.map +1 -1
- package/lib/esm/components-react/editors/IconEditor.scss +16 -16
- package/lib/esm/components-react/editors/ImageCheckBoxEditor.js.map +1 -1
- package/lib/esm/components-react/editors/ImageCheckBoxEditor.scss +23 -23
- package/lib/esm/components-react/editors/NumericInputEditor.js.map +1 -1
- package/lib/esm/components-react/editors/NumericInputEditor.scss +17 -17
- package/lib/esm/components-react/editors/PopupButton.js.map +1 -1
- package/lib/esm/components-react/editors/PopupButton.scss +119 -119
- package/lib/esm/components-react/editors/PropertyEditorManager.js.map +1 -1
- package/lib/esm/components-react/editors/SliderEditor.js.map +1 -1
- package/lib/esm/components-react/editors/SliderEditor.scss +13 -13
- package/lib/esm/components-react/editors/TextEditor.js.map +1 -1
- package/lib/esm/components-react/editors/TextEditor.scss +21 -21
- package/lib/esm/components-react/editors/TextareaEditor.js.map +1 -1
- package/lib/esm/components-react/editors/TextareaEditor.scss +14 -14
- package/lib/esm/components-react/editors/ThemedEnumEditor.js.map +1 -1
- package/lib/esm/components-react/editors/ThemedEnumEditor.scss +82 -82
- package/lib/esm/components-react/editors/ToggleEditor.js.map +1 -1
- package/lib/esm/components-react/editors/ToggleEditor.scss +25 -25
- package/lib/esm/components-react/editors/variables.scss +6 -6
- package/lib/esm/components-react/favorite/FavoritePropertiesRenderer.js.map +1 -1
- package/lib/esm/components-react/favorite/FavoritePropertyList.js.map +1 -1
- package/lib/esm/components-react/filtering/FilteringInput.js.map +1 -1
- package/lib/esm/components-react/filtering/FilteringInput.scss +68 -68
- package/lib/esm/components-react/filtering/ResultSelector.js.map +1 -1
- package/lib/esm/components-react/filtering/ResultSelector.scss +72 -72
- package/lib/esm/components-react/iconpicker/IconPickerButton.js.map +1 -1
- package/lib/esm/components-react/iconpicker/IconPickerButton.scss +74 -74
- package/lib/esm/components-react/inputs/ParsedInput.js.map +1 -1
- package/lib/esm/components-react/inputs/ParsedInput.scss +23 -23
- package/lib/esm/components-react/properties/ItemStyle.js.map +1 -1
- package/lib/esm/components-react/properties/LinkHandler.js.map +1 -1
- package/lib/esm/components-react/properties/ValueRendererManager.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/ActionButtonList.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/ActionButtonList.scss +25 -25
- package/lib/esm/components-react/properties/renderers/ActionButtonRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/CommonPropertyRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/NonPrimitivePropertyRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/NonPrimitivePropertyRenderer.scss +16 -16
- package/lib/esm/components-react/properties/renderers/PrimitivePropertyRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/PropertyGridColumns.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/PropertyRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/PropertyView.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/PropertyView.scss +106 -106
- package/lib/esm/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.scss +87 -87
- package/lib/esm/components-react/properties/renderers/value/ArrayPropertyValueRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/StructPropertyValueRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/UrlPropertyValueRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/WithContextStyle.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/table/ArrayValueRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.js.map +1 -1
- package/lib/esm/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.scss +10 -10
- package/lib/esm/components-react/properties/renderers/value/table/StructValueRenderer.js.map +1 -1
- package/lib/esm/components-react/propertygrid/PropertyCategoryRendererManager.js.map +1 -1
- package/lib/esm/components-react/propertygrid/PropertyDataProvider.js.map +1 -1
- package/lib/esm/components-react/propertygrid/SimplePropertyDataProvider.js.map +1 -1
- package/lib/esm/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js.map +1 -1
- package/lib/esm/components-react/propertygrid/component/FlatItemNestedBorderWrapper.js.map +1 -1
- package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
- package/lib/esm/components-react/propertygrid/component/PropertyGrid.js.map +1 -1
- package/lib/esm/components-react/propertygrid/component/PropertyGrid.scss +75 -75
- package/lib/esm/components-react/propertygrid/component/PropertyGridCommons.js.map +1 -1
- package/lib/esm/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.js.map +1 -1
- package/lib/esm/components-react/propertygrid/component/PropertyList.js.map +1 -1
- package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.js.map +1 -1
- package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +94 -94
- package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
- package/lib/esm/components-react/propertygrid/dataproviders/FilteringDataProvider.js.map +1 -1
- package/lib/esm/components-react/propertygrid/dataproviders/filterers/CompositePropertyDataFilterer.js.map +1 -1
- package/lib/esm/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js.map +1 -1
- package/lib/esm/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.js.map +1 -1
- package/lib/esm/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.js.map +1 -1
- package/lib/esm/components-react/propertygrid/dataproviders/filterers/PropertyDataFiltererBase.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/PropertyGridEventHandler.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/PropertyGridModel.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/PropertyGridModelChangeEvent.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/PropertyGridModelSource.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/flat-items/FlatGridItem.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/flat-items/MutableCategorizedArrayProperty.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/flat-items/MutableCategorizedPrimitiveProperty.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/flat-items/MutableCategorizedStructProperty.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/flat-items/MutableCustomGridCategory.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/flat-items/MutableFlatGridItem.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/flat-items/MutableGridCategory.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/flat-items/MutableGridItemFactory.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js.map +1 -1
- package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.js.map +1 -1
- package/lib/esm/components-react/selectable-content/SelectableContent.js.map +1 -1
- package/lib/esm/components-react/selectable-content/SelectableContent.scss +19 -19
- package/lib/esm/components-react/table/SimpleTableDataProvider.js.map +1 -1
- package/lib/esm/components-react/table/TableDataProvider.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/ColumnFiltering.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/ColumnFiltering.scss +78 -78
- package/lib/esm/components-react/table/columnfiltering/ColumnFilteringUtilities.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/DataGridFilterParser.d.ts.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/DataGridFilterParser.js +1 -0
- package/lib/esm/components-react/table/columnfiltering/DataGridFilterParser.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/FilterableColumnBase.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/TableColumnFilterDescriptor.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/TableFilterDescriptor.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/TableFilterDescriptorCollection.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/data-grid-addons/AutoCompleteFilter.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/data-grid-addons/MultiSelectFilter.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/data-grid-addons/NumericFilter.d.ts.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/data-grid-addons/NumericFilter.js +1 -0
- package/lib/esm/components-react/table/columnfiltering/data-grid-addons/NumericFilter.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/data-grid-addons/SingleSelectFilter.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/multi-value-filter/MultiValueFilter.d.ts.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/multi-value-filter/MultiValueFilter.js +1 -0
- package/lib/esm/components-react/table/columnfiltering/multi-value-filter/MultiValueFilter.js.map +1 -1
- package/lib/esm/components-react/table/columnfiltering/multi-value-filter/MultiValueFilter.scss +35 -35
- package/lib/esm/components-react/table/component/ColumnDragLayer.js.map +1 -1
- package/lib/esm/components-react/table/component/DragDropHeaderCell.js.map +1 -1
- package/lib/esm/components-react/table/component/Table.d.ts +8 -8
- package/lib/esm/components-react/table/component/Table.d.ts.map +1 -1
- package/lib/esm/components-react/table/component/Table.js +3 -2
- package/lib/esm/components-react/table/component/Table.js.map +1 -1
- package/lib/esm/components-react/table/component/Table.scss +200 -200
- package/lib/esm/components-react/table/component/TableCell.d.ts +5 -5
- package/lib/esm/components-react/table/component/TableCell.d.ts.map +1 -1
- package/lib/esm/components-react/table/component/TableCell.js +3 -2
- package/lib/esm/components-react/table/component/TableCell.js.map +1 -1
- package/lib/esm/components-react/table/component/TableCell.scss +48 -48
- package/lib/esm/components-react/table/component/TableColumn.d.ts +1 -1
- package/lib/esm/components-react/table/component/TableColumn.d.ts.map +1 -1
- package/lib/esm/components-react/table/component/TableColumn.js +1 -0
- package/lib/esm/components-react/table/component/TableColumn.js.map +1 -1
- package/lib/esm/components-react/table/component/dragdrop/BeDragDropContext.js.map +1 -1
- package/lib/esm/components-react/table/component/dragdrop/DragDropDef.js.map +1 -1
- package/lib/esm/components-react/table/component/dragdrop/withDragSource.js.map +1 -1
- package/lib/esm/components-react/table/component/dragdrop/withDropTarget.js.map +1 -1
- package/lib/esm/components-react/toolbar/Item.js.map +1 -1
- package/lib/esm/components-react/toolbar/Item.scss +122 -122
- package/lib/esm/components-react/toolbar/ItemWrapper.js.map +1 -1
- package/lib/esm/components-react/toolbar/ItemWrapper.scss +10 -10
- package/lib/esm/components-react/toolbar/Items.js.map +1 -1
- package/lib/esm/components-react/toolbar/Items.scss +94 -94
- package/lib/esm/components-react/toolbar/Overflow.js.map +1 -1
- package/lib/esm/components-react/toolbar/Overflow.scss +48 -48
- package/lib/esm/components-react/toolbar/OverflowPanel.js.map +1 -1
- package/lib/esm/components-react/toolbar/OverflowPanel.scss +37 -37
- package/lib/esm/components-react/toolbar/PopupItem.js.map +1 -1
- package/lib/esm/components-react/toolbar/PopupItem.scss +75 -75
- package/lib/esm/components-react/toolbar/PopupItemWithDrag.js.map +1 -1
- package/lib/esm/components-react/toolbar/PopupItemsPanel.js.map +1 -1
- package/lib/esm/components-react/toolbar/Toolbar.js.map +1 -1
- package/lib/esm/components-react/toolbar/Toolbar.scss +18 -18
- package/lib/esm/components-react/toolbar/ToolbarWithOverflow.js.map +1 -1
- package/lib/esm/components-react/toolbar/_variables.scss +34 -34
- package/lib/esm/components-react/toolbar/groupPanel/BackArrow.js.map +1 -1
- package/lib/esm/components-react/toolbar/groupPanel/BackArrow.scss +44 -44
- package/lib/esm/components-react/toolbar/groupPanel/Column.js.map +1 -1
- package/lib/esm/components-react/toolbar/groupPanel/Column.scss +9 -9
- package/lib/esm/components-react/toolbar/groupPanel/Columns.js.map +1 -1
- package/lib/esm/components-react/toolbar/groupPanel/Columns.scss +10 -10
- package/lib/esm/components-react/toolbar/groupPanel/Panel.js.map +1 -1
- package/lib/esm/components-react/toolbar/groupPanel/Panel.scss +17 -17
- package/lib/esm/components-react/toolbar/groupPanel/Title.js.map +1 -1
- package/lib/esm/components-react/toolbar/groupPanel/Title.scss +34 -34
- package/lib/esm/components-react/toolbar/groupPanel/_variables.scss +16 -16
- package/lib/esm/components-react/toolbar/groupPanel/tool/Expander.js.map +1 -1
- package/lib/esm/components-react/toolbar/groupPanel/tool/Expander.scss +29 -29
- package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.js.map +1 -1
- package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.scss +146 -146
- package/lib/esm/components-react/toolbar/groupPanel/tool/_variables.scss +12 -12
- package/lib/esm/components-react/toolbar/useDragInteraction.js.map +1 -1
- package/lib/esm/components-react/toolbar/utilities/Direction.js.map +1 -1
- package/lib/esm/components-react/tree/HighlightingEngine.js.map +1 -1
- package/lib/esm/components-react/tree/HighlightingEngine.scss +7 -7
- package/lib/esm/components-react/tree/ImageLoader.js.map +1 -1
- package/lib/esm/components-react/tree/SimpleTreeDataProvider.js.map +1 -1
- package/lib/esm/components-react/tree/TreeComponentTestId.js.map +1 -1
- package/lib/esm/components-react/tree/TreeDataProvider.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/Observable.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeActions.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeEventDispatcher.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeEventHandler.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeEvents.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeHooks.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeModel.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeModelSource.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/ControlledTree.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/ControlledTree.scss +102 -102
- package/lib/esm/components-react/tree/controlled/component/NodeContent.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/NodeContent.scss +28 -28
- package/lib/esm/components-react/tree/controlled/component/TreeNodeEditor.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/TreeRenderer.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/internal/SparseTree.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/internal/TreeModelMutator.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/internal/TreeSelectionManager.js.map +1 -1
- package/lib/esm/components-react.js.map +1 -1
- package/lib/public/locales/en/UiComponents.json +123 -123
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UiComponents.js","sourceRoot":"","sources":["../../../src/components-react/UiComponents.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,YAAY;IAIvB;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAA0B;QACvD,IAAI,YAAY,CAAC,YAAY,EAAE;YAC7B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,wCAAwC,CAAC,CAAC;YACpG,OAAO;SACR;QAED,aAAa,EAAE,CAAC;QAChB,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;QAC1C,MAAM,YAAY,CAAC,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;QAEvF,MAAM,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACpD,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,0DAA0D;IACnD,MAAM,CAAC,SAAS;QACrB,IAAI,YAAY,CAAC,aAAa;YAC5B,YAAY,CAAC,aAAa,CAAC,mBAAmB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;QACrF,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC;QAEvC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,sDAAsD;IAC/C,MAAM,KAAK,WAAW,KAAc,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9E,mEAAmE;IAC5D,MAAM,KAAK,YAAY;QAC5B,IAAI,CAAC,YAAY,CAAC,aAAa;YAC7B,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,mGAAmG,CAAC,CAAC;QAC5J,OAAO,YAAY,CAAC,aAAa,CAAC;IACpC,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,qBAAqB;QACrC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,MAAM,KAAK,WAAW;QAC3B,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,SAAS,CAAC,GAAsB;QAC5C,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YAC7B,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,iFAAiF,CAAC,CAAC;YACtI,OAAO,EAAE,CAAC;SACX;QACD,OAAO,YAAY,CAAC,YAAY,CAAC,+BAA+B,CAAC,YAAY,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC5G,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,cAAc,CAAC,GAAQ;QACnC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,QAAQ,CAAC;IAClB,CAAC;;AAnEc,yBAAY,GAAG,KAAK,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Common\n */\n\nimport { enablePatches } from \"immer\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport { Localization } from \"@itwin/core-common\";\nimport { getClassName, UiError } from \"@itwin/appui-abstract\";\nimport { UiCore } from \"@itwin/core-react\";\n\n/**\n * Manages the localization service for the components-react package.\n * @public\n */\nexport class UiComponents {\n private static _initialized = false;\n private static _localization?: Localization;\n\n /**\n * Registers the localization service namespace for UiComponents. Also initializes UiCore.\n * @param localization The internationalization service created by the application.\n */\n public static async initialize(localization: Localization): Promise<void> {\n if (UiComponents._initialized) {\n Logger.logInfo(UiComponents.loggerCategory(UiComponents), `UiComponents.initialize already called`);\n return;\n }\n\n enablePatches();\n UiComponents._localization = localization;\n await UiComponents._localization.registerNamespace(UiComponents.localizationNamespace);\n\n await UiCore.initialize(UiComponents._localization);\n UiComponents._initialized = true;\n }\n\n /** Unregisters the UiComponents localization namespace */\n public static terminate() {\n if (UiComponents._localization)\n UiComponents._localization.unregisterNamespace(UiComponents.localizationNamespace);\n UiComponents._localization = undefined;\n\n UiCore.terminate();\n UiComponents._initialized = false;\n }\n\n /** Determines if UiComponents has been initialized */\n public static get initialized(): boolean { return UiComponents._initialized; }\n\n /** The internationalization service created by the application. */\n public static get localization(): Localization {\n if (!UiComponents._localization)\n throw new UiError(UiComponents.loggerCategory(this), \"_localization: UiComponents.initialize has not been called. Unable to return Localization object.\");\n return UiComponents._localization;\n }\n\n /** The internationalization service namespace. */\n public static get localizationNamespace(): string {\n return \"UiComponents\";\n }\n\n /** @internal */\n public static get packageName(): string {\n return \"components-react\";\n }\n\n /** Calls localization.getLocalizedStringWithNamespace with the \"UiComponents\" namespace. Do NOT include the namespace in the key.\n * @internal\n */\n public static translate(key: string | string[]): string {\n if (!UiComponents.initialized) {\n Logger.logError(UiComponents.loggerCategory(this), `translate: UiComponents.initialize has not been called. Returning blank string.`);\n return \"\";\n }\n return UiComponents.localization.getLocalizedStringWithNamespace(UiComponents.localizationNamespace, key);\n }\n\n /** @internal */\n public static loggerCategory(obj: any): string {\n const className = getClassName(obj);\n const category = UiComponents.packageName + (className ? `.${className}` : \"\");\n return category;\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"UiComponents.js","sourceRoot":"","sources":["../../../src/components-react/UiComponents.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,YAAY;IAIvB;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAA0B;QACvD,IAAI,YAAY,CAAC,YAAY,EAAE;YAC7B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,wCAAwC,CAAC,CAAC;YACpG,OAAO;SACR;QAED,aAAa,EAAE,CAAC;QAChB,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;QAC1C,MAAM,YAAY,CAAC,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;QAEvF,MAAM,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACpD,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,0DAA0D;IACnD,MAAM,CAAC,SAAS;QACrB,IAAI,YAAY,CAAC,aAAa;YAC5B,YAAY,CAAC,aAAa,CAAC,mBAAmB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;QACrF,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC;QAEvC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,sDAAsD;IAC/C,MAAM,KAAK,WAAW,KAAc,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9E,mEAAmE;IAC5D,MAAM,KAAK,YAAY;QAC5B,IAAI,CAAC,YAAY,CAAC,aAAa;YAC7B,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,mGAAmG,CAAC,CAAC;QAC5J,OAAO,YAAY,CAAC,aAAa,CAAC;IACpC,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,qBAAqB;QACrC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,MAAM,KAAK,WAAW;QAC3B,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,SAAS,CAAC,GAAsB;QAC5C,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YAC7B,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,iFAAiF,CAAC,CAAC;YACtI,OAAO,EAAE,CAAC;SACX;QACD,OAAO,YAAY,CAAC,YAAY,CAAC,+BAA+B,CAAC,YAAY,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC5G,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,cAAc,CAAC,GAAQ;QACnC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,QAAQ,CAAC;IAClB,CAAC;;AAnEc,yBAAY,GAAG,KAAK,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Common\r\n */\r\n\r\nimport { enablePatches } from \"immer\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { Localization } from \"@itwin/core-common\";\r\nimport { getClassName, UiError } from \"@itwin/appui-abstract\";\r\nimport { UiCore } from \"@itwin/core-react\";\r\n\r\n/**\r\n * Manages the localization service for the components-react package.\r\n * @public\r\n */\r\nexport class UiComponents {\r\n private static _initialized = false;\r\n private static _localization?: Localization;\r\n\r\n /**\r\n * Registers the localization service namespace for UiComponents. Also initializes UiCore.\r\n * @param localization The internationalization service created by the application.\r\n */\r\n public static async initialize(localization: Localization): Promise<void> {\r\n if (UiComponents._initialized) {\r\n Logger.logInfo(UiComponents.loggerCategory(UiComponents), `UiComponents.initialize already called`);\r\n return;\r\n }\r\n\r\n enablePatches();\r\n UiComponents._localization = localization;\r\n await UiComponents._localization.registerNamespace(UiComponents.localizationNamespace);\r\n\r\n await UiCore.initialize(UiComponents._localization);\r\n UiComponents._initialized = true;\r\n }\r\n\r\n /** Unregisters the UiComponents localization namespace */\r\n public static terminate() {\r\n if (UiComponents._localization)\r\n UiComponents._localization.unregisterNamespace(UiComponents.localizationNamespace);\r\n UiComponents._localization = undefined;\r\n\r\n UiCore.terminate();\r\n UiComponents._initialized = false;\r\n }\r\n\r\n /** Determines if UiComponents has been initialized */\r\n public static get initialized(): boolean { return UiComponents._initialized; }\r\n\r\n /** The internationalization service created by the application. */\r\n public static get localization(): Localization {\r\n if (!UiComponents._localization)\r\n throw new UiError(UiComponents.loggerCategory(this), \"_localization: UiComponents.initialize has not been called. Unable to return Localization object.\");\r\n return UiComponents._localization;\r\n }\r\n\r\n /** The internationalization service namespace. */\r\n public static get localizationNamespace(): string {\r\n return \"UiComponents\";\r\n }\r\n\r\n /** @internal */\r\n public static get packageName(): string {\r\n return \"components-react\";\r\n }\r\n\r\n /** Calls localization.getLocalizedStringWithNamespace with the \"UiComponents\" namespace. Do NOT include the namespace in the key.\r\n * @internal\r\n */\r\n public static translate(key: string | string[]): string {\r\n if (!UiComponents.initialized) {\r\n Logger.logError(UiComponents.loggerCategory(this), `translate: UiComponents.initialize has not been called. Returning blank string.`);\r\n return \"\";\r\n }\r\n return UiComponents.localization.getLocalizedStringWithNamespace(UiComponents.localizationNamespace, key);\r\n }\r\n\r\n /** @internal */\r\n public static loggerCategory(obj: any): string {\r\n const className = getClassName(obj);\r\n const category = UiComponents.packageName + (className ? `.${className}` : \"\");\r\n return category;\r\n }\r\n\r\n}\r\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
@mixin components-internal-targeted {
|
|
6
|
-
&:hover, &.components-targeted {
|
|
7
|
-
@content;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
@mixin components-internal-targeted {
|
|
6
|
+
&:hover, &.components-targeted {
|
|
7
|
+
@content;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BeInspireTree.js","sourceRoot":"","sources":["../../../../src/components-react/breadcrumb/BeInspireTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tree\n */\n\nimport { CallableInstance } from \"callable-instance2/import\";\nimport InspireTree, * as Inspire from \"inspire-tree\";\nimport { isArrayLike } from \"lodash\";\nimport { IDisposable, using } from \"@itwin/core-bentley\";\nimport { UiError } from \"@itwin/appui-abstract\";\nimport { CheckBoxInfo, CheckBoxState, isPromiseLike } from \"@itwin/core-react\";\nimport { PageOptions } from \"../common/PageOptions\";\nimport { UiComponents } from \"../UiComponents\";\n\n// istanbul ignore file\n\n/**\n * Enum containing all events that may be emitted by [[BeInspireTree]]\n * @internal\n */\nexport enum BeInspireTreeEvent {\n ChangesApplied = \"changes.applied\",\n ChildrenLoaded = \"children.loaded\",\n DataLoaded = \"data.loaded\",\n DataLoadError = \"data.loaderror\",\n ModelLoaded = \"model.loaded\",\n NodeAdded = \"node.added\",\n NodeBlurred = \"node.blurred\",\n NodeChecked = \"node.checked\",\n NodeCollapsed = \"node.collapsed\",\n NodeDeselected = \"node.deselected\",\n NodeEdited = \"node.edited\",\n NodeExpanded = \"node.expanded\",\n NodeFocused = \"node.focused\",\n NodeHidden = \"node.hidden\",\n NodeMoved = \"node.moved\",\n NodePaginated = \"node.paginated\",\n NodeRemoved = \"node.removed\",\n NodeSelected = \"node.selected\",\n NodeShown = \"node.shown\",\n NodeUnchecked = \"node.unchecked\",\n}\n\n/** Be alias for Inspire.NodeConfig\n * @internal\n */\nexport interface BeInspireTreeNodeConfig {\n children?: BeInspireTreeNodeConfig[] | true;\n id?: string;\n text: string;\n itree?: BeInspireTreeNodeITree;\n}\n\n/** Be alias for Inspire.NodeConfig.ITree\n * @internal\n */\nexport interface BeInspireTreeNodeITree {\n icon?: string;\n checkboxTooltip?: string;\n dirtyTimestamp?: number;\n dirtyCounter?: number;\n state?: {\n checkboxVisible?: boolean;\n checkboxDisabled?: boolean;\n checked?: boolean;\n collapsed?: boolean;\n editable?: boolean;\n focused?: boolean;\n indeterminate?: boolean;\n loading?: boolean;\n selectable?: boolean;\n selected?: boolean;\n };\n}\n\n/** Data structure for [[BeInspireTreeNodeConfig]] with our injected props\n * @internal\n */\nexport interface BeInspireTreeNodePayloadConfig<TPayload> extends BeInspireTreeNodeConfig {\n /** Node's data. May be `undefined` if this is placeholder node. */\n payload?: TPayload;\n /** Index of the node at the parent level. Only set if this is a placeholder node. */\n placeholderIndex?: number;\n /** Reference to the tree */\n beInspireTree: BeInspireTree<TPayload>;\n}\n\n/** Type definition for all BeInspireTree nodes\n * @internal\n */\nexport interface BeInspireTreeNode<TPayload> extends Inspire.TreeNode, BeInspireTreeNodePayloadConfig<TPayload> {\n isDirty(): boolean;\n setDirty(value: boolean): void;\n /** @internal */\n resetBeInspireOverrides(): void;\n}\n\n/**\n * Definition of a list of [[BeInspireTreeNode]] with some additional filtering methods\n * @internal\n */\nexport interface BeInspireTreeNodes<TPayload> extends Array<BeInspireTreeNode<TPayload>> {\n node(id: string): BeInspireTreeNode<TPayload> | undefined;\n nodes(ids?: string[]): BeInspireTreeNodes<TPayload>;\n deepest(): BeInspireTreeNodes<TPayload>;\n flatten(): BeInspireTreeNodes<TPayload>;\n expanded(): BeInspireTreeNodes<TPayload>;\n collapsed(): BeInspireTreeNodes<TPayload>;\n selected(): BeInspireTreeNodes<TPayload>;\n visible(): BeInspireTreeNodes<TPayload>;\n}\n\n/** Array of tree node data elements\n * @internal\n */\nexport type BeInspireTreeDataProviderRaw<TPayload> = TPayload[];\n/** A Promise for DataProviderRaw\n * @internal\n */\nexport type BeInspireTreeDataProviderPromise<TPayload> = Promise<BeInspireTreeDataProviderRaw<TPayload>>;\n/** Signature for BeInspireTree data provider\n * @internal\n */\nexport type BeInspireTreeDataProviderMethod<TPayload> = (parent?: TPayload) => BeInspireTreeDataProviderPromise<TPayload>;\n/** Signature for BeInspireTree data provider\n * @internal\n */\nexport interface BeInspireTreeDataProviderInterface<TPayload> {\n getNodesCount(parent?: TPayload): Promise<number>;\n getNodes(parent?: TPayload, page?: PageOptions): BeInspireTreeDataProviderPromise<TPayload>;\n}\n/** Type definition for all BeInspireTree data providers\n * @internal\n */\nexport type BeInspireTreeDataProvider<TPayload> =\n BeInspireTreeDataProviderRaw<TPayload>\n | BeInspireTreeDataProviderPromise<TPayload>\n | BeInspireTreeDataProviderMethod<TPayload>\n | BeInspireTreeDataProviderInterface<TPayload>;\n\n/** Type definition for a BeInspireTree renderer\n * @internal\n */\nexport type BeInspireTreeRenderer<TPayload> = (rootNodes: Array<BeInspireTreeNode<TPayload>>) => void;\n\ntype BeInspireTreeDataFunc<TPayload> = (parent: BeInspireTreeNode<TPayload> | undefined,\n resolve: (nodes: Array<BeInspireTreeNodePayloadConfig<TPayload>>, totalCount: number) => any,\n reject: (err: Error) => any,\n pagination?: Inspire.Pagination,\n) => void;\ntype BeInspireTreeData<TPayload> =\n Array<BeInspireTreeNodePayloadConfig<TPayload>>\n | Promise<Array<BeInspireTreeNodePayloadConfig<TPayload>>>\n | BeInspireTreeDataFunc<TPayload>;\n\n/**\n * A context which keeps [[BeInspireTree]] events muted until\n * it gets disposed.\n * @internal\n */\nexport class EventsMuteContext implements IDisposable {\n\n private _triggeredEventsCount: number = 0;\n private _didMute = false;\n private _stopListening: (() => void) | undefined;\n\n public constructor(\n private _events: BeInspireTreeEvent[],\n private _mute: (events: BeInspireTreeEvent[]) => void,\n private _unmute: (events: BeInspireTreeEvent[]) => boolean,\n private _emit?: (events: BeInspireTreeEvent[]) => void,\n private _listen?: (events: BeInspireTreeEvent[], listener: (...values: any[]) => void) => (() => void),\n allowedEventTriggersBeforeMute: number = 0) {\n this.init(allowedEventTriggersBeforeMute);\n }\n\n private init(allowedEventTriggersBeforeMute: number) {\n if (0 === allowedEventTriggersBeforeMute || !this._listen) {\n this._mute(this._events);\n this._didMute = true;\n return;\n }\n const callback = () => {\n if (++this._triggeredEventsCount >= allowedEventTriggersBeforeMute) {\n this._mute(this._events);\n this._didMute = true;\n // istanbul ignore else\n if (this._stopListening) {\n this._stopListening();\n this._stopListening = undefined;\n }\n }\n };\n this._stopListening = this._listen(this._events, callback);\n }\n\n public dispose() {\n if (this._stopListening) {\n this._stopListening();\n this._stopListening = undefined;\n }\n\n if (!this._didMute)\n return;\n\n const didUnmute = this._unmute(this._events);\n if (didUnmute && this._emit)\n this._emit(this._events);\n }\n}\n\n/** Prototype for BeInspireTreeProps.mapPayloadToInspireNodeConfig\n * @internal\n */\nexport type MapPayloadToInspireNodeCallback<TPayload> = (payload: TPayload, remapper: MapPayloadToInspireNodeCallback<TPayload>) => BeInspireTreeNodeConfig;\n\ninterface DeferredLoadingHandler<TPayload> {\n requestNodeLoad(parent: BeInspireTreeNode<TPayload> | undefined, index: number): Promise<void>;\n disposeNodeCaches(parent?: BeInspireTreeNode<TPayload>): void;\n}\n\n/**\n * Configuration properties for [[BeInspireTree]]\n * @internal\n */\nexport interface BeInspireTreeProps<TNodePayload> {\n dataProvider: BeInspireTreeDataProvider<TNodePayload>;\n mapPayloadToInspireNodeConfig: MapPayloadToInspireNodeCallback<TNodePayload>;\n pageSize?: number;\n disposeChildrenOnCollapse?: boolean;\n}\n\n/**\n * Bentley wrapper for 'inspire-tree'\n * @internal\n */\nexport class BeInspireTree<TNodePayload> {\n\n private _tree: InspireTree;\n private _eventMutes: Map<BeInspireTreeEvent, number>;\n private _readyPromise!: Promise<void>;\n private _deferredLoadingHandler?: DeferredLoadingHandler<TNodePayload>;\n private _visibleCached?: BeInspireTreeNodes<TNodePayload>;\n private _suspendedRendering?: EventsMuteContext;\n public props: BeInspireTreeProps<TNodePayload>;\n\n constructor(props: BeInspireTreeProps<TNodePayload>) {\n this.props = props;\n this._eventMutes = new Map();\n\n const wrappedProvider = wrapDataProvider<TNodePayload>(this, props.dataProvider, props.mapPayloadToInspireNodeConfig);\n if (wrappedProvider instanceof WrappedInterfaceProvider)\n this._deferredLoadingHandler = wrappedProvider as WrappedInterfaceProvider<TNodePayload>;\n const config: Inspire.Config = {\n data: wrappedProvider as any, // note: invalid declaration for this callback\n selection: {\n multiple: true,\n autoDeselect: false,\n },\n };\n this._tree = new InspireTree(config);\n\n // make sure nodes are dirty when they're loaded\n this.on(BeInspireTreeEvent.ModelLoaded, (model: BeInspireTreeNodes<TNodePayload>) => {\n model.forEach((n) => n.markDirty());\n });\n this.on(BeInspireTreeEvent.ChildrenLoaded, (parent: BeInspireTreeNode<TNodePayload>) => {\n parent.getChildren().forEach((n) => n.markDirty());\n });\n\n // dispose `visible` cache when data is loaded or nodes are expanded or collapsed\n this.on([BeInspireTreeEvent.DataLoaded, BeInspireTreeEvent.NodeCollapsed, BeInspireTreeEvent.NodeExpanded], () => {\n this._visibleCached = undefined;\n });\n\n // we want to allow consumers of `BeInspireTree` to listen for `ModelLoaded`\n // and `ChildrenLoaded` events and do any kind of manipulation with them **before**\n // `ChangesApplied` event is emitted, so we have to suspend rendering when data is loaded\n // and resume it in `*Loaded` listener.\n this.on(BeInspireTreeEvent.DataLoaded, () => {\n this._suspendedRendering = this.pauseRendering();\n });\n this.on([BeInspireTreeEvent.ModelLoaded, BeInspireTreeEvent.ChildrenLoaded], () => {\n // NODES_LOADED_LAST_LISTENER: this listener must be executed last of all ModelLoaded and ChildrenLoaded\n // listeners to avoid excessive re-renders\n // istanbul ignore else\n if (this._suspendedRendering) {\n this._suspendedRendering.dispose();\n this._suspendedRendering = undefined;\n }\n });\n\n // override the `load` function to handle auto-expanding nodes\n // note: tree starts loading as soon as it gets created, so the first load\n // is not using this override - in that case auto-expansion is handled\n // in `onModelInvalidated` function\n const baseTreeLoad = this._tree.load;\n this._tree.load = async (loader): Promise<Inspire.TreeNodes> => {\n const result = await baseTreeLoad.call(this._tree, loader);\n await using(this.pauseRendering(), async (_r) => {\n await ensureNodesAutoExpanded(result);\n });\n return result;\n };\n\n // assign `disposeChildrenOnCollapse` handler if needed\n if (props.disposeChildrenOnCollapse) {\n if (!isDeferredDataProvider(props.dataProvider))\n throw new UiError(UiComponents.loggerCategory(this), `Property 'disposeChildrenOnCollapse' is only available on deferred data providers`);\n this.on(BeInspireTreeEvent.NodeCollapsed, (node: BeInspireTreeNode<TNodePayload>) => {\n if (this._deferredLoadingHandler)\n this._deferredLoadingHandler.disposeNodeCaches(node);\n node.children = true;\n });\n }\n\n // invalidate our `ready` promise\n this.onModelInvalidated();\n }\n\n private onModelInvalidated() {\n this._readyPromise = new Promise<void>((resolve) => {\n this._tree.once([BeInspireTreeEvent.ModelLoaded], resolve);\n }).then(async () => {\n // note: the following is only needed for the initial load of the tree\n // when our `load` override isn't assigned yet\n await using(this.pauseRendering(), async (_r) => {\n await ensureNodesAutoExpanded(this._tree.nodes());\n });\n });\n }\n\n public get ready(): Promise<void> { return this._readyPromise; }\n\n /**\n * Stop emitting the specified events until the returned\n * [[EventsMuteContext]] object is disposed\n */\n public mute(events: BeInspireTreeEvent[]): EventsMuteContext {\n return new EventsMuteContext(events, this.doMute, this.doUnmute);\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private doMute = (events: BeInspireTreeEvent[]) => {\n events.forEach((ev) => {\n if (!this._eventMutes.has(ev))\n this._eventMutes.set(ev, 1);\n else\n this._eventMutes.set(ev, this._eventMutes.get(ev)! + 1);\n });\n if (typeof this._tree.muted() !== \"boolean\")\n this._tree.mute(events.concat(this._tree.muted() as any));\n else\n this._tree.mute(events);\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private doUnmute = (events: BeInspireTreeEvent[]) => {\n const eventsToUnmute = events.filter((ev) => {\n let mutesCount = this._eventMutes.get(ev);\n if (mutesCount === undefined || mutesCount === 0)\n return false;\n this._eventMutes.set(ev, --mutesCount);\n return (mutesCount === 0);\n });\n this._tree.unmute(eventsToUnmute);\n return (eventsToUnmute.length > 0);\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private doEmit = (events: BeInspireTreeEvent[]) => {\n events.forEach((e) => this._tree.emit(e));\n };\n\n /**\n * Stop calling the renderer method until the returned\n * object is disposed. When that happens, the [[BeInspireTreeEvent.ChangesApplied]]\n * event is emitted if any changes in the hierarchy happened during the pause\n */\n public pauseRendering(allowedRendersBeforePause: number = 0): EventsMuteContext {\n const doEmit = (events: BeInspireTreeEvent[]) => {\n if (this.visible().some((n) => n.isDirty())) {\n this.doEmit(events);\n }\n };\n const doListen = (events: BeInspireTreeEvent[], listener: (...values: any[]) => void) => {\n this.on(events, listener);\n return () => this._tree.removeListener(events, listener);\n };\n return new EventsMuteContext([BeInspireTreeEvent.ChangesApplied], this.doMute, this.doUnmute,\n doEmit, doListen, allowedRendersBeforePause);\n }\n\n /**\n * Request a new render of current model.\n *\n * @internal\n */\n public applyChanges() {\n this.doEmit([BeInspireTreeEvent.ChangesApplied]);\n }\n\n /** Add a listener for specific event */\n public on(event: BeInspireTreeEvent | BeInspireTreeEvent[], listener: (...values: any[]) => void): this {\n const events = Array.isArray(event) ? event : [event];\n events.forEach((e) => {\n // note: we want our specific listener to be executed last, so have to make sure no other listeners\n // are appended to the listeners list (see NODES_LOADED_LAST_LISTENER)\n const shouldInsertBeforeLast = ((e === BeInspireTreeEvent.ModelLoaded && this._tree.listeners(e).length >= 2)\n || (e === BeInspireTreeEvent.ChildrenLoaded && this._tree.listeners(e).length >= 2));\n if (shouldInsertBeforeLast)\n this._tree.listeners(e).splice(this._tree.listeners(e).length - 1, 0, listener);\n else\n this._tree.on(e, listener);\n });\n return this;\n }\n\n /** Remove listener for specific event */\n public removeListener(event: BeInspireTreeEvent | BeInspireTreeEvent[], listener: (...values: any[]) => void): this {\n const events = Array.isArray(event) ? event : [event];\n events.forEach((e) => this._tree.removeListener(e, listener));\n return this;\n }\n\n /** Remove all listeners for specific event(s) */\n public removeAllListeners(event?: BeInspireTreeEvent | BeInspireTreeEvent[]) {\n if (!event) {\n this._tree.removeAllListeners(undefined);\n return;\n }\n const events = Array.isArray(event) ? event : /* istanbul ignore next */[event];\n events.forEach((e) => this._tree.removeAllListeners(e));\n }\n\n /** Get root node with the specified id */\n public node(id: string): BeInspireTreeNode<TNodePayload> | undefined {\n return toNode(this._tree.node(id));\n }\n\n /** Get root nodes with the specified ids */\n public nodes(ids?: string[]) {\n return toNodes<TNodePayload>(this._tree.nodes(ids));\n }\n\n /** Get flat list of all available nodes */\n public flatten() {\n return toNodes<TNodePayload>(this._tree.flatten(() => true));\n }\n\n /** Get a flat list of available leaf nodes */\n public deepest() {\n return toNodes<TNodePayload>(this._tree.deepest());\n }\n\n /** Get a flat list of expanded nodes */\n public expanded() {\n return toNodes<TNodePayload>(this._tree.expanded());\n }\n\n /** Get a flat list of collapsed nodes */\n public collapsed() {\n return toNodes<TNodePayload>(this._tree.collapsed());\n }\n\n /** Get a flat list of selected nodes */\n public selected() {\n return toNodes<TNodePayload>(this._tree.selected());\n }\n\n /** Get a flat list of visible nodes */\n public visible() {\n if (!this._visibleCached)\n this._visibleCached = toNodes<TNodePayload>(this._tree.visible());\n return this._visibleCached;\n }\n\n /** Reload the tree */\n public async reload() {\n if (this._deferredLoadingHandler)\n this._deferredLoadingHandler.disposeNodeCaches(undefined);\n await using(this.pauseRendering(), async (_r) => {\n const rootNodes = await this._tree.reload();\n rootNodes.forEach((n) => toNode(n).setDirty(true));\n });\n }\n\n /**\n * Deselects all nodes\n */\n public deselectAll(muteEvents = true) {\n using(this.mute((muteEvents) ? [BeInspireTreeEvent.NodeDeselected] : []), (_r) => {\n this._tree.deselectDeep();\n });\n }\n\n /**\n * Returns all visible nodes that are located between the two input nodes (inclusive).\n * Input nodes can be provided in any order.\n */\n public getVisibleNodesBetween(node1: BeInspireTreeNode<TNodePayload>, node2: BeInspireTreeNode<TNodePayload>): Array<BeInspireTreeNode<TNodePayload>> {\n let startIndex = -1;\n let endIndex = -1;\n for (let i = 0; i < this.visible().length; ++i) {\n const vn = this.visible()[i];\n if (vn.id === node1.id)\n startIndex = i;\n if (vn.id === node2.id)\n endIndex = i;\n if (startIndex !== -1 && endIndex !== -1)\n break;\n }\n\n if (startIndex > endIndex)\n [startIndex, endIndex] = [endIndex, startIndex];\n\n return this.visible().slice(startIndex, endIndex + 1);\n }\n\n /**\n * Selects all visible nodes that are located between the two input nodes (inclusive).\n * Input nodes can be provided in any order.\n */\n public selectBetween(node1: BeInspireTreeNode<TNodePayload>, node2: BeInspireTreeNode<TNodePayload>, muteEvents = true): Array<BeInspireTreeNode<TNodePayload>> {\n return using(this.mute((muteEvents) ? [BeInspireTreeEvent.NodeSelected] : []), (_r) => {\n const nodesBetween = this.getVisibleNodesBetween(node1, node2);\n nodesBetween.forEach((n) => n.select());\n return nodesBetween;\n });\n }\n\n private createSelectedNodePredicate(nodesToSelect?: string[] | ((payload: TNodePayload) => boolean)): Inspire.NodeIteratee | undefined {\n if (!nodesToSelect)\n return undefined;\n\n let predicate: Inspire.NodeIteratee;\n if (typeof nodesToSelect === \"function\") {\n predicate = (n: Inspire.TreeNode) => (toNode<TNodePayload>(n).payload && nodesToSelect(toNode<TNodePayload>(n).payload!));\n } else {\n predicate = (n: Inspire.TreeNode) => (-1 !== nodesToSelect.indexOf(toNode(n).id!));\n }\n return predicate;\n }\n\n private updateSelection(selectHandler: (predicate: Inspire.NodeIteratee) => void, nodesToSelect: string[] | ((payload: TNodePayload) => boolean) | undefined, muteEvents: boolean) {\n const predicate = this.createSelectedNodePredicate(nodesToSelect);\n if (!predicate)\n return;\n\n using(this.mute((muteEvents) ? [BeInspireTreeEvent.NodeSelected, BeInspireTreeEvent.NodeDeselected] : []), (_r) => {\n this._tree.disableDeselection();\n selectHandler(predicate);\n this._tree.enableDeselection();\n });\n }\n\n /**\n * Deselects everything and selects only nodes that meet the `nodesToSelect` criteria\n */\n public updateTreeSelection(nodesToSelect?: string[] | ((payload: TNodePayload) => boolean), muteEvents = true) {\n const selectFunc = (predicate: Inspire.NodeIteratee) => {\n this.flatten().forEach((n) => {\n const shouldSelect = predicate(n);\n if (shouldSelect && !n.selected())\n n.select();\n else if (!shouldSelect && n.selected())\n n.deselect();\n });\n };\n return this.updateSelection(selectFunc, nodesToSelect, muteEvents);\n }\n\n /**\n * Updates selection state of provided `nodes` based on `nodesToSelect` criteria\n */\n public updateNodesSelection(nodes: BeInspireTreeNodes<TNodePayload> | Inspire.TreeNodes, nodesToSelect?: string[] | ((payload: TNodePayload) => boolean), muteEvents = true) {\n const selectFunc = (predicate: Inspire.NodeIteratee) => {\n let filtered: Inspire.TreeNode[];\n if ((nodes as Inspire.TreeNodes).filterBy !== undefined)\n filtered = (nodes as Inspire.TreeNodes).filterBy(predicate).map((n) => n);\n else\n filtered = (nodes as BeInspireTreeNodes<TNodePayload>).filter(predicate);\n filtered.forEach((node) => node.select());\n };\n return this.updateSelection(selectFunc, nodesToSelect, muteEvents);\n }\n\n private updateNodeCheckboxInfo(node: BeInspireTreeNode<TNodePayload>, status: CheckBoxInfo) {\n let hasChanges = false;\n if (node.itree!.checkboxTooltip !== status.tooltip) {\n node.itree!.checkboxTooltip = status.tooltip;\n hasChanges = true;\n }\n if (node.itree!.state!.checkboxVisible !== status.isVisible) {\n node.itree!.state!.checkboxVisible = status.isVisible;\n hasChanges = true;\n }\n if (node.itree!.state!.checkboxDisabled !== status.isDisabled) {\n node.itree!.state!.checkboxDisabled = status.isDisabled;\n hasChanges = true;\n }\n if (status.state === CheckBoxState.On && !node.itree!.state!.checked) {\n node.check();\n hasChanges = true;\n } else if (status.state === CheckBoxState.Off && node.itree!.state!.checked) {\n node.uncheck();\n hasChanges = true;\n }\n if (hasChanges) {\n node.markDirty();\n this.applyChanges();\n }\n }\n\n /**\n * Updates checkbox states of the whole tree using the `checkboxInfo` callback function\n */\n public async updateTreeCheckboxes(checkboxInfo: ((payload: TNodePayload) => CheckBoxInfo | Promise<CheckBoxInfo>), muteEvents = true) {\n await this.updateNodesCheckboxes(this.flatten(), checkboxInfo, muteEvents);\n }\n\n /**\n * Updates checkbox states of provided `nodes` based on `checkboxInfo` callback function\n */\n public async updateNodesCheckboxes(nodes: BeInspireTreeNodes<TNodePayload>, checkboxInfo: ((payload: TNodePayload) => CheckBoxInfo | Promise<CheckBoxInfo>), muteEvents = true) {\n await using(this.pauseRendering(), async (_r1) => {\n await using(this.mute((muteEvents) ? [BeInspireTreeEvent.NodeChecked, BeInspireTreeEvent.NodeUnchecked] : []), async (_r2) => {\n const promises = new Array<Promise<void>>();\n nodes.forEach((n) => {\n if (!n.payload)\n return;\n\n const status = checkboxInfo(n.payload);\n if (isPromiseLike(status))\n promises.push(status.then((s) => this.updateNodeCheckboxInfo(n, s)));\n else\n this.updateNodeCheckboxInfo(n, status);\n });\n if (promises.length !== 0)\n await Promise.all(promises);\n });\n });\n }\n\n /** @internal */\n public createPlaceholderNode(index: number, parent?: BeInspireTreeNode<TNodePayload>): BeInspireTreeNode<TNodePayload> {\n const node = toNode<TNodePayload>(this._tree.createNode({\n id: `${parent ? parent.id : \"\"}-not_loaded[${index}]`,\n text: \"\",\n payload: undefined as any,\n beInspireTree: this,\n }));\n node.placeholderIndex = index;\n return node;\n }\n\n /**\n * Request a node at the specified index to be loaded for the given parent. Only\n * makes sense on a paginated tree, throws otherwise.\n */\n public async requestNodeLoad(parent: BeInspireTreeNode<TNodePayload> | undefined, index: number): Promise<void> {\n if (!this._deferredLoadingHandler)\n throw new UiError(UiComponents.loggerCategory(this), `requestNodeLoad should only be called when pagination is enabled`);\n return this._deferredLoadingHandler.requestNodeLoad(parent, index);\n }\n\n /** @internal */\n public async loadNodes(): Promise<void> {\n await this._tree.load((this._tree as any).config.data);\n }\n}\n\nasync function loadChildrenRecursive(n: Inspire.TreeNode, filterNodeIds: string[]): Promise<Inspire.TreeNodes> {\n const children = await n.loadChildren();\n await ensureChildrenLoaded(children, filterNodeIds);\n return children;\n}\n\nconst needsChildrenLoaded = (n: Inspire.TreeNode) => n.hasOrWillHaveChildren() && !(n as any).hasLoadedChildren();\n\nasync function ensureChildrenLoaded(branch: Inspire.TreeNodes | Inspire.TreeNode[], filterNodeIds: string[]): Promise<void> {\n const childNodes = branch.filter((n) => filterNodeIds.includes(toNode(n).id!));\n const allChildren = (await Promise.all(childNodes.map(async (n) => {\n if (needsChildrenLoaded(n))\n return loadChildrenRecursive(toNode(n), filterNodeIds);\n return n.getChildren();\n }))).reduce((children: Inspire.TreeNode[], curr: Inspire.TreeNodes) => {\n children.push(...curr);\n return children;\n }, []);\n await ensureNodesAutoExpanded(allChildren);\n}\n\nasync function ensureNodesAutoExpanded(branch: Inspire.TreeNodes | Inspire.TreeNode[]): Promise<void> {\n const idsToExpand = branch.filter((n) => n.expanded()).map((n) => toNode(n).id!);\n if (idsToExpand.length > 0)\n await ensureChildrenLoaded(branch, idsToExpand);\n}\n\n/** @internal */\nexport const toNode = <TPayload>(inspireNode: Inspire.TreeNode): BeInspireTreeNode<TPayload> => {\n // When inspire-tree loads child nodes, some existing nodes transfer their properties to freshly created objects.\n // Therefore, we cannot capture and use the `inspireNode` reference within methods we are about to assign to the node.\n\n const anyNode = inspireNode as any;\n if (!inspireNode) {\n // some inspire tree methods return `undefined` even when they say they don't - handle\n // the case by returning undefined as well\n return anyNode;\n }\n\n if (!anyNode._loadChildrenOverriden) {\n const loadChildrenBase = inspireNode.loadChildren;\n inspireNode.loadChildren = async function (): Promise<Inspire.TreeNodes> {\n const children = await loadChildrenBase.call(this);\n // note: inspire-tree calls BeInspireTreeEvent.ChildrenLoaded as part of\n // the above call, so listeners get called before we get a chance to auto-expand...\n await ensureNodesAutoExpanded(children);\n return children;\n };\n anyNode._loadChildrenOverriden = loadChildrenBase;\n }\n\n // note: default `check()` & `uncheck()` implementations fiddle with\n // parent node which we don't want\n if (!anyNode._checkOverriden) {\n const checkBase = inspireNode.check;\n anyNode.check = function (): Inspire.TreeNode {\n // istanbul ignore else\n if (!this.itree!.state!.checked) {\n this.itree!.state!.checked = true;\n this._tree.emit(BeInspireTreeEvent.NodeChecked, this);\n this.markDirty();\n this._tree.applyChanges();\n }\n return this;\n };\n anyNode._checkOverriden = checkBase;\n }\n if (!anyNode._uncheckOverriden) {\n const uncheckBase = inspireNode.uncheck;\n anyNode.uncheck = function (): Inspire.TreeNode {\n // istanbul ignore else\n if (this.itree!.state!.checked) {\n this.itree!.state!.checked = false;\n this._tree.emit(BeInspireTreeEvent.NodeUnchecked, this);\n this.markDirty();\n this._tree.applyChanges();\n }\n return this;\n };\n anyNode._uncheckOverriden = uncheckBase;\n }\n\n // inject a method to reset overrides\n anyNode.resetBeInspireOverrides = function () {\n this.loadChildren = this._loadChildrenOverriden;\n delete this._loadChildrenOverriden;\n this.check = this._checkOverriden;\n delete this._checkOverriden;\n this.uncheck = this._uncheckOverriden;\n delete this._uncheckOverriden;\n };\n\n // inject a couple of methods to handle dirtiness\n anyNode.isDirty = function () { return this.itree.dirty; };\n anyNode.setDirty = function (value: boolean) {\n if (value)\n this.markDirty();\n else\n this.itree.dirty = value;\n };\n if (!anyNode._markDirtyOverriden) {\n const markDirtyBase = inspireNode.markDirty;\n anyNode.markDirty = function () {\n const result = markDirtyBase.call(this);\n const currTimestamp = (new Date()).getTime();\n if (this.itree.dirtyTimestamp === currTimestamp) {\n ++this.itree.dirtyCounter;\n } else {\n this.itree.dirtyTimestamp = currTimestamp;\n this.itree.dirtyCounter = 0;\n }\n return result;\n };\n anyNode._markDirtyOverriden = markDirtyBase;\n }\n\n return anyNode;\n};\n\n/** @internal */\nexport const toNodes = <TPayload>(inspireNodes: Inspire.TreeNodes): BeInspireTreeNodes<TPayload> => {\n return Object.assign(inspireNodes.map((n) => toNode<TPayload>(n)), {\n node: (id: string) => toNode<TPayload>(inspireNodes.node(id)),\n nodes: (ids?: string[]) => toNodes<TPayload>(inspireNodes.nodes(ids)),\n deepest: () => toNodes<TPayload>(inspireNodes.deepest()),\n flatten: () => toNodes<TPayload>(inspireNodes.flatten(() => true)),\n expanded: () => toNodes<TPayload>(inspireNodes.expanded()),\n collapsed: () => toNodes<TPayload>(inspireNodes.collapsed()),\n selected: () => toNodes<TPayload>(inspireNodes.selected()),\n visible: () => toNodes<TPayload>(inspireNodes.visible()),\n });\n};\n\nconst isDataProviderInterface = (obj: unknown): obj is BeInspireTreeDataProviderInterface<any> => {\n return (typeof obj === \"object\")\n && ((obj as any).getNodesCount && (typeof (obj as any).getNodesCount) === \"function\")\n && ((obj as any).getNodes && (typeof (obj as any).getNodes) === \"function\");\n};\n\nconst isDeferredDataProvider = (provider: BeInspireTreeDataProvider<any>): boolean => {\n return (typeof provider === \"function\") || isDataProviderInterface(provider);\n};\n\nconst nodeToPayload = <TPayload>(node?: BeInspireTreeNodePayloadConfig<TPayload>) => (node ? node.payload : undefined);\n\nclass PayloadToNodeRemapper<TPayload> {\n constructor(\n private _tree: BeInspireTree<TPayload>,\n private _mapPayloadToInspireNodeConfig: MapPayloadToInspireNodeCallback<TPayload>) {\n }\n public remapOne = (payload: TPayload): BeInspireTreeNodePayloadConfig<TPayload> => ({\n ...this._mapPayloadToInspireNodeConfig(payload, this.remapOne),\n beInspireTree: this._tree,\n payload,\n });\n public remapMany = (payload: TPayload[]): Array<BeInspireTreeNodePayloadConfig<TPayload>> => {\n return payload.map(this.remapOne);\n };\n}\n\nfunction onNodesDelayLoaded<TPayload>(parent: BeInspireTreeNode<TPayload> | undefined, nodes: Array<BeInspireTreeNodePayloadConfig<TPayload>>) {\n if (parent) {\n // inspire-tree emits `data.loaded` event only when root nodes are loaded, but\n // we also need it to be emitted when children are loaded - we depend on it being called\n // after the children are loaded but before the `children.loaded` event is emitted.\n parent.tree().emit(BeInspireTreeEvent.DataLoaded, nodes);\n }\n}\n\nconst wrapDataProvider = <TPayload>(tree: BeInspireTree<TPayload>, provider: BeInspireTreeDataProvider<TPayload>, mapPayloadToInspireNodeConfig: MapPayloadToInspireNodeCallback<TPayload>): BeInspireTreeData<TPayload> => {\n const remapper = new PayloadToNodeRemapper(tree, mapPayloadToInspireNodeConfig);\n\n if (Array.isArray(provider)) {\n // array data provider\n return remapper.remapMany(provider);\n }\n\n if (typeof provider === \"function\") {\n // method data provider\n return ((parent: BeInspireTreeNode<TPayload> | undefined, resolve: (nodes: Array<BeInspireTreeNodePayloadConfig<TPayload>>, totalCount: number) => any, _reject: (err: Error) => any) => {\n const payload = nodeToPayload(parent);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n provider(payload).then(remapper.remapMany).then((nodes) => {\n onNodesDelayLoaded(parent, nodes);\n resolve(nodes, nodes.length);\n });\n });\n }\n\n if (isDataProviderInterface(provider)) {\n // interface data provider\n return new WrappedInterfaceProvider({\n tree,\n provider,\n nodesRemapper: remapper,\n });\n }\n\n // promise data provider\n return provider.then(remapper.remapMany);\n};\n\ninterface NodesLoadResult<TPayload> {\n totalNodesCount: number;\n nodes: TPayload[];\n}\n\ninterface WrappedInterfaceProviderProps<TPayload> {\n tree: BeInspireTree<TPayload>;\n provider: BeInspireTreeDataProviderInterface<TPayload>;\n nodesRemapper: PayloadToNodeRemapper<TPayload>;\n}\nclass WrappedInterfaceProvider<TPayload> extends CallableInstance implements DeferredLoadingHandler<TPayload> {\n private _tree: BeInspireTree<TPayload>;\n private _provider: BeInspireTreeDataProviderInterface<TPayload>;\n private _paginationHelper?: PaginationHelper<NodesLoadResult<TPayload>>;\n private _nodesRemapper: PayloadToNodeRemapper<TPayload>;\n private _stashedPages = new Map<string | undefined, { total: number, pages: Array<{ start: number, nodes: TPayload[] }> }>();\n private _initialRequests = new Set<string | undefined>();\n\n public constructor(props: WrappedInterfaceProviderProps<TPayload>) {\n super(\"inspireLoad\");\n this._tree = props.tree;\n this._provider = props.provider;\n this._nodesRemapper = props.nodesRemapper;\n if (undefined !== this._tree.props.pageSize && 0 !== this._tree.props.pageSize)\n this._paginationHelper = new PaginationHelper(this._tree.props.pageSize, this._pagedLoad, this._onPageLoaded);\n }\n\n public requestNodeLoad = async (parent: BeInspireTreeNode<TPayload> | undefined, index: number): Promise<void> => {\n if (!this._paginationHelper)\n throw new UiError(UiComponents.loggerCategory(this), `requestNodeLoad should only be called when pagination is enabled`);\n await this._paginationHelper.request(parent ? parent.id : undefined, index);\n };\n\n public disposeNodeCaches(node?: BeInspireTreeNode<TPayload>) {\n if (!node) {\n this._stashedPages.clear();\n if (this._paginationHelper)\n this._paginationHelper.disposeCaches(undefined);\n } else {\n node.getChildren().forEach((c) => this.disposeNodeCaches(toNode(c)));\n this._stashedPages.delete(node.id);\n if (this._paginationHelper)\n this._paginationHelper.disposeCaches(node.id);\n }\n }\n\n /** Called by PaginationHelper to load a page */\n private _pagedLoad = async (parentId: string | undefined, pageStart: number): Promise<NodesLoadResult<TPayload>> => {\n const parentNode = parentId ? this._tree.node(parentId) : undefined;\n const parentPayload = parentNode ? parentNode.payload : undefined;\n\n const handleCollapsedParent = () => {\n if (this._tree.props.disposeChildrenOnCollapse && parentNode && parentNode.collapsed())\n throw new UiError(UiComponents.loggerCategory(this), `Parent node collapsed while children were being loaded`);\n };\n\n let totalNodesCount: number | undefined;\n if (parentNode && isArrayLike(parentNode.children)) {\n totalNodesCount = parentNode.getChildren().length;\n } else if (!parentNode) {\n let rootNodesCount = 0;\n try { rootNodesCount = this._tree.nodes().length; } catch (e) { }\n if (rootNodesCount > 0)\n totalNodesCount = rootNodesCount;\n }\n if (undefined === totalNodesCount) {\n totalNodesCount = await this._provider.getNodesCount(parentPayload);\n handleCollapsedParent();\n }\n\n const page: PageOptions = {\n start: pageStart,\n size: this._paginationHelper!.pageSize,\n };\n const nodes = await this._provider.getNodes(parentPayload, page);\n handleCollapsedParent();\n return {\n totalNodesCount,\n nodes,\n };\n };\n\n /** Called by PaginationHelper when a page is finished loading */\n private _onPageLoaded = async (parentId: string | undefined, pageStart: number, result: NodesLoadResult<TPayload>) => {\n // stash the result\n const stash = {\n total: result.totalNodesCount,\n pages: [{ start: pageStart, nodes: result.nodes }],\n };\n this._stashedPages.set(parentId, stash);\n\n if (!this._initialRequests.delete(parentId)) {\n // because the load is going to happen almost synchronously (just\n // merge current nodes with stash), there's no point to show the\n // `loading` state and then re-render with `completed` state + nodes.\n // instead, just pause rendering until we have the nodes\n await using(this._tree.pauseRendering(), async (_r) => {\n // request children for `parent` to reload - the load handler\n // will merge the current children with stash (see `inspireLoad`)\n if (parentId)\n await this._tree.node(parentId)!.loadChildren();\n else\n await this._tree.loadNodes();\n });\n }\n };\n\n private createPagedNodesResult(parent: BeInspireTreeNode<TPayload> | undefined): Array<BeInspireTreeNodePayloadConfig<TPayload>> {\n const parentId = parent ? parent.id : undefined;\n const currNodes = parent ? toNodes(parent.getChildren()) : this._tree.nodes();\n const stash = this._stashedPages.get(parentId);\n if (!stash) {\n // nothing in stash - return current nodes\n return currNodes as any;\n }\n this._stashedPages.delete(parentId);\n\n // merge current nodes with stash content, fill missing\n // pieces with placeholders\n const resolvedNodes = new Array(stash.total);\n stash.pages.forEach((page) => {\n page.nodes.forEach((n, index) => {\n resolvedNodes[page.start + index] = this._nodesRemapper.remapOne(n);\n });\n });\n for (let i = 0; i < stash.total; ++i) {\n if (resolvedNodes[i])\n continue;\n if (currNodes[i]) {\n currNodes[i].resetBeInspireOverrides();\n resolvedNodes[i] = currNodes[i];\n } else {\n resolvedNodes[i] = this._tree.createPlaceholderNode(i, parent);\n }\n }\n return resolvedNodes;\n }\n\n /** Called by inspire-tree through CallableInstance */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private inspireLoad(parent: BeInspireTreeNode<TPayload> | undefined, resolve: (nodes: Array<BeInspireTreeNodePayloadConfig<TPayload>>, totalCount: number) => any) {\n if (!this._paginationHelper) {\n // pagination is disabled - just load all nodes for the parent\n const payload = parent ? parent.payload : undefined;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._provider.getNodes(payload).then((payloads) => {\n const nodes = this._nodesRemapper.remapMany(payloads);\n onNodesDelayLoaded(parent, nodes);\n resolve(nodes, nodes.length);\n });\n return;\n }\n\n // paginated behavior\n const parentId = parent ? parent.id : undefined;\n const complete = () => {\n // note: the parent might be over-written due to other sibling page loads,\n // so we have to make sure we're using the right parent and not the stale one\n const actualParent = parent ? parent.beInspireTree.node(parent.id!) : undefined;\n const pagedNodes = this.createPagedNodesResult(actualParent);\n if (actualParent && isArrayLike(actualParent.children)) {\n // reset so concat doesn't duplicate nodes\n actualParent.children = true;\n }\n onNodesDelayLoaded(actualParent, pagedNodes);\n if (actualParent && actualParent !== parent) {\n // if the `parent` is indeed stale, then calling resolve won't add child nodes\n // to the tree - we have to additionally add them to the actual parent that's not stale\n // see VSTS#152885\n actualParent.addChildren(pagedNodes);\n }\n resolve(pagedNodes, pagedNodes.length);\n };\n if (!this._paginationHelper.hasOrWillHaveLoadedPages(parentId)) {\n // parent has no children yet - initiate a request and wait\n this._initialRequests.add(parentId);\n this.requestNodeLoad(parent, 0).then(complete); // eslint-disable-line @typescript-eslint/no-floating-promises\n } else {\n complete();\n }\n }\n}\ninterface WrappedInterfaceProvider<TPayload> {\n // eslint-disable-next-line @typescript-eslint/prefer-function-type\n (parent: BeInspireTreeNode<TPayload> | undefined, resolve: (nodes: Array<BeInspireTreeNodePayloadConfig<TPayload>>, totalCount: number) => any): void;\n}\n\ntype PagedLoadHandler<TLoadResult> = (parentId: string | undefined, pageStart: number) => Promise<TLoadResult>;\ntype PageLoadedCallback<TLoadResult> = (parentId: string | undefined, pageStart: number, result: TLoadResult) => Promise<void>;\nclass PaginationHelper<TPageLoadResult> {\n public readonly pageSize: number;\n private _loadedPages: Map<string | undefined, Set<number>>;\n private _requestedPages: Map<string | undefined, Map<number, Promise<void>>>;\n private _loadHandler: PagedLoadHandler<TPageLoadResult>;\n private _onPageLoaded: PageLoadedCallback<TPageLoadResult>;\n\n constructor(pageSize: number, loadHandler: PagedLoadHandler<TPageLoadResult>, onPageLoaded: PageLoadedCallback<TPageLoadResult>) {\n this.pageSize = pageSize;\n this._loadHandler = loadHandler;\n this._onPageLoaded = onPageLoaded;\n this._loadedPages = new Map();\n this._requestedPages = new Map();\n }\n\n private getPageStartIndex(nodeIndex: number) {\n return nodeIndex - nodeIndex % this.pageSize;\n }\n\n private async createRequest(parentId: string | undefined, pageStart: number): Promise<void> {\n return this._loadHandler(parentId, pageStart).then(async (result) => {\n await this.onRequestHandled(parentId, pageStart, result);\n }).catch(() => {\n this.onRequestRejected(parentId, pageStart);\n });\n }\n\n public hasOrWillHaveLoadedPages(parentId: string | undefined): boolean {\n return this._loadedPages.has(parentId) || this._requestedPages.has(parentId);\n }\n\n public disposeCaches(parentId: string | undefined) {\n if (!parentId) {\n this._loadedPages.clear();\n this._requestedPages.clear();\n } else {\n this._loadedPages.delete(parentId);\n this._requestedPages.delete(parentId);\n }\n }\n\n public async request(parentId: string | undefined, index: number): Promise<void> {\n const pageStart = this.getPageStartIndex(index);\n const loadedPages = this._loadedPages.get(parentId);\n if (loadedPages !== undefined && loadedPages.has(pageStart)) {\n // already loaded\n return;\n }\n let requestedPages = this._requestedPages.get(parentId);\n if (requestedPages === undefined) {\n requestedPages = new Map();\n this._requestedPages.set(parentId, requestedPages);\n }\n let request = requestedPages.get(pageStart);\n if (!request) {\n request = this.createRequest(parentId, pageStart);\n requestedPages.set(pageStart, request);\n }\n await request;\n }\n\n private async onRequestHandled(parentId: string | undefined, pageStart: number, result: TPageLoadResult) {\n // add the request to loaded list\n let loadedPages = this._loadedPages.get(parentId);\n if (!loadedPages) {\n loadedPages = new Set();\n this._loadedPages.set(parentId, loadedPages);\n }\n loadedPages.add(pageStart);\n\n // remove request from active requests list\n const requestedPages = this._requestedPages.get(parentId);\n if (requestedPages && requestedPages.delete(pageStart)) {\n // callback\n await this._onPageLoaded(parentId, pageStart, result);\n }\n }\n\n private onRequestRejected(parentId: string | undefined, pageStart: number) {\n // remove request from active requests list\n const requestedPages = this._requestedPages.get(parentId);\n // istanbul ignore next\n if (requestedPages)\n requestedPages.delete(pageStart);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BeInspireTree.js","sourceRoot":"","sources":["../../../../src/components-react/breadcrumb/BeInspireTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tree\r\n */\r\n\r\nimport { CallableInstance } from \"callable-instance2/import\";\r\nimport InspireTree, * as Inspire from \"inspire-tree\";\r\nimport { isArrayLike } from \"lodash\";\r\nimport { IDisposable, using } from \"@itwin/core-bentley\";\r\nimport { UiError } from \"@itwin/appui-abstract\";\r\nimport { CheckBoxInfo, CheckBoxState, isPromiseLike } from \"@itwin/core-react\";\r\nimport { PageOptions } from \"../common/PageOptions\";\r\nimport { UiComponents } from \"../UiComponents\";\r\n\r\n// istanbul ignore file\r\n\r\n/**\r\n * Enum containing all events that may be emitted by [[BeInspireTree]]\r\n * @internal\r\n */\r\nexport enum BeInspireTreeEvent {\r\n ChangesApplied = \"changes.applied\",\r\n ChildrenLoaded = \"children.loaded\",\r\n DataLoaded = \"data.loaded\",\r\n DataLoadError = \"data.loaderror\",\r\n ModelLoaded = \"model.loaded\",\r\n NodeAdded = \"node.added\",\r\n NodeBlurred = \"node.blurred\",\r\n NodeChecked = \"node.checked\",\r\n NodeCollapsed = \"node.collapsed\",\r\n NodeDeselected = \"node.deselected\",\r\n NodeEdited = \"node.edited\",\r\n NodeExpanded = \"node.expanded\",\r\n NodeFocused = \"node.focused\",\r\n NodeHidden = \"node.hidden\",\r\n NodeMoved = \"node.moved\",\r\n NodePaginated = \"node.paginated\",\r\n NodeRemoved = \"node.removed\",\r\n NodeSelected = \"node.selected\",\r\n NodeShown = \"node.shown\",\r\n NodeUnchecked = \"node.unchecked\",\r\n}\r\n\r\n/** Be alias for Inspire.NodeConfig\r\n * @internal\r\n */\r\nexport interface BeInspireTreeNodeConfig {\r\n children?: BeInspireTreeNodeConfig[] | true;\r\n id?: string;\r\n text: string;\r\n itree?: BeInspireTreeNodeITree;\r\n}\r\n\r\n/** Be alias for Inspire.NodeConfig.ITree\r\n * @internal\r\n */\r\nexport interface BeInspireTreeNodeITree {\r\n icon?: string;\r\n checkboxTooltip?: string;\r\n dirtyTimestamp?: number;\r\n dirtyCounter?: number;\r\n state?: {\r\n checkboxVisible?: boolean;\r\n checkboxDisabled?: boolean;\r\n checked?: boolean;\r\n collapsed?: boolean;\r\n editable?: boolean;\r\n focused?: boolean;\r\n indeterminate?: boolean;\r\n loading?: boolean;\r\n selectable?: boolean;\r\n selected?: boolean;\r\n };\r\n}\r\n\r\n/** Data structure for [[BeInspireTreeNodeConfig]] with our injected props\r\n * @internal\r\n */\r\nexport interface BeInspireTreeNodePayloadConfig<TPayload> extends BeInspireTreeNodeConfig {\r\n /** Node's data. May be `undefined` if this is placeholder node. */\r\n payload?: TPayload;\r\n /** Index of the node at the parent level. Only set if this is a placeholder node. */\r\n placeholderIndex?: number;\r\n /** Reference to the tree */\r\n beInspireTree: BeInspireTree<TPayload>;\r\n}\r\n\r\n/** Type definition for all BeInspireTree nodes\r\n * @internal\r\n */\r\nexport interface BeInspireTreeNode<TPayload> extends Inspire.TreeNode, BeInspireTreeNodePayloadConfig<TPayload> {\r\n isDirty(): boolean;\r\n setDirty(value: boolean): void;\r\n /** @internal */\r\n resetBeInspireOverrides(): void;\r\n}\r\n\r\n/**\r\n * Definition of a list of [[BeInspireTreeNode]] with some additional filtering methods\r\n * @internal\r\n */\r\nexport interface BeInspireTreeNodes<TPayload> extends Array<BeInspireTreeNode<TPayload>> {\r\n node(id: string): BeInspireTreeNode<TPayload> | undefined;\r\n nodes(ids?: string[]): BeInspireTreeNodes<TPayload>;\r\n deepest(): BeInspireTreeNodes<TPayload>;\r\n flatten(): BeInspireTreeNodes<TPayload>;\r\n expanded(): BeInspireTreeNodes<TPayload>;\r\n collapsed(): BeInspireTreeNodes<TPayload>;\r\n selected(): BeInspireTreeNodes<TPayload>;\r\n visible(): BeInspireTreeNodes<TPayload>;\r\n}\r\n\r\n/** Array of tree node data elements\r\n * @internal\r\n */\r\nexport type BeInspireTreeDataProviderRaw<TPayload> = TPayload[];\r\n/** A Promise for DataProviderRaw\r\n * @internal\r\n */\r\nexport type BeInspireTreeDataProviderPromise<TPayload> = Promise<BeInspireTreeDataProviderRaw<TPayload>>;\r\n/** Signature for BeInspireTree data provider\r\n * @internal\r\n */\r\nexport type BeInspireTreeDataProviderMethod<TPayload> = (parent?: TPayload) => BeInspireTreeDataProviderPromise<TPayload>;\r\n/** Signature for BeInspireTree data provider\r\n * @internal\r\n */\r\nexport interface BeInspireTreeDataProviderInterface<TPayload> {\r\n getNodesCount(parent?: TPayload): Promise<number>;\r\n getNodes(parent?: TPayload, page?: PageOptions): BeInspireTreeDataProviderPromise<TPayload>;\r\n}\r\n/** Type definition for all BeInspireTree data providers\r\n * @internal\r\n */\r\nexport type BeInspireTreeDataProvider<TPayload> =\r\n BeInspireTreeDataProviderRaw<TPayload>\r\n | BeInspireTreeDataProviderPromise<TPayload>\r\n | BeInspireTreeDataProviderMethod<TPayload>\r\n | BeInspireTreeDataProviderInterface<TPayload>;\r\n\r\n/** Type definition for a BeInspireTree renderer\r\n * @internal\r\n */\r\nexport type BeInspireTreeRenderer<TPayload> = (rootNodes: Array<BeInspireTreeNode<TPayload>>) => void;\r\n\r\ntype BeInspireTreeDataFunc<TPayload> = (parent: BeInspireTreeNode<TPayload> | undefined,\r\n resolve: (nodes: Array<BeInspireTreeNodePayloadConfig<TPayload>>, totalCount: number) => any,\r\n reject: (err: Error) => any,\r\n pagination?: Inspire.Pagination,\r\n) => void;\r\ntype BeInspireTreeData<TPayload> =\r\n Array<BeInspireTreeNodePayloadConfig<TPayload>>\r\n | Promise<Array<BeInspireTreeNodePayloadConfig<TPayload>>>\r\n | BeInspireTreeDataFunc<TPayload>;\r\n\r\n/**\r\n * A context which keeps [[BeInspireTree]] events muted until\r\n * it gets disposed.\r\n * @internal\r\n */\r\nexport class EventsMuteContext implements IDisposable {\r\n\r\n private _triggeredEventsCount: number = 0;\r\n private _didMute = false;\r\n private _stopListening: (() => void) | undefined;\r\n\r\n public constructor(\r\n private _events: BeInspireTreeEvent[],\r\n private _mute: (events: BeInspireTreeEvent[]) => void,\r\n private _unmute: (events: BeInspireTreeEvent[]) => boolean,\r\n private _emit?: (events: BeInspireTreeEvent[]) => void,\r\n private _listen?: (events: BeInspireTreeEvent[], listener: (...values: any[]) => void) => (() => void),\r\n allowedEventTriggersBeforeMute: number = 0) {\r\n this.init(allowedEventTriggersBeforeMute);\r\n }\r\n\r\n private init(allowedEventTriggersBeforeMute: number) {\r\n if (0 === allowedEventTriggersBeforeMute || !this._listen) {\r\n this._mute(this._events);\r\n this._didMute = true;\r\n return;\r\n }\r\n const callback = () => {\r\n if (++this._triggeredEventsCount >= allowedEventTriggersBeforeMute) {\r\n this._mute(this._events);\r\n this._didMute = true;\r\n // istanbul ignore else\r\n if (this._stopListening) {\r\n this._stopListening();\r\n this._stopListening = undefined;\r\n }\r\n }\r\n };\r\n this._stopListening = this._listen(this._events, callback);\r\n }\r\n\r\n public dispose() {\r\n if (this._stopListening) {\r\n this._stopListening();\r\n this._stopListening = undefined;\r\n }\r\n\r\n if (!this._didMute)\r\n return;\r\n\r\n const didUnmute = this._unmute(this._events);\r\n if (didUnmute && this._emit)\r\n this._emit(this._events);\r\n }\r\n}\r\n\r\n/** Prototype for BeInspireTreeProps.mapPayloadToInspireNodeConfig\r\n * @internal\r\n */\r\nexport type MapPayloadToInspireNodeCallback<TPayload> = (payload: TPayload, remapper: MapPayloadToInspireNodeCallback<TPayload>) => BeInspireTreeNodeConfig;\r\n\r\ninterface DeferredLoadingHandler<TPayload> {\r\n requestNodeLoad(parent: BeInspireTreeNode<TPayload> | undefined, index: number): Promise<void>;\r\n disposeNodeCaches(parent?: BeInspireTreeNode<TPayload>): void;\r\n}\r\n\r\n/**\r\n * Configuration properties for [[BeInspireTree]]\r\n * @internal\r\n */\r\nexport interface BeInspireTreeProps<TNodePayload> {\r\n dataProvider: BeInspireTreeDataProvider<TNodePayload>;\r\n mapPayloadToInspireNodeConfig: MapPayloadToInspireNodeCallback<TNodePayload>;\r\n pageSize?: number;\r\n disposeChildrenOnCollapse?: boolean;\r\n}\r\n\r\n/**\r\n * Bentley wrapper for 'inspire-tree'\r\n * @internal\r\n */\r\nexport class BeInspireTree<TNodePayload> {\r\n\r\n private _tree: InspireTree;\r\n private _eventMutes: Map<BeInspireTreeEvent, number>;\r\n private _readyPromise!: Promise<void>;\r\n private _deferredLoadingHandler?: DeferredLoadingHandler<TNodePayload>;\r\n private _visibleCached?: BeInspireTreeNodes<TNodePayload>;\r\n private _suspendedRendering?: EventsMuteContext;\r\n public props: BeInspireTreeProps<TNodePayload>;\r\n\r\n constructor(props: BeInspireTreeProps<TNodePayload>) {\r\n this.props = props;\r\n this._eventMutes = new Map();\r\n\r\n const wrappedProvider = wrapDataProvider<TNodePayload>(this, props.dataProvider, props.mapPayloadToInspireNodeConfig);\r\n if (wrappedProvider instanceof WrappedInterfaceProvider)\r\n this._deferredLoadingHandler = wrappedProvider as WrappedInterfaceProvider<TNodePayload>;\r\n const config: Inspire.Config = {\r\n data: wrappedProvider as any, // note: invalid declaration for this callback\r\n selection: {\r\n multiple: true,\r\n autoDeselect: false,\r\n },\r\n };\r\n this._tree = new InspireTree(config);\r\n\r\n // make sure nodes are dirty when they're loaded\r\n this.on(BeInspireTreeEvent.ModelLoaded, (model: BeInspireTreeNodes<TNodePayload>) => {\r\n model.forEach((n) => n.markDirty());\r\n });\r\n this.on(BeInspireTreeEvent.ChildrenLoaded, (parent: BeInspireTreeNode<TNodePayload>) => {\r\n parent.getChildren().forEach((n) => n.markDirty());\r\n });\r\n\r\n // dispose `visible` cache when data is loaded or nodes are expanded or collapsed\r\n this.on([BeInspireTreeEvent.DataLoaded, BeInspireTreeEvent.NodeCollapsed, BeInspireTreeEvent.NodeExpanded], () => {\r\n this._visibleCached = undefined;\r\n });\r\n\r\n // we want to allow consumers of `BeInspireTree` to listen for `ModelLoaded`\r\n // and `ChildrenLoaded` events and do any kind of manipulation with them **before**\r\n // `ChangesApplied` event is emitted, so we have to suspend rendering when data is loaded\r\n // and resume it in `*Loaded` listener.\r\n this.on(BeInspireTreeEvent.DataLoaded, () => {\r\n this._suspendedRendering = this.pauseRendering();\r\n });\r\n this.on([BeInspireTreeEvent.ModelLoaded, BeInspireTreeEvent.ChildrenLoaded], () => {\r\n // NODES_LOADED_LAST_LISTENER: this listener must be executed last of all ModelLoaded and ChildrenLoaded\r\n // listeners to avoid excessive re-renders\r\n // istanbul ignore else\r\n if (this._suspendedRendering) {\r\n this._suspendedRendering.dispose();\r\n this._suspendedRendering = undefined;\r\n }\r\n });\r\n\r\n // override the `load` function to handle auto-expanding nodes\r\n // note: tree starts loading as soon as it gets created, so the first load\r\n // is not using this override - in that case auto-expansion is handled\r\n // in `onModelInvalidated` function\r\n const baseTreeLoad = this._tree.load;\r\n this._tree.load = async (loader): Promise<Inspire.TreeNodes> => {\r\n const result = await baseTreeLoad.call(this._tree, loader);\r\n await using(this.pauseRendering(), async (_r) => {\r\n await ensureNodesAutoExpanded(result);\r\n });\r\n return result;\r\n };\r\n\r\n // assign `disposeChildrenOnCollapse` handler if needed\r\n if (props.disposeChildrenOnCollapse) {\r\n if (!isDeferredDataProvider(props.dataProvider))\r\n throw new UiError(UiComponents.loggerCategory(this), `Property 'disposeChildrenOnCollapse' is only available on deferred data providers`);\r\n this.on(BeInspireTreeEvent.NodeCollapsed, (node: BeInspireTreeNode<TNodePayload>) => {\r\n if (this._deferredLoadingHandler)\r\n this._deferredLoadingHandler.disposeNodeCaches(node);\r\n node.children = true;\r\n });\r\n }\r\n\r\n // invalidate our `ready` promise\r\n this.onModelInvalidated();\r\n }\r\n\r\n private onModelInvalidated() {\r\n this._readyPromise = new Promise<void>((resolve) => {\r\n this._tree.once([BeInspireTreeEvent.ModelLoaded], resolve);\r\n }).then(async () => {\r\n // note: the following is only needed for the initial load of the tree\r\n // when our `load` override isn't assigned yet\r\n await using(this.pauseRendering(), async (_r) => {\r\n await ensureNodesAutoExpanded(this._tree.nodes());\r\n });\r\n });\r\n }\r\n\r\n public get ready(): Promise<void> { return this._readyPromise; }\r\n\r\n /**\r\n * Stop emitting the specified events until the returned\r\n * [[EventsMuteContext]] object is disposed\r\n */\r\n public mute(events: BeInspireTreeEvent[]): EventsMuteContext {\r\n return new EventsMuteContext(events, this.doMute, this.doUnmute);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private doMute = (events: BeInspireTreeEvent[]) => {\r\n events.forEach((ev) => {\r\n if (!this._eventMutes.has(ev))\r\n this._eventMutes.set(ev, 1);\r\n else\r\n this._eventMutes.set(ev, this._eventMutes.get(ev)! + 1);\r\n });\r\n if (typeof this._tree.muted() !== \"boolean\")\r\n this._tree.mute(events.concat(this._tree.muted() as any));\r\n else\r\n this._tree.mute(events);\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private doUnmute = (events: BeInspireTreeEvent[]) => {\r\n const eventsToUnmute = events.filter((ev) => {\r\n let mutesCount = this._eventMutes.get(ev);\r\n if (mutesCount === undefined || mutesCount === 0)\r\n return false;\r\n this._eventMutes.set(ev, --mutesCount);\r\n return (mutesCount === 0);\r\n });\r\n this._tree.unmute(eventsToUnmute);\r\n return (eventsToUnmute.length > 0);\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private doEmit = (events: BeInspireTreeEvent[]) => {\r\n events.forEach((e) => this._tree.emit(e));\r\n };\r\n\r\n /**\r\n * Stop calling the renderer method until the returned\r\n * object is disposed. When that happens, the [[BeInspireTreeEvent.ChangesApplied]]\r\n * event is emitted if any changes in the hierarchy happened during the pause\r\n */\r\n public pauseRendering(allowedRendersBeforePause: number = 0): EventsMuteContext {\r\n const doEmit = (events: BeInspireTreeEvent[]) => {\r\n if (this.visible().some((n) => n.isDirty())) {\r\n this.doEmit(events);\r\n }\r\n };\r\n const doListen = (events: BeInspireTreeEvent[], listener: (...values: any[]) => void) => {\r\n this.on(events, listener);\r\n return () => this._tree.removeListener(events, listener);\r\n };\r\n return new EventsMuteContext([BeInspireTreeEvent.ChangesApplied], this.doMute, this.doUnmute,\r\n doEmit, doListen, allowedRendersBeforePause);\r\n }\r\n\r\n /**\r\n * Request a new render of current model.\r\n *\r\n * @internal\r\n */\r\n public applyChanges() {\r\n this.doEmit([BeInspireTreeEvent.ChangesApplied]);\r\n }\r\n\r\n /** Add a listener for specific event */\r\n public on(event: BeInspireTreeEvent | BeInspireTreeEvent[], listener: (...values: any[]) => void): this {\r\n const events = Array.isArray(event) ? event : [event];\r\n events.forEach((e) => {\r\n // note: we want our specific listener to be executed last, so have to make sure no other listeners\r\n // are appended to the listeners list (see NODES_LOADED_LAST_LISTENER)\r\n const shouldInsertBeforeLast = ((e === BeInspireTreeEvent.ModelLoaded && this._tree.listeners(e).length >= 2)\r\n || (e === BeInspireTreeEvent.ChildrenLoaded && this._tree.listeners(e).length >= 2));\r\n if (shouldInsertBeforeLast)\r\n this._tree.listeners(e).splice(this._tree.listeners(e).length - 1, 0, listener);\r\n else\r\n this._tree.on(e, listener);\r\n });\r\n return this;\r\n }\r\n\r\n /** Remove listener for specific event */\r\n public removeListener(event: BeInspireTreeEvent | BeInspireTreeEvent[], listener: (...values: any[]) => void): this {\r\n const events = Array.isArray(event) ? event : [event];\r\n events.forEach((e) => this._tree.removeListener(e, listener));\r\n return this;\r\n }\r\n\r\n /** Remove all listeners for specific event(s) */\r\n public removeAllListeners(event?: BeInspireTreeEvent | BeInspireTreeEvent[]) {\r\n if (!event) {\r\n this._tree.removeAllListeners(undefined);\r\n return;\r\n }\r\n const events = Array.isArray(event) ? event : /* istanbul ignore next */[event];\r\n events.forEach((e) => this._tree.removeAllListeners(e));\r\n }\r\n\r\n /** Get root node with the specified id */\r\n public node(id: string): BeInspireTreeNode<TNodePayload> | undefined {\r\n return toNode(this._tree.node(id));\r\n }\r\n\r\n /** Get root nodes with the specified ids */\r\n public nodes(ids?: string[]) {\r\n return toNodes<TNodePayload>(this._tree.nodes(ids));\r\n }\r\n\r\n /** Get flat list of all available nodes */\r\n public flatten() {\r\n return toNodes<TNodePayload>(this._tree.flatten(() => true));\r\n }\r\n\r\n /** Get a flat list of available leaf nodes */\r\n public deepest() {\r\n return toNodes<TNodePayload>(this._tree.deepest());\r\n }\r\n\r\n /** Get a flat list of expanded nodes */\r\n public expanded() {\r\n return toNodes<TNodePayload>(this._tree.expanded());\r\n }\r\n\r\n /** Get a flat list of collapsed nodes */\r\n public collapsed() {\r\n return toNodes<TNodePayload>(this._tree.collapsed());\r\n }\r\n\r\n /** Get a flat list of selected nodes */\r\n public selected() {\r\n return toNodes<TNodePayload>(this._tree.selected());\r\n }\r\n\r\n /** Get a flat list of visible nodes */\r\n public visible() {\r\n if (!this._visibleCached)\r\n this._visibleCached = toNodes<TNodePayload>(this._tree.visible());\r\n return this._visibleCached;\r\n }\r\n\r\n /** Reload the tree */\r\n public async reload() {\r\n if (this._deferredLoadingHandler)\r\n this._deferredLoadingHandler.disposeNodeCaches(undefined);\r\n await using(this.pauseRendering(), async (_r) => {\r\n const rootNodes = await this._tree.reload();\r\n rootNodes.forEach((n) => toNode(n).setDirty(true));\r\n });\r\n }\r\n\r\n /**\r\n * Deselects all nodes\r\n */\r\n public deselectAll(muteEvents = true) {\r\n using(this.mute((muteEvents) ? [BeInspireTreeEvent.NodeDeselected] : []), (_r) => {\r\n this._tree.deselectDeep();\r\n });\r\n }\r\n\r\n /**\r\n * Returns all visible nodes that are located between the two input nodes (inclusive).\r\n * Input nodes can be provided in any order.\r\n */\r\n public getVisibleNodesBetween(node1: BeInspireTreeNode<TNodePayload>, node2: BeInspireTreeNode<TNodePayload>): Array<BeInspireTreeNode<TNodePayload>> {\r\n let startIndex = -1;\r\n let endIndex = -1;\r\n for (let i = 0; i < this.visible().length; ++i) {\r\n const vn = this.visible()[i];\r\n if (vn.id === node1.id)\r\n startIndex = i;\r\n if (vn.id === node2.id)\r\n endIndex = i;\r\n if (startIndex !== -1 && endIndex !== -1)\r\n break;\r\n }\r\n\r\n if (startIndex > endIndex)\r\n [startIndex, endIndex] = [endIndex, startIndex];\r\n\r\n return this.visible().slice(startIndex, endIndex + 1);\r\n }\r\n\r\n /**\r\n * Selects all visible nodes that are located between the two input nodes (inclusive).\r\n * Input nodes can be provided in any order.\r\n */\r\n public selectBetween(node1: BeInspireTreeNode<TNodePayload>, node2: BeInspireTreeNode<TNodePayload>, muteEvents = true): Array<BeInspireTreeNode<TNodePayload>> {\r\n return using(this.mute((muteEvents) ? [BeInspireTreeEvent.NodeSelected] : []), (_r) => {\r\n const nodesBetween = this.getVisibleNodesBetween(node1, node2);\r\n nodesBetween.forEach((n) => n.select());\r\n return nodesBetween;\r\n });\r\n }\r\n\r\n private createSelectedNodePredicate(nodesToSelect?: string[] | ((payload: TNodePayload) => boolean)): Inspire.NodeIteratee | undefined {\r\n if (!nodesToSelect)\r\n return undefined;\r\n\r\n let predicate: Inspire.NodeIteratee;\r\n if (typeof nodesToSelect === \"function\") {\r\n predicate = (n: Inspire.TreeNode) => (toNode<TNodePayload>(n).payload && nodesToSelect(toNode<TNodePayload>(n).payload!));\r\n } else {\r\n predicate = (n: Inspire.TreeNode) => (-1 !== nodesToSelect.indexOf(toNode(n).id!));\r\n }\r\n return predicate;\r\n }\r\n\r\n private updateSelection(selectHandler: (predicate: Inspire.NodeIteratee) => void, nodesToSelect: string[] | ((payload: TNodePayload) => boolean) | undefined, muteEvents: boolean) {\r\n const predicate = this.createSelectedNodePredicate(nodesToSelect);\r\n if (!predicate)\r\n return;\r\n\r\n using(this.mute((muteEvents) ? [BeInspireTreeEvent.NodeSelected, BeInspireTreeEvent.NodeDeselected] : []), (_r) => {\r\n this._tree.disableDeselection();\r\n selectHandler(predicate);\r\n this._tree.enableDeselection();\r\n });\r\n }\r\n\r\n /**\r\n * Deselects everything and selects only nodes that meet the `nodesToSelect` criteria\r\n */\r\n public updateTreeSelection(nodesToSelect?: string[] | ((payload: TNodePayload) => boolean), muteEvents = true) {\r\n const selectFunc = (predicate: Inspire.NodeIteratee) => {\r\n this.flatten().forEach((n) => {\r\n const shouldSelect = predicate(n);\r\n if (shouldSelect && !n.selected())\r\n n.select();\r\n else if (!shouldSelect && n.selected())\r\n n.deselect();\r\n });\r\n };\r\n return this.updateSelection(selectFunc, nodesToSelect, muteEvents);\r\n }\r\n\r\n /**\r\n * Updates selection state of provided `nodes` based on `nodesToSelect` criteria\r\n */\r\n public updateNodesSelection(nodes: BeInspireTreeNodes<TNodePayload> | Inspire.TreeNodes, nodesToSelect?: string[] | ((payload: TNodePayload) => boolean), muteEvents = true) {\r\n const selectFunc = (predicate: Inspire.NodeIteratee) => {\r\n let filtered: Inspire.TreeNode[];\r\n if ((nodes as Inspire.TreeNodes).filterBy !== undefined)\r\n filtered = (nodes as Inspire.TreeNodes).filterBy(predicate).map((n) => n);\r\n else\r\n filtered = (nodes as BeInspireTreeNodes<TNodePayload>).filter(predicate);\r\n filtered.forEach((node) => node.select());\r\n };\r\n return this.updateSelection(selectFunc, nodesToSelect, muteEvents);\r\n }\r\n\r\n private updateNodeCheckboxInfo(node: BeInspireTreeNode<TNodePayload>, status: CheckBoxInfo) {\r\n let hasChanges = false;\r\n if (node.itree!.checkboxTooltip !== status.tooltip) {\r\n node.itree!.checkboxTooltip = status.tooltip;\r\n hasChanges = true;\r\n }\r\n if (node.itree!.state!.checkboxVisible !== status.isVisible) {\r\n node.itree!.state!.checkboxVisible = status.isVisible;\r\n hasChanges = true;\r\n }\r\n if (node.itree!.state!.checkboxDisabled !== status.isDisabled) {\r\n node.itree!.state!.checkboxDisabled = status.isDisabled;\r\n hasChanges = true;\r\n }\r\n if (status.state === CheckBoxState.On && !node.itree!.state!.checked) {\r\n node.check();\r\n hasChanges = true;\r\n } else if (status.state === CheckBoxState.Off && node.itree!.state!.checked) {\r\n node.uncheck();\r\n hasChanges = true;\r\n }\r\n if (hasChanges) {\r\n node.markDirty();\r\n this.applyChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Updates checkbox states of the whole tree using the `checkboxInfo` callback function\r\n */\r\n public async updateTreeCheckboxes(checkboxInfo: ((payload: TNodePayload) => CheckBoxInfo | Promise<CheckBoxInfo>), muteEvents = true) {\r\n await this.updateNodesCheckboxes(this.flatten(), checkboxInfo, muteEvents);\r\n }\r\n\r\n /**\r\n * Updates checkbox states of provided `nodes` based on `checkboxInfo` callback function\r\n */\r\n public async updateNodesCheckboxes(nodes: BeInspireTreeNodes<TNodePayload>, checkboxInfo: ((payload: TNodePayload) => CheckBoxInfo | Promise<CheckBoxInfo>), muteEvents = true) {\r\n await using(this.pauseRendering(), async (_r1) => {\r\n await using(this.mute((muteEvents) ? [BeInspireTreeEvent.NodeChecked, BeInspireTreeEvent.NodeUnchecked] : []), async (_r2) => {\r\n const promises = new Array<Promise<void>>();\r\n nodes.forEach((n) => {\r\n if (!n.payload)\r\n return;\r\n\r\n const status = checkboxInfo(n.payload);\r\n if (isPromiseLike(status))\r\n promises.push(status.then((s) => this.updateNodeCheckboxInfo(n, s)));\r\n else\r\n this.updateNodeCheckboxInfo(n, status);\r\n });\r\n if (promises.length !== 0)\r\n await Promise.all(promises);\r\n });\r\n });\r\n }\r\n\r\n /** @internal */\r\n public createPlaceholderNode(index: number, parent?: BeInspireTreeNode<TNodePayload>): BeInspireTreeNode<TNodePayload> {\r\n const node = toNode<TNodePayload>(this._tree.createNode({\r\n id: `${parent ? parent.id : \"\"}-not_loaded[${index}]`,\r\n text: \"\",\r\n payload: undefined as any,\r\n beInspireTree: this,\r\n }));\r\n node.placeholderIndex = index;\r\n return node;\r\n }\r\n\r\n /**\r\n * Request a node at the specified index to be loaded for the given parent. Only\r\n * makes sense on a paginated tree, throws otherwise.\r\n */\r\n public async requestNodeLoad(parent: BeInspireTreeNode<TNodePayload> | undefined, index: number): Promise<void> {\r\n if (!this._deferredLoadingHandler)\r\n throw new UiError(UiComponents.loggerCategory(this), `requestNodeLoad should only be called when pagination is enabled`);\r\n return this._deferredLoadingHandler.requestNodeLoad(parent, index);\r\n }\r\n\r\n /** @internal */\r\n public async loadNodes(): Promise<void> {\r\n await this._tree.load((this._tree as any).config.data);\r\n }\r\n}\r\n\r\nasync function loadChildrenRecursive(n: Inspire.TreeNode, filterNodeIds: string[]): Promise<Inspire.TreeNodes> {\r\n const children = await n.loadChildren();\r\n await ensureChildrenLoaded(children, filterNodeIds);\r\n return children;\r\n}\r\n\r\nconst needsChildrenLoaded = (n: Inspire.TreeNode) => n.hasOrWillHaveChildren() && !(n as any).hasLoadedChildren();\r\n\r\nasync function ensureChildrenLoaded(branch: Inspire.TreeNodes | Inspire.TreeNode[], filterNodeIds: string[]): Promise<void> {\r\n const childNodes = branch.filter((n) => filterNodeIds.includes(toNode(n).id!));\r\n const allChildren = (await Promise.all(childNodes.map(async (n) => {\r\n if (needsChildrenLoaded(n))\r\n return loadChildrenRecursive(toNode(n), filterNodeIds);\r\n return n.getChildren();\r\n }))).reduce((children: Inspire.TreeNode[], curr: Inspire.TreeNodes) => {\r\n children.push(...curr);\r\n return children;\r\n }, []);\r\n await ensureNodesAutoExpanded(allChildren);\r\n}\r\n\r\nasync function ensureNodesAutoExpanded(branch: Inspire.TreeNodes | Inspire.TreeNode[]): Promise<void> {\r\n const idsToExpand = branch.filter((n) => n.expanded()).map((n) => toNode(n).id!);\r\n if (idsToExpand.length > 0)\r\n await ensureChildrenLoaded(branch, idsToExpand);\r\n}\r\n\r\n/** @internal */\r\nexport const toNode = <TPayload>(inspireNode: Inspire.TreeNode): BeInspireTreeNode<TPayload> => {\r\n // When inspire-tree loads child nodes, some existing nodes transfer their properties to freshly created objects.\r\n // Therefore, we cannot capture and use the `inspireNode` reference within methods we are about to assign to the node.\r\n\r\n const anyNode = inspireNode as any;\r\n if (!inspireNode) {\r\n // some inspire tree methods return `undefined` even when they say they don't - handle\r\n // the case by returning undefined as well\r\n return anyNode;\r\n }\r\n\r\n if (!anyNode._loadChildrenOverriden) {\r\n const loadChildrenBase = inspireNode.loadChildren;\r\n inspireNode.loadChildren = async function (): Promise<Inspire.TreeNodes> {\r\n const children = await loadChildrenBase.call(this);\r\n // note: inspire-tree calls BeInspireTreeEvent.ChildrenLoaded as part of\r\n // the above call, so listeners get called before we get a chance to auto-expand...\r\n await ensureNodesAutoExpanded(children);\r\n return children;\r\n };\r\n anyNode._loadChildrenOverriden = loadChildrenBase;\r\n }\r\n\r\n // note: default `check()` & `uncheck()` implementations fiddle with\r\n // parent node which we don't want\r\n if (!anyNode._checkOverriden) {\r\n const checkBase = inspireNode.check;\r\n anyNode.check = function (): Inspire.TreeNode {\r\n // istanbul ignore else\r\n if (!this.itree!.state!.checked) {\r\n this.itree!.state!.checked = true;\r\n this._tree.emit(BeInspireTreeEvent.NodeChecked, this);\r\n this.markDirty();\r\n this._tree.applyChanges();\r\n }\r\n return this;\r\n };\r\n anyNode._checkOverriden = checkBase;\r\n }\r\n if (!anyNode._uncheckOverriden) {\r\n const uncheckBase = inspireNode.uncheck;\r\n anyNode.uncheck = function (): Inspire.TreeNode {\r\n // istanbul ignore else\r\n if (this.itree!.state!.checked) {\r\n this.itree!.state!.checked = false;\r\n this._tree.emit(BeInspireTreeEvent.NodeUnchecked, this);\r\n this.markDirty();\r\n this._tree.applyChanges();\r\n }\r\n return this;\r\n };\r\n anyNode._uncheckOverriden = uncheckBase;\r\n }\r\n\r\n // inject a method to reset overrides\r\n anyNode.resetBeInspireOverrides = function () {\r\n this.loadChildren = this._loadChildrenOverriden;\r\n delete this._loadChildrenOverriden;\r\n this.check = this._checkOverriden;\r\n delete this._checkOverriden;\r\n this.uncheck = this._uncheckOverriden;\r\n delete this._uncheckOverriden;\r\n };\r\n\r\n // inject a couple of methods to handle dirtiness\r\n anyNode.isDirty = function () { return this.itree.dirty; };\r\n anyNode.setDirty = function (value: boolean) {\r\n if (value)\r\n this.markDirty();\r\n else\r\n this.itree.dirty = value;\r\n };\r\n if (!anyNode._markDirtyOverriden) {\r\n const markDirtyBase = inspireNode.markDirty;\r\n anyNode.markDirty = function () {\r\n const result = markDirtyBase.call(this);\r\n const currTimestamp = (new Date()).getTime();\r\n if (this.itree.dirtyTimestamp === currTimestamp) {\r\n ++this.itree.dirtyCounter;\r\n } else {\r\n this.itree.dirtyTimestamp = currTimestamp;\r\n this.itree.dirtyCounter = 0;\r\n }\r\n return result;\r\n };\r\n anyNode._markDirtyOverriden = markDirtyBase;\r\n }\r\n\r\n return anyNode;\r\n};\r\n\r\n/** @internal */\r\nexport const toNodes = <TPayload>(inspireNodes: Inspire.TreeNodes): BeInspireTreeNodes<TPayload> => {\r\n return Object.assign(inspireNodes.map((n) => toNode<TPayload>(n)), {\r\n node: (id: string) => toNode<TPayload>(inspireNodes.node(id)),\r\n nodes: (ids?: string[]) => toNodes<TPayload>(inspireNodes.nodes(ids)),\r\n deepest: () => toNodes<TPayload>(inspireNodes.deepest()),\r\n flatten: () => toNodes<TPayload>(inspireNodes.flatten(() => true)),\r\n expanded: () => toNodes<TPayload>(inspireNodes.expanded()),\r\n collapsed: () => toNodes<TPayload>(inspireNodes.collapsed()),\r\n selected: () => toNodes<TPayload>(inspireNodes.selected()),\r\n visible: () => toNodes<TPayload>(inspireNodes.visible()),\r\n });\r\n};\r\n\r\nconst isDataProviderInterface = (obj: unknown): obj is BeInspireTreeDataProviderInterface<any> => {\r\n return (typeof obj === \"object\")\r\n && ((obj as any).getNodesCount && (typeof (obj as any).getNodesCount) === \"function\")\r\n && ((obj as any).getNodes && (typeof (obj as any).getNodes) === \"function\");\r\n};\r\n\r\nconst isDeferredDataProvider = (provider: BeInspireTreeDataProvider<any>): boolean => {\r\n return (typeof provider === \"function\") || isDataProviderInterface(provider);\r\n};\r\n\r\nconst nodeToPayload = <TPayload>(node?: BeInspireTreeNodePayloadConfig<TPayload>) => (node ? node.payload : undefined);\r\n\r\nclass PayloadToNodeRemapper<TPayload> {\r\n constructor(\r\n private _tree: BeInspireTree<TPayload>,\r\n private _mapPayloadToInspireNodeConfig: MapPayloadToInspireNodeCallback<TPayload>) {\r\n }\r\n public remapOne = (payload: TPayload): BeInspireTreeNodePayloadConfig<TPayload> => ({\r\n ...this._mapPayloadToInspireNodeConfig(payload, this.remapOne),\r\n beInspireTree: this._tree,\r\n payload,\r\n });\r\n public remapMany = (payload: TPayload[]): Array<BeInspireTreeNodePayloadConfig<TPayload>> => {\r\n return payload.map(this.remapOne);\r\n };\r\n}\r\n\r\nfunction onNodesDelayLoaded<TPayload>(parent: BeInspireTreeNode<TPayload> | undefined, nodes: Array<BeInspireTreeNodePayloadConfig<TPayload>>) {\r\n if (parent) {\r\n // inspire-tree emits `data.loaded` event only when root nodes are loaded, but\r\n // we also need it to be emitted when children are loaded - we depend on it being called\r\n // after the children are loaded but before the `children.loaded` event is emitted.\r\n parent.tree().emit(BeInspireTreeEvent.DataLoaded, nodes);\r\n }\r\n}\r\n\r\nconst wrapDataProvider = <TPayload>(tree: BeInspireTree<TPayload>, provider: BeInspireTreeDataProvider<TPayload>, mapPayloadToInspireNodeConfig: MapPayloadToInspireNodeCallback<TPayload>): BeInspireTreeData<TPayload> => {\r\n const remapper = new PayloadToNodeRemapper(tree, mapPayloadToInspireNodeConfig);\r\n\r\n if (Array.isArray(provider)) {\r\n // array data provider\r\n return remapper.remapMany(provider);\r\n }\r\n\r\n if (typeof provider === \"function\") {\r\n // method data provider\r\n return ((parent: BeInspireTreeNode<TPayload> | undefined, resolve: (nodes: Array<BeInspireTreeNodePayloadConfig<TPayload>>, totalCount: number) => any, _reject: (err: Error) => any) => {\r\n const payload = nodeToPayload(parent);\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n provider(payload).then(remapper.remapMany).then((nodes) => {\r\n onNodesDelayLoaded(parent, nodes);\r\n resolve(nodes, nodes.length);\r\n });\r\n });\r\n }\r\n\r\n if (isDataProviderInterface(provider)) {\r\n // interface data provider\r\n return new WrappedInterfaceProvider({\r\n tree,\r\n provider,\r\n nodesRemapper: remapper,\r\n });\r\n }\r\n\r\n // promise data provider\r\n return provider.then(remapper.remapMany);\r\n};\r\n\r\ninterface NodesLoadResult<TPayload> {\r\n totalNodesCount: number;\r\n nodes: TPayload[];\r\n}\r\n\r\ninterface WrappedInterfaceProviderProps<TPayload> {\r\n tree: BeInspireTree<TPayload>;\r\n provider: BeInspireTreeDataProviderInterface<TPayload>;\r\n nodesRemapper: PayloadToNodeRemapper<TPayload>;\r\n}\r\nclass WrappedInterfaceProvider<TPayload> extends CallableInstance implements DeferredLoadingHandler<TPayload> {\r\n private _tree: BeInspireTree<TPayload>;\r\n private _provider: BeInspireTreeDataProviderInterface<TPayload>;\r\n private _paginationHelper?: PaginationHelper<NodesLoadResult<TPayload>>;\r\n private _nodesRemapper: PayloadToNodeRemapper<TPayload>;\r\n private _stashedPages = new Map<string | undefined, { total: number, pages: Array<{ start: number, nodes: TPayload[] }> }>();\r\n private _initialRequests = new Set<string | undefined>();\r\n\r\n public constructor(props: WrappedInterfaceProviderProps<TPayload>) {\r\n super(\"inspireLoad\");\r\n this._tree = props.tree;\r\n this._provider = props.provider;\r\n this._nodesRemapper = props.nodesRemapper;\r\n if (undefined !== this._tree.props.pageSize && 0 !== this._tree.props.pageSize)\r\n this._paginationHelper = new PaginationHelper(this._tree.props.pageSize, this._pagedLoad, this._onPageLoaded);\r\n }\r\n\r\n public requestNodeLoad = async (parent: BeInspireTreeNode<TPayload> | undefined, index: number): Promise<void> => {\r\n if (!this._paginationHelper)\r\n throw new UiError(UiComponents.loggerCategory(this), `requestNodeLoad should only be called when pagination is enabled`);\r\n await this._paginationHelper.request(parent ? parent.id : undefined, index);\r\n };\r\n\r\n public disposeNodeCaches(node?: BeInspireTreeNode<TPayload>) {\r\n if (!node) {\r\n this._stashedPages.clear();\r\n if (this._paginationHelper)\r\n this._paginationHelper.disposeCaches(undefined);\r\n } else {\r\n node.getChildren().forEach((c) => this.disposeNodeCaches(toNode(c)));\r\n this._stashedPages.delete(node.id);\r\n if (this._paginationHelper)\r\n this._paginationHelper.disposeCaches(node.id);\r\n }\r\n }\r\n\r\n /** Called by PaginationHelper to load a page */\r\n private _pagedLoad = async (parentId: string | undefined, pageStart: number): Promise<NodesLoadResult<TPayload>> => {\r\n const parentNode = parentId ? this._tree.node(parentId) : undefined;\r\n const parentPayload = parentNode ? parentNode.payload : undefined;\r\n\r\n const handleCollapsedParent = () => {\r\n if (this._tree.props.disposeChildrenOnCollapse && parentNode && parentNode.collapsed())\r\n throw new UiError(UiComponents.loggerCategory(this), `Parent node collapsed while children were being loaded`);\r\n };\r\n\r\n let totalNodesCount: number | undefined;\r\n if (parentNode && isArrayLike(parentNode.children)) {\r\n totalNodesCount = parentNode.getChildren().length;\r\n } else if (!parentNode) {\r\n let rootNodesCount = 0;\r\n try { rootNodesCount = this._tree.nodes().length; } catch (e) { }\r\n if (rootNodesCount > 0)\r\n totalNodesCount = rootNodesCount;\r\n }\r\n if (undefined === totalNodesCount) {\r\n totalNodesCount = await this._provider.getNodesCount(parentPayload);\r\n handleCollapsedParent();\r\n }\r\n\r\n const page: PageOptions = {\r\n start: pageStart,\r\n size: this._paginationHelper!.pageSize,\r\n };\r\n const nodes = await this._provider.getNodes(parentPayload, page);\r\n handleCollapsedParent();\r\n return {\r\n totalNodesCount,\r\n nodes,\r\n };\r\n };\r\n\r\n /** Called by PaginationHelper when a page is finished loading */\r\n private _onPageLoaded = async (parentId: string | undefined, pageStart: number, result: NodesLoadResult<TPayload>) => {\r\n // stash the result\r\n const stash = {\r\n total: result.totalNodesCount,\r\n pages: [{ start: pageStart, nodes: result.nodes }],\r\n };\r\n this._stashedPages.set(parentId, stash);\r\n\r\n if (!this._initialRequests.delete(parentId)) {\r\n // because the load is going to happen almost synchronously (just\r\n // merge current nodes with stash), there's no point to show the\r\n // `loading` state and then re-render with `completed` state + nodes.\r\n // instead, just pause rendering until we have the nodes\r\n await using(this._tree.pauseRendering(), async (_r) => {\r\n // request children for `parent` to reload - the load handler\r\n // will merge the current children with stash (see `inspireLoad`)\r\n if (parentId)\r\n await this._tree.node(parentId)!.loadChildren();\r\n else\r\n await this._tree.loadNodes();\r\n });\r\n }\r\n };\r\n\r\n private createPagedNodesResult(parent: BeInspireTreeNode<TPayload> | undefined): Array<BeInspireTreeNodePayloadConfig<TPayload>> {\r\n const parentId = parent ? parent.id : undefined;\r\n const currNodes = parent ? toNodes(parent.getChildren()) : this._tree.nodes();\r\n const stash = this._stashedPages.get(parentId);\r\n if (!stash) {\r\n // nothing in stash - return current nodes\r\n return currNodes as any;\r\n }\r\n this._stashedPages.delete(parentId);\r\n\r\n // merge current nodes with stash content, fill missing\r\n // pieces with placeholders\r\n const resolvedNodes = new Array(stash.total);\r\n stash.pages.forEach((page) => {\r\n page.nodes.forEach((n, index) => {\r\n resolvedNodes[page.start + index] = this._nodesRemapper.remapOne(n);\r\n });\r\n });\r\n for (let i = 0; i < stash.total; ++i) {\r\n if (resolvedNodes[i])\r\n continue;\r\n if (currNodes[i]) {\r\n currNodes[i].resetBeInspireOverrides();\r\n resolvedNodes[i] = currNodes[i];\r\n } else {\r\n resolvedNodes[i] = this._tree.createPlaceholderNode(i, parent);\r\n }\r\n }\r\n return resolvedNodes;\r\n }\r\n\r\n /** Called by inspire-tree through CallableInstance */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private inspireLoad(parent: BeInspireTreeNode<TPayload> | undefined, resolve: (nodes: Array<BeInspireTreeNodePayloadConfig<TPayload>>, totalCount: number) => any) {\r\n if (!this._paginationHelper) {\r\n // pagination is disabled - just load all nodes for the parent\r\n const payload = parent ? parent.payload : undefined;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._provider.getNodes(payload).then((payloads) => {\r\n const nodes = this._nodesRemapper.remapMany(payloads);\r\n onNodesDelayLoaded(parent, nodes);\r\n resolve(nodes, nodes.length);\r\n });\r\n return;\r\n }\r\n\r\n // paginated behavior\r\n const parentId = parent ? parent.id : undefined;\r\n const complete = () => {\r\n // note: the parent might be over-written due to other sibling page loads,\r\n // so we have to make sure we're using the right parent and not the stale one\r\n const actualParent = parent ? parent.beInspireTree.node(parent.id!) : undefined;\r\n const pagedNodes = this.createPagedNodesResult(actualParent);\r\n if (actualParent && isArrayLike(actualParent.children)) {\r\n // reset so concat doesn't duplicate nodes\r\n actualParent.children = true;\r\n }\r\n onNodesDelayLoaded(actualParent, pagedNodes);\r\n if (actualParent && actualParent !== parent) {\r\n // if the `parent` is indeed stale, then calling resolve won't add child nodes\r\n // to the tree - we have to additionally add them to the actual parent that's not stale\r\n // see VSTS#152885\r\n actualParent.addChildren(pagedNodes);\r\n }\r\n resolve(pagedNodes, pagedNodes.length);\r\n };\r\n if (!this._paginationHelper.hasOrWillHaveLoadedPages(parentId)) {\r\n // parent has no children yet - initiate a request and wait\r\n this._initialRequests.add(parentId);\r\n this.requestNodeLoad(parent, 0).then(complete); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n } else {\r\n complete();\r\n }\r\n }\r\n}\r\ninterface WrappedInterfaceProvider<TPayload> {\r\n // eslint-disable-next-line @typescript-eslint/prefer-function-type\r\n (parent: BeInspireTreeNode<TPayload> | undefined, resolve: (nodes: Array<BeInspireTreeNodePayloadConfig<TPayload>>, totalCount: number) => any): void;\r\n}\r\n\r\ntype PagedLoadHandler<TLoadResult> = (parentId: string | undefined, pageStart: number) => Promise<TLoadResult>;\r\ntype PageLoadedCallback<TLoadResult> = (parentId: string | undefined, pageStart: number, result: TLoadResult) => Promise<void>;\r\nclass PaginationHelper<TPageLoadResult> {\r\n public readonly pageSize: number;\r\n private _loadedPages: Map<string | undefined, Set<number>>;\r\n private _requestedPages: Map<string | undefined, Map<number, Promise<void>>>;\r\n private _loadHandler: PagedLoadHandler<TPageLoadResult>;\r\n private _onPageLoaded: PageLoadedCallback<TPageLoadResult>;\r\n\r\n constructor(pageSize: number, loadHandler: PagedLoadHandler<TPageLoadResult>, onPageLoaded: PageLoadedCallback<TPageLoadResult>) {\r\n this.pageSize = pageSize;\r\n this._loadHandler = loadHandler;\r\n this._onPageLoaded = onPageLoaded;\r\n this._loadedPages = new Map();\r\n this._requestedPages = new Map();\r\n }\r\n\r\n private getPageStartIndex(nodeIndex: number) {\r\n return nodeIndex - nodeIndex % this.pageSize;\r\n }\r\n\r\n private async createRequest(parentId: string | undefined, pageStart: number): Promise<void> {\r\n return this._loadHandler(parentId, pageStart).then(async (result) => {\r\n await this.onRequestHandled(parentId, pageStart, result);\r\n }).catch(() => {\r\n this.onRequestRejected(parentId, pageStart);\r\n });\r\n }\r\n\r\n public hasOrWillHaveLoadedPages(parentId: string | undefined): boolean {\r\n return this._loadedPages.has(parentId) || this._requestedPages.has(parentId);\r\n }\r\n\r\n public disposeCaches(parentId: string | undefined) {\r\n if (!parentId) {\r\n this._loadedPages.clear();\r\n this._requestedPages.clear();\r\n } else {\r\n this._loadedPages.delete(parentId);\r\n this._requestedPages.delete(parentId);\r\n }\r\n }\r\n\r\n public async request(parentId: string | undefined, index: number): Promise<void> {\r\n const pageStart = this.getPageStartIndex(index);\r\n const loadedPages = this._loadedPages.get(parentId);\r\n if (loadedPages !== undefined && loadedPages.has(pageStart)) {\r\n // already loaded\r\n return;\r\n }\r\n let requestedPages = this._requestedPages.get(parentId);\r\n if (requestedPages === undefined) {\r\n requestedPages = new Map();\r\n this._requestedPages.set(parentId, requestedPages);\r\n }\r\n let request = requestedPages.get(pageStart);\r\n if (!request) {\r\n request = this.createRequest(parentId, pageStart);\r\n requestedPages.set(pageStart, request);\r\n }\r\n await request;\r\n }\r\n\r\n private async onRequestHandled(parentId: string | undefined, pageStart: number, result: TPageLoadResult) {\r\n // add the request to loaded list\r\n let loadedPages = this._loadedPages.get(parentId);\r\n if (!loadedPages) {\r\n loadedPages = new Set();\r\n this._loadedPages.set(parentId, loadedPages);\r\n }\r\n loadedPages.add(pageStart);\r\n\r\n // remove request from active requests list\r\n const requestedPages = this._requestedPages.get(parentId);\r\n if (requestedPages && requestedPages.delete(pageStart)) {\r\n // callback\r\n await this._onPageLoaded(parentId, pageStart, result);\r\n }\r\n }\r\n\r\n private onRequestRejected(parentId: string | undefined, pageStart: number) {\r\n // remove request from active requests list\r\n const requestedPages = this._requestedPages.get(parentId);\r\n // istanbul ignore next\r\n if (requestedPages)\r\n requestedPages.delete(pageStart);\r\n }\r\n}\r\n"]}
|