From 8899dd578e48c95291820936d2d126c7221b9c02 Mon Sep 17 00:00:00 2001 From: Alexis DRAI Date: Sat, 25 Feb 2023 17:41:59 +0100 Subject: [PATCH] :sparkles: Add sorting --- blazor_lab/Components/InventoryList.razor | 8 +++++ blazor_lab/Components/InventoryList.razor.cs | 29 +++++++++++++++++++ .../Components.InventoryList.fr-FR.resx | 9 ++++++ .../Resources/Components.InventoryList.resx | 9 ++++++ 4 files changed, 55 insertions(+) diff --git a/blazor_lab/Components/InventoryList.razor b/blazor_lab/Components/InventoryList.razor index a437545..610ebfd 100644 --- a/blazor_lab/Components/InventoryList.razor +++ b/blazor_lab/Components/InventoryList.razor @@ -3,6 +3,14 @@ +
+ + +
+
@foreach (var item in VisibleItems) { diff --git a/blazor_lab/Components/InventoryList.razor.cs b/blazor_lab/Components/InventoryList.razor.cs index adb79ed..3a01c71 100644 --- a/blazor_lab/Components/InventoryList.razor.cs +++ b/blazor_lab/Components/InventoryList.razor.cs @@ -4,6 +4,11 @@ using Microsoft.Extensions.Localization; namespace blazor_lab.Components { + public enum SortOption + { + NameDescending, + NameAscending + } public partial class InventoryList { [Inject] @@ -22,9 +27,23 @@ namespace blazor_lab.Components private void UpdateFilteredItems() { _filteredItems = string.IsNullOrEmpty(searchQuery) ? Items : Items.Where(i => i.DisplayName.ToLower().Contains(searchQuery.ToLower())).ToList(); + SortItems(); VisibleItems = _filteredItems.Skip((currentPage - 1) * pageSize).Take(pageSize).ToList(); } + private void SortItems() + { + switch (_sortOption) + { + case SortOption.NameAscending: + _filteredItems = _filteredItems.OrderBy(i => i.DisplayName).ToList(); + break; + case SortOption.NameDescending: + _filteredItems = _filteredItems.OrderByDescending(i => i.DisplayName).ToList(); + break; + } + } + private List _visibleItems; private List VisibleItems @@ -41,6 +60,8 @@ namespace blazor_lab.Components private int TotalItems => _filteredItems.Count; + private SortOption _sortOption = SortOption.NameDescending; + private void GoToPage(int page) { currentPage = page; @@ -58,6 +79,14 @@ namespace blazor_lab.Components await Task.Delay(250); // debounce the search to avoid excessive API requests UpdateFilteredItems(); } + private void OnSortOptionChanged(ChangeEventArgs e) + { + if (Enum.TryParse(e.Value.ToString(), out SortOption sortOption)) + { + _sortOption = sortOption; + UpdateFilteredItems(); + } + } protected override void OnAfterRender(bool firstRender) { diff --git a/blazor_lab/Resources/Components.InventoryList.fr-FR.resx b/blazor_lab/Resources/Components.InventoryList.fr-FR.resx index 51dfb55..cccd282 100644 --- a/blazor_lab/Resources/Components.InventoryList.fr-FR.resx +++ b/blazor_lab/Resources/Components.InventoryList.fr-FR.resx @@ -126,4 +126,13 @@ Rechercher + + Trier par + + + Trier par nom (Asc.) + + + Trier par nom (Desc.) + \ No newline at end of file diff --git a/blazor_lab/Resources/Components.InventoryList.resx b/blazor_lab/Resources/Components.InventoryList.resx index 517c3a8..515e221 100644 --- a/blazor_lab/Resources/Components.InventoryList.resx +++ b/blazor_lab/Resources/Components.InventoryList.resx @@ -126,4 +126,13 @@ Search + + Sort by name (Asc.) + + + Sort by name (Desc.) + + + Sort + \ No newline at end of file