Add sorting

pull/3/head
Alexis Drai 2 years ago
parent ba92943241
commit 8899dd578e

@ -3,6 +3,14 @@
<input type="text" value="@searchQuery" @oninput="OnInputChange" placeholder="@Localizer["search_label"]" /> <input type="text" value="@searchQuery" @oninput="OnInputChange" placeholder="@Localizer["search_label"]" />
</div> </div>
<div class="sort-container">
<label>@Localizer["sort_label"]</label>
<select @onchange="OnSortOptionChanged">
<option value="NameDescending">@Localizer["sort_by_name_desc"]</option>
<option value="NameAscending">@Localizer["sort_by_name_asc"]</option>
</select>
</div>
<div class="inventory-list-items"> <div class="inventory-list-items">
@foreach (var item in VisibleItems) @foreach (var item in VisibleItems)
{ {

@ -4,6 +4,11 @@ using Microsoft.Extensions.Localization;
namespace blazor_lab.Components namespace blazor_lab.Components
{ {
public enum SortOption
{
NameDescending,
NameAscending
}
public partial class InventoryList public partial class InventoryList
{ {
[Inject] [Inject]
@ -22,9 +27,23 @@ namespace blazor_lab.Components
private void UpdateFilteredItems() private void UpdateFilteredItems()
{ {
_filteredItems = string.IsNullOrEmpty(searchQuery) ? Items : Items.Where(i => i.DisplayName.ToLower().Contains(searchQuery.ToLower())).ToList(); _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(); 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<Item> _visibleItems; private List<Item> _visibleItems;
private List<Item> VisibleItems private List<Item> VisibleItems
@ -41,6 +60,8 @@ namespace blazor_lab.Components
private int TotalItems => _filteredItems.Count; private int TotalItems => _filteredItems.Count;
private SortOption _sortOption = SortOption.NameDescending;
private void GoToPage(int page) private void GoToPage(int page)
{ {
currentPage = page; currentPage = page;
@ -58,6 +79,14 @@ namespace blazor_lab.Components
await Task.Delay(250); // debounce the search to avoid excessive API requests await Task.Delay(250); // debounce the search to avoid excessive API requests
UpdateFilteredItems(); UpdateFilteredItems();
} }
private void OnSortOptionChanged(ChangeEventArgs e)
{
if (Enum.TryParse(e.Value.ToString(), out SortOption sortOption))
{
_sortOption = sortOption;
UpdateFilteredItems();
}
}
protected override void OnAfterRender(bool firstRender) protected override void OnAfterRender(bool firstRender)
{ {

@ -126,4 +126,13 @@
<data name="search_label" xml:space="preserve"> <data name="search_label" xml:space="preserve">
<value>Rechercher</value> <value>Rechercher</value>
</data> </data>
<data name="sort_by" xml:space="preserve">
<value>Trier par</value>
</data>
<data name="sort_by_name_asc" xml:space="preserve">
<value>Trier par nom (Asc.)</value>
</data>
<data name="sort_by_name_desc" xml:space="preserve">
<value>Trier par nom (Desc.)</value>
</data>
</root> </root>

@ -126,4 +126,13 @@
<data name="search_label" xml:space="preserve"> <data name="search_label" xml:space="preserve">
<value>Search</value> <value>Search</value>
</data> </data>
<data name="sort_by_name_asc" xml:space="preserve">
<value>Sort by name (Asc.)</value>
</data>
<data name="sort_by_name_desc" xml:space="preserve">
<value>Sort by name (Desc.)</value>
</data>
<data name="sort_label" xml:space="preserve">
<value>Sort</value>
</data>
</root> </root>
Loading…
Cancel
Save