* Added handling saving and deleting filters
This commit is contained in:
@@ -33,8 +33,8 @@
|
|||||||
<SfMenu TValue="MenuItem" HamburgerMode="true" Orientation="Vertical" Title="Menu">
|
<SfMenu TValue="MenuItem" HamburgerMode="true" Orientation="Vertical" Title="Menu">
|
||||||
<MenuItems>
|
<MenuItems>
|
||||||
<MenuItem Text="Zamówienia DELFOR" Url="/" IconCss="fa-solid fa-landmark"></MenuItem>
|
<MenuItem Text="Zamówienia DELFOR" Url="/" IconCss="fa-solid fa-landmark"></MenuItem>
|
||||||
<MenuItem Text="Zamówienia klienta EDI" Url="/EdiCustomerOrders" IconCss="fa-solid fa-list-check"></MenuItem>
|
@* <MenuItem Text="Zamówienia klienta EDI" Url="/EdiCustomerOrders" IconCss="fa-solid fa-list-check"></MenuItem> *@
|
||||||
<MenuItem Text="Zamówienia klienta" Url="/CustomerOrders" IconCss="fa-solid fa-database"></MenuItem>
|
@* <MenuItem Text="Zamówienia klienta" Url="/CustomerOrders" IconCss="fa-solid fa-database"></MenuItem> *@
|
||||||
@if (UserName == "pkus")
|
@if (UserName == "pkus")
|
||||||
{
|
{
|
||||||
<MenuItem Text="Admin" IconCss="fa-solid fa-screwdriver-wrench">
|
<MenuItem Text="Admin" IconCss="fa-solid fa-screwdriver-wrench">
|
||||||
|
|||||||
@@ -9,10 +9,12 @@
|
|||||||
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
|
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
|
||||||
@inject NavigationManager NavigationManager;
|
@inject NavigationManager NavigationManager;
|
||||||
|
|
||||||
<ScheduleOrdersGrid PageSize="20" PassGridRef="SetGridRef" GridData="_scheduleOrders" />
|
<ScheduleOrdersGrid PageSize="20" @ref="_grid" PassGridRef="SetGridRef" GridData="_scheduleOrders" />
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private IEnumerable<ScheduleOrderDto> _scheduleOrders = [];
|
private IEnumerable<ScheduleOrderDto> _scheduleOrders = [];
|
||||||
|
|
||||||
|
private ScheduleOrdersGrid _grid { get; set; }
|
||||||
|
|
||||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
{
|
{
|
||||||
@@ -28,8 +30,13 @@
|
|||||||
// {
|
// {
|
||||||
_scheduleOrders = await FetchScheduleOrdersAsync();
|
_scheduleOrders = await FetchScheduleOrdersAsync();
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
|
//
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await _grid.RestoreFilterFromLocalStorage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IEnumerable<ScheduleOrderDto>> FetchScheduleOrdersAsync()
|
private async Task<IEnumerable<ScheduleOrderDto>> FetchScheduleOrdersAsync()
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
@inject NavigationManager NavigationManager
|
@inject NavigationManager NavigationManager
|
||||||
|
@using System.Text.Json
|
||||||
@using Syncfusion.Blazor.Grids
|
@using Syncfusion.Blazor.Grids
|
||||||
@using Syncfusion.Blazor.Cards
|
@using Syncfusion.Blazor.Cards
|
||||||
|
@using Syncfusion.Blazor.Data
|
||||||
|
@using FilterType = Syncfusion.Blazor.Grids.FilterType
|
||||||
|
@using Syncfusion.Blazor.Navigations
|
||||||
@inherits LayoutComponentBase
|
@inherits LayoutComponentBase
|
||||||
|
|
||||||
@inject ScheduleOrderService ScheduleOrderService
|
@inject ScheduleOrderService ScheduleOrderService
|
||||||
|
@inject IJSRuntime JSRuntime
|
||||||
|
|
||||||
<div class="h-100 d-flex justify-content-center align-items-start">
|
<div class="h-100 d-flex justify-content-center align-items-start">
|
||||||
<SfCard CssClass="shadow" style="width: 100%; max-width: 1200px;">
|
<SfCard CssClass="shadow" style="width: 100%; max-width: 1200px;">
|
||||||
@@ -25,13 +30,27 @@
|
|||||||
SelectionMode="GridSelectionMode.Single"
|
SelectionMode="GridSelectionMode.Single"
|
||||||
QueryCellInfo="OnQueryCellInfo"
|
QueryCellInfo="OnQueryCellInfo"
|
||||||
RowSelected="OnRowSelected">
|
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>
|
<GridColumns>
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDto.PONum) HeaderText="Zamówienie Klienta" Width="150" AllowFiltering="true"></GridColumn>
|
<GridColumn Field=@nameof(ScheduleOrderDto.PONum) HeaderText="Zamówienie Klienta" Width="150"
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDto.PurchaserCode) HeaderText="Klient" Width="100" AllowFiltering="true"></GridColumn>
|
AllowFiltering="true"></GridColumn>
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDto.RecipientName) HeaderText="Odbiorca" Width="100" AllowFiltering="true"></GridColumn>
|
<GridColumn Field=@nameof(ScheduleOrderDto.PurchaserCode) HeaderText="Klient" Width="100"
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDto.RecipientCode) HeaderText="Kod odbiorcy" Width="100" AllowFiltering="true"></GridColumn>
|
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.RecipientName) HeaderText="Odbiorca" Width="100"
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDto.DocType) HeaderText="Typ Dokumentu" Width="100" AllowFiltering="true"></GridColumn>
|
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>
|
</GridColumns>
|
||||||
<GridTemplates>
|
<GridTemplates>
|
||||||
<DetailTemplate>
|
<DetailTemplate>
|
||||||
@@ -47,12 +66,19 @@
|
|||||||
EnableAdaptiveUI="true"
|
EnableAdaptiveUI="true"
|
||||||
AdaptiveUIMode="AdaptiveMode.Both">
|
AdaptiveUIMode="AdaptiveMode.Both">
|
||||||
<GridColumns>
|
<GridColumns>
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDto.OrderNumber) HeaderText="Numer Zamówienia" Width="100"></GridColumn>
|
<GridColumn Field=@nameof(ScheduleOrderDetailDto.OrderNumber)
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDto.PurchaserName) HeaderText="Klient" Width="100"></GridColumn>
|
HeaderText="Numer Zamówienia" Width="100"></GridColumn>
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDto.RecipientName) HeaderText="Odbiorca" Width="100"></GridColumn>
|
<GridColumn Field=@nameof(ScheduleOrderDetailDto.PurchaserName) HeaderText="Klient"
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDto.RecipientCode) HeaderText="Kod odbiorcy" Width="100" AllowFiltering="true"></GridColumn>
|
Width="100"></GridColumn>
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sc_productCode) HeaderText="Pozycja" Width="100"></GridColumn>
|
<GridColumn Field=@nameof(ScheduleOrderDetailDto.RecipientName)
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sh_productCode) HeaderText="Pozycja Klienta" Width="100"></GridColumn>
|
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>
|
</GridColumns>
|
||||||
<GridTemplates>
|
<GridTemplates>
|
||||||
<DetailTemplate Context="detail">
|
<DetailTemplate Context="detail">
|
||||||
@@ -67,16 +93,26 @@
|
|||||||
EnableAdaptiveUI="true"
|
EnableAdaptiveUI="true"
|
||||||
AdaptiveUIMode="AdaptiveMode.Both">
|
AdaptiveUIMode="AdaptiveMode.Both">
|
||||||
<GridColumns>
|
<GridColumns>
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.DateFrom) HeaderText="Data Od" Width="100"></GridColumn>
|
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.DateFrom)
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.DateTo) HeaderText="Data Do" Width="100"></GridColumn>
|
HeaderText="Data Od" Width="100"></GridColumn>
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.Qty) TextAlign="TextAlign.Right" HeaderText="Ilość Sztuk" Width="50"></GridColumn>
|
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.DateTo)
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.QtyType) TextAlign="TextAlign.Right" HeaderText="Typ Qty" Width="50"></GridColumn>
|
HeaderText="Data Do" Width="100"></GridColumn>
|
||||||
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.QtyDesc) HeaderText="Opis Typu" 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>
|
</GridColumns>
|
||||||
<GridFilterSettings Type="FilterType.Excel"/>
|
<GridFilterSettings Type="FilterType.Excel"/>
|
||||||
<GridPageSettings PageSize="10"/>
|
<GridPageSettings PageSize="10"/>
|
||||||
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
|
<GridSelectionSettings Mode="SelectionMode.Row"
|
||||||
<GridEvents TValue="ScheduleOrderDetailDetailDto" OnRecordDoubleClick="OnScheduleOrderDetailDetailRowDoubleClick" RowDataBound="OnRowDataBound"/>
|
Type="SelectionType.Single"/>
|
||||||
|
<GridEvents TValue="ScheduleOrderDetailDetailDto"
|
||||||
|
OnRecordDoubleClick="OnScheduleOrderDetailDetailRowDoubleClick"
|
||||||
|
RowDataBound="OnRowDataBound"/>
|
||||||
</SfGrid>
|
</SfGrid>
|
||||||
}
|
}
|
||||||
</DetailTemplate>
|
</DetailTemplate>
|
||||||
@@ -84,7 +120,8 @@
|
|||||||
<GridFilterSettings Type="FilterType.Excel"/>
|
<GridFilterSettings Type="FilterType.Excel"/>
|
||||||
<GridPageSettings PageSize="10"/>
|
<GridPageSettings PageSize="10"/>
|
||||||
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
|
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
|
||||||
<GridEvents TValue="ScheduleOrderDetailDto" OnRecordDoubleClick="OnScheduleOrderDetailRowDoubleClick"/>
|
<GridEvents TValue="ScheduleOrderDetailDto"
|
||||||
|
OnRecordDoubleClick="OnScheduleOrderDetailRowDoubleClick"/>
|
||||||
</SfGrid>
|
</SfGrid>
|
||||||
}
|
}
|
||||||
</DetailTemplate>
|
</DetailTemplate>
|
||||||
@@ -131,21 +168,21 @@
|
|||||||
int scheduleOrderId = obj.RowData.ID;
|
int scheduleOrderId = obj.RowData.ID;
|
||||||
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
|
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnScheduleOrderDetailRowDoubleClick(RecordDoubleClickEventArgs<ScheduleOrderDetailDto> obj)
|
private void OnScheduleOrderDetailRowDoubleClick(RecordDoubleClickEventArgs<ScheduleOrderDetailDto> obj)
|
||||||
{
|
{
|
||||||
int? scheduleOrderId = ScheduleOrderDto?.ID;
|
int? scheduleOrderId = ScheduleOrderDto?.ID;
|
||||||
|
|
||||||
if (scheduleOrderId is not null)
|
if (scheduleOrderId is not null)
|
||||||
{
|
{
|
||||||
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
|
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnScheduleOrderDetailDetailRowDoubleClick(RecordDoubleClickEventArgs<ScheduleOrderDetailDetailDto> obj)
|
private void OnScheduleOrderDetailDetailRowDoubleClick(RecordDoubleClickEventArgs<ScheduleOrderDetailDetailDto> obj)
|
||||||
{
|
{
|
||||||
int? scheduleOrderId = ScheduleOrderDto?.ID;
|
int? scheduleOrderId = ScheduleOrderDto?.ID;
|
||||||
|
|
||||||
if (scheduleOrderId is not null)
|
if (scheduleOrderId is not null)
|
||||||
{
|
{
|
||||||
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -16,22 +16,22 @@ builder.Services.AddSyncfusionBlazor();
|
|||||||
builder.Services.AddBlazorBootstrap();
|
builder.Services.AddBlazorBootstrap();
|
||||||
builder.Services.AddBlazoredLocalStorage();
|
builder.Services.AddBlazoredLocalStorage();
|
||||||
|
|
||||||
// builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
|
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
|
||||||
// .AddJwtBearer(options =>
|
.AddJwtBearer(options =>
|
||||||
// {
|
{
|
||||||
// options.TokenValidationParameters = new TokenValidationParameters
|
options.TokenValidationParameters = new TokenValidationParameters
|
||||||
// {
|
{
|
||||||
// ValidateIssuer = true,
|
ValidateIssuer = true,
|
||||||
// ValidateAudience = true,
|
ValidateAudience = true,
|
||||||
// ValidateLifetime = true,
|
ValidateLifetime = true,
|
||||||
// ValidateIssuerSigningKey = true,
|
ValidateIssuerSigningKey = true,
|
||||||
// ValidIssuer = builder.Configuration["Jwt:Issuer"],
|
ValidIssuer = builder.Configuration["Jwt:Issuer"],
|
||||||
// ValidAudience = builder.Configuration["Jwt:Audience"],
|
ValidAudience = builder.Configuration["Jwt:Audience"],
|
||||||
// IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"] ?? string.Empty)),
|
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"] ?? string.Empty)),
|
||||||
// NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
|
NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
|
||||||
// };
|
};
|
||||||
// });
|
});
|
||||||
//
|
|
||||||
builder.Services.AddAuthorizationCore();
|
builder.Services.AddAuthorizationCore();
|
||||||
builder.Services.AddScoped<CustomAuthenticationStateProvider>();
|
builder.Services.AddScoped<CustomAuthenticationStateProvider>();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user