diff --git a/OrdersManagement/Components/Layout/MainLayout.razor b/OrdersManagement/Components/Layout/MainLayout.razor index 3c2fc04..b4f21e5 100644 --- a/OrdersManagement/Components/Layout/MainLayout.razor +++ b/OrdersManagement/Components/Layout/MainLayout.razor @@ -33,8 +33,8 @@ - - + @* *@ + @* *@ @if (UserName == "pkus") { diff --git a/OrdersManagement/Components/Pages/ScheduleOrders.razor b/OrdersManagement/Components/Pages/ScheduleOrders.razor index f4c564d..63eb028 100644 --- a/OrdersManagement/Components/Pages/ScheduleOrders.razor +++ b/OrdersManagement/Components/Pages/ScheduleOrders.razor @@ -9,10 +9,12 @@ @inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider @inject NavigationManager NavigationManager; - + @code { private IEnumerable _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> FetchScheduleOrdersAsync() diff --git a/OrdersManagement/Components/Pages/Shared/ScheduleOrdersGrid.razor b/OrdersManagement/Components/Pages/Shared/ScheduleOrdersGrid.razor index 615599c..d1a4194 100644 --- a/OrdersManagement/Components/Pages/Shared/ScheduleOrdersGrid.razor +++ b/OrdersManagement/Components/Pages/Shared/ScheduleOrdersGrid.razor @@ -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
@@ -25,13 +30,27 @@ SelectionMode="GridSelectionMode.Single" QueryCellInfo="OnQueryCellInfo" RowSelected="OnRowSelected"> + + + + + + - - - - - - + + + + + + @@ -47,12 +66,19 @@ EnableAdaptiveUI="true" AdaptiveUIMode="AdaptiveMode.Both"> - - - - - - + + + + + + @@ -67,16 +93,26 @@ EnableAdaptiveUI="true" AdaptiveUIMode="AdaptiveMode.Both"> - - - - - + + + + + - - + + } @@ -84,7 +120,8 @@ - + } @@ -131,21 +168,21 @@ int scheduleOrderId = obj.RowData.ID; NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}"); } - + private void OnScheduleOrderDetailRowDoubleClick(RecordDoubleClickEventArgs obj) { int? scheduleOrderId = ScheduleOrderDto?.ID; - + if (scheduleOrderId is not null) { NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}"); } } - + private void OnScheduleOrderDetailDetailRowDoubleClick(RecordDoubleClickEventArgs 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("localStorage.getItem", "gridFilter"); + if (!string.IsNullOrEmpty(filterJson)) + { + var options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }; + var filters = JsonSerializer.Deserialize>(filterJson, options); + + await Grid.ClearFilteringAsync(); + + if (filters != null && filters.Any()) + { + foreach (var filter in filters.GroupBy(x => x.Field)) + { + IList 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(); + } + } \ No newline at end of file diff --git a/OrdersManagement/Program.cs b/OrdersManagement/Program.cs index 229c061..53ded2d 100644 --- a/OrdersManagement/Program.cs +++ b/OrdersManagement/Program.cs @@ -16,22 +16,22 @@ builder.Services.AddSyncfusionBlazor(); builder.Services.AddBlazorBootstrap(); builder.Services.AddBlazoredLocalStorage(); -// builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) -// .AddJwtBearer(options => -// { -// options.TokenValidationParameters = new TokenValidationParameters -// { -// ValidateIssuer = true, -// ValidateAudience = true, -// ValidateLifetime = true, -// ValidateIssuerSigningKey = true, -// ValidIssuer = builder.Configuration["Jwt:Issuer"], -// ValidAudience = builder.Configuration["Jwt:Audience"], -// IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"] ?? string.Empty)), -// NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" -// }; -// }); -// +builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) + .AddJwtBearer(options => + { + options.TokenValidationParameters = new TokenValidationParameters + { + ValidateIssuer = true, + ValidateAudience = true, + ValidateLifetime = true, + ValidateIssuerSigningKey = true, + ValidIssuer = builder.Configuration["Jwt:Issuer"], + ValidAudience = builder.Configuration["Jwt:Audience"], + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"] ?? string.Empty)), + NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" + }; + }); + builder.Services.AddAuthorizationCore(); builder.Services.AddScoped();