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"]" />
</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">
@foreach (var item in VisibleItems)
{

@ -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<Item> _visibleItems;
private List<Item> 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)
{

@ -126,4 +126,13 @@
<data name="search_label" xml:space="preserve">
<value>Rechercher</value>
</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>

@ -126,4 +126,13 @@
<data name="search_label" xml:space="preserve">
<value>Search</value>
</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>
Loading…
Cancel
Save