* Added handling saving and deleting filters

This commit is contained in:
2025-03-21 05:57:12 +01:00
parent c62e23c8e7
commit baa6065f15
4 changed files with 154 additions and 43 deletions

View File

@@ -9,10 +9,12 @@
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
@inject NavigationManager NavigationManager;
<ScheduleOrdersGrid PageSize="20" PassGridRef="SetGridRef" GridData="_scheduleOrders" />
<ScheduleOrdersGrid PageSize="20" @ref="_grid" PassGridRef="SetGridRef" GridData="_scheduleOrders" />
@code {
private IEnumerable<ScheduleOrderDto> _scheduleOrders = [];
private ScheduleOrdersGrid _grid { get; set; }
protected override async Task OnAfterRenderAsync(bool firstRender)
{
@@ -28,8 +30,13 @@
// {
_scheduleOrders = await FetchScheduleOrdersAsync();
StateHasChanged();
//
// }
}
else
{
await _grid.RestoreFilterFromLocalStorage();
}
}
private async Task<IEnumerable<ScheduleOrderDto>> FetchScheduleOrdersAsync()

View File

@@ -1,9 +1,14 @@
@inject NavigationManager NavigationManager
@using System.Text.Json
@using Syncfusion.Blazor.Grids
@using Syncfusion.Blazor.Cards
@using Syncfusion.Blazor.Data
@using FilterType = Syncfusion.Blazor.Grids.FilterType
@using Syncfusion.Blazor.Navigations
@inherits LayoutComponentBase
@inject ScheduleOrderService ScheduleOrderService
@inject IJSRuntime JSRuntime
<div class="h-100 d-flex justify-content-center align-items-start">
<SfCard CssClass="shadow" style="width: 100%; max-width: 1200px;">
@@ -25,13 +30,27 @@
SelectionMode="GridSelectionMode.Single"
QueryCellInfo="OnQueryCellInfo"
RowSelected="OnRowSelected">
<SfToolbar>
<ToolbarItems>
<ToolbarItem Type="ItemType.Button" Text="Zapisz Filtry" Id="SaveButton"
PrefixIcon="e-icons e-save" OnClick="SaveFilters"/>
<ToolbarItem Type="ItemType.Button" Id="DeleteButton" PrefixIcon="e-icons e-delete"
Text="Usuń Zapisane Filtry" OnClick="DeleteFilters"/>
</ToolbarItems>
</SfToolbar>
<GridColumns>
<GridColumn Field=@nameof(ScheduleOrderDto.PONum) HeaderText="Zamówienie Klienta" Width="150" AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.PurchaserCode) HeaderText="Klient" Width="100" AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.RecipientName) HeaderText="Odbiorca" Width="100" AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.RecipientCode) HeaderText="Kod odbiorcy" Width="100" AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.LastUpdateDate) HeaderText="Data Utworzenia" Format="d" Type="ColumnType.Date" Width="130" AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.DocType) HeaderText="Typ Dokumentu" Width="100" AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.PONum) HeaderText="Zamówienie Klienta" Width="150"
AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.PurchaserCode) HeaderText="Klient" Width="100"
AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.RecipientName) HeaderText="Odbiorca" Width="100"
AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.RecipientCode) HeaderText="Kod odbiorcy" Width="100"
AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.LastUpdateDate) HeaderText="Data Utworzenia" Format="d"
Type="ColumnType.Date" Width="130" AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDto.DocType) HeaderText="Typ Dokumentu" Width="100"
AllowFiltering="true"></GridColumn>
</GridColumns>
<GridTemplates>
<DetailTemplate>
@@ -47,12 +66,19 @@
EnableAdaptiveUI="true"
AdaptiveUIMode="AdaptiveMode.Both">
<GridColumns>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.OrderNumber) HeaderText="Numer Zamówienia" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.PurchaserName) HeaderText="Klient" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.RecipientName) HeaderText="Odbiorca" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.RecipientCode) HeaderText="Kod odbiorcy" Width="100" AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sc_productCode) HeaderText="Pozycja" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sh_productCode) HeaderText="Pozycja Klienta" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.OrderNumber)
HeaderText="Numer Zamówienia" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.PurchaserName) HeaderText="Klient"
Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.RecipientName)
HeaderText="Odbiorca" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.RecipientCode)
HeaderText="Kod odbiorcy" Width="100"
AllowFiltering="true"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sc_productCode)
HeaderText="Pozycja" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sh_productCode)
HeaderText="Pozycja Klienta" Width="100"></GridColumn>
</GridColumns>
<GridTemplates>
<DetailTemplate Context="detail">
@@ -67,16 +93,26 @@
EnableAdaptiveUI="true"
AdaptiveUIMode="AdaptiveMode.Both">
<GridColumns>
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.DateFrom) HeaderText="Data Od" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.DateTo) HeaderText="Data Do" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.Qty) TextAlign="TextAlign.Right" HeaderText="Ilość Sztuk" Width="50"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.QtyType) TextAlign="TextAlign.Right" HeaderText="Typ Qty" Width="50"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.QtyDesc) HeaderText="Opis Typu" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.DateFrom)
HeaderText="Data Od" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.DateTo)
HeaderText="Data Do" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.Qty)
TextAlign="TextAlign.Right" HeaderText="Ilość Sztuk"
Width="50"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.QtyType)
TextAlign="TextAlign.Right" HeaderText="Typ Qty"
Width="50"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.QtyDesc)
HeaderText="Opis Typu" Width="100"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
<GridEvents TValue="ScheduleOrderDetailDetailDto" OnRecordDoubleClick="OnScheduleOrderDetailDetailRowDoubleClick" RowDataBound="OnRowDataBound"/>
<GridSelectionSettings Mode="SelectionMode.Row"
Type="SelectionType.Single"/>
<GridEvents TValue="ScheduleOrderDetailDetailDto"
OnRecordDoubleClick="OnScheduleOrderDetailDetailRowDoubleClick"
RowDataBound="OnRowDataBound"/>
</SfGrid>
}
</DetailTemplate>
@@ -84,7 +120,8 @@
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
<GridEvents TValue="ScheduleOrderDetailDto" OnRecordDoubleClick="OnScheduleOrderDetailRowDoubleClick"/>
<GridEvents TValue="ScheduleOrderDetailDto"
OnRecordDoubleClick="OnScheduleOrderDetailRowDoubleClick"/>
</SfGrid>
}
</DetailTemplate>
@@ -131,21 +168,21 @@
int scheduleOrderId = obj.RowData.ID;
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
}
private void OnScheduleOrderDetailRowDoubleClick(RecordDoubleClickEventArgs<ScheduleOrderDetailDto> obj)
{
int? scheduleOrderId = ScheduleOrderDto?.ID;
if (scheduleOrderId is not null)
{
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
}
}
private void OnScheduleOrderDetailDetailRowDoubleClick(RecordDoubleClickEventArgs<ScheduleOrderDetailDetailDto> obj)
{
int? scheduleOrderId = ScheduleOrderDto?.ID;
if (scheduleOrderId is not null)
{
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
@@ -179,4 +216,71 @@
}
}
public async Task RestoreFilterFromLocalStorage()
{
var filterJson = await JSRuntime.InvokeAsync<string>("localStorage.getItem", "gridFilter");
if (!string.IsNullOrEmpty(filterJson))
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var filters = JsonSerializer.Deserialize<List<WhereFilter>>(filterJson, options);
await Grid.ClearFilteringAsync();
if (filters != null && filters.Any())
{
foreach (var filter in filters.GroupBy(x => x.Field))
{
IList<object> values = filter.Select(x => GetValueFromJsonElement((JsonElement)x.value)).ToList();
await Grid.FilterByColumnAsync(filter.Key, filter.First().Operator.ToLower(), values);
}
await Grid.Refresh();
}
}
}
private object GetValueFromJsonElement(JsonElement element)
{
switch (element.ValueKind)
{
case JsonValueKind.String:
return element.GetString();
case JsonValueKind.Number:
if (element.TryGetInt32(out int intValue)) return intValue;
if (element.TryGetDouble(out double doubleValue)) return doubleValue;
break;
case JsonValueKind.True:
return true;
case JsonValueKind.False:
return false;
case JsonValueKind.Null:
return null;
default:
Console.WriteLine($"Nieobsługiwany typ JsonElement: {element.ValueKind}");
return null;
}
return null;
}
private async Task SaveFilters()
{
var filterSettings = Grid.FilterSettings.Columns;
if (filterSettings != null && filterSettings.Any())
{
string filterJson = JsonSerializer.Serialize(filterSettings);
await JSRuntime.InvokeVoidAsync("localStorage.setItem", "gridFilter", filterJson);
}
}
private async Task DeleteFilters()
{
await JSRuntime.InvokeVoidAsync("localStorage.removeItem", "gridFilter");
await Grid.ClearFilteringAsync();
}
}