From 443ddbf8ef68c4e98fe00df8fdfae126a3ac8872 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 09:46:55 +0200 Subject: [PATCH] Merge treelist-example-fix-1975 into production (#1977) * kb(TreeView): added a fix to the examples that prevents the browser window from scrolling * refactoring * Revert "refactoring" This reverts commit c73f95daec6a87a22ba8ce2b389c81ddc1268f2c. * refactor first example --------- Co-authored-by: Tsvetomir Hristov <106250052+Tsvetomir-Hr@users.noreply.github.com> Co-authored-by: Dimo Dimov <961014+dimodi@users.noreply.github.com> --- knowledge-base/treeview-scroll-to-item.md | 65 ++++++++++++----------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/knowledge-base/treeview-scroll-to-item.md b/knowledge-base/treeview-scroll-to-item.md index 67fd5eb64..c9a32a8be 100644 --- a/knowledge-base/treeview-scroll-to-item.md +++ b/knowledge-base/treeview-scroll-to-item.md @@ -74,50 +74,48 @@ Here are two examples: .scrollable-treeview { height: 300px; overflow: auto; + scroll-behavior: smooth; border: 1px solid #ccc; margin: 1em; } -@* ! Move the JavaScript code to its proper place ! *@ +@* Move the JavaScript to a separate JS file *@ @code { - List TreeData { get; set; } - IEnumerable SelectedItems { get; set; } = new List(); - IEnumerable ExpandedItems { get; set; } = new List(); + private List TreeData { get; set; } = new(); + private IEnumerable SelectedItems { get; set; } = new List(); + private IEnumerable ExpandedItems { get; set; } = new List(); - int? TreeItemId { get; set; } = 37; - bool ShouldScroll { get; set; } + private int TreeItemId { get; set; } = 44; + private bool ShouldScroll { get; set; } void SelectAndScroll() { - if (TreeItemId.HasValue) - { - // get the item - var itemToSelect = TreeData.First(x => x.Id == TreeItemId); + // get the item + TreeItem? itemToSelect = TreeData.FirstOrDefault(x => x.Id == TreeItemId); - // get and expand the parent - if (itemToSelect != null && itemToSelect.ParentId != null) + if (itemToSelect != null) + { + if (itemToSelect?.ParentId != null) { + // get and expand the parent var parentItem = TreeData.First(x => x.Id == itemToSelect.ParentId); - if (parentItem != null) - { - ExpandedItems = ExpandedItems.Append(parentItem); - } + ExpandedItems = ExpandedItems.Append(parentItem); } // select the item - SelectedItems = new List() { itemToSelect }; + SelectedItems = new List() { itemToSelect! }; // raise flag for JavaScript scrolling ShouldScroll = true; @@ -129,8 +127,13 @@ Here are two examples: if (ShouldScroll) { ShouldScroll = false; + + // wait for the TreeView item to select + await Task.Delay(1); + await js.InvokeVoidAsync("scrollToItem", ".scrollable-treeview"); } + await base.OnAfterRenderAsync(firstRender); } @@ -149,9 +152,9 @@ Here are two examples: items.Add(new TreeItem() { Id = i, - Text = "Item " + i.ToString(), + Text = $"Item {i}", ParentId = i > 3 ? rnd.Next(1, 4) : null, - HasChildren = i > 3 ? false : true + HasChildren = i <= 3 }); } @@ -161,7 +164,7 @@ Here are two examples: public class TreeItem { public int Id { get; set; } - public string Text { get; set; } + public string Text { get; set; } = string.Empty; public int? ParentId { get; set; } public bool HasChildren { get; set; } } @@ -223,21 +226,21 @@ The example uses simplified logic for parent-child item relationship. In product setTimeout(function() { var item = document.querySelector(treeSelector + " .k-selected"); if (item) { - item.scrollIntoView(); + item.scrollIntoView({ block: "nearest" }); } }, 300); } @code { - List TreeData { get; set; } - IEnumerable SelectedItems { get; set; } = new List(); - IEnumerable ExpandedItems { get; set; } = new List(); - - int? RootItemId { get; set; } = 3; - int? ChildItemId { get; set; } = 25; - int LoadingDelay { get; set; } = 500; - bool ShouldScroll { get; set; } + private List TreeData { get; set; } + private IEnumerable SelectedItems { get; set; } = new List(); + private IEnumerable ExpandedItems { get; set; } = new List(); + + private int? RootItemId { get; set; } = 3; + private int? ChildItemId { get; set; } = 25; + private int LoadingDelay { get; set; } = 500; + private bool ShouldScroll { get; set; } async Task SelectAndScroll() {