From 2c0e1567cb76c89bc70869ddfe70506ddf39527a Mon Sep 17 00:00:00 2001 From: Loretta Date: Thu, 6 Nov 2025 15:06:10 +0100 Subject: [PATCH] MgGridBase... --- .../User/Hotels/HotelManageTransfers.razor | 21 +- .../AddressDetailGridComponent.razor | 25 +- .../User/SysAdmins/ManageTransfers.razor | 25 +- .../ProductDetailGridComponent.razor | 27 +- .../User/SysAdmins/ProductGridComponent.razor | 24 +- .../TransferDestinationGridComponent.razor | 19 +- .../TransferToDriverGridComponent.razor | 23 +- .../UserProductMappingGridComponent.razor | 25 +- .../Shared/Components/Grids/MgGridBase.cs | 335 ++++++++++++++++ .../Shared/Components/Grids/TiamGrid.cs | 359 +----------------- 10 files changed, 438 insertions(+), 445 deletions(-) create mode 100644 TIAMSharedUI/Shared/Components/Grids/MgGridBase.cs diff --git a/TIAMSharedUI/Pages/User/Hotels/HotelManageTransfers.razor b/TIAMSharedUI/Pages/User/Hotels/HotelManageTransfers.razor index 29a9eb90..1b22f48e 100644 --- a/TIAMSharedUI/Pages/User/Hotels/HotelManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/Hotels/HotelManageTransfers.razor @@ -1,29 +1,30 @@ @page "/hotel/transfers/{HotelId:guid}" +@using AyCode.Blazor.Components.Components.Grids +@using AyCode.Core +@using AyCode.Core.Consts +@using AyCode.Core.Enums +@using AyCode.Core.Extensions +@using AyCode.Core.Helpers @using BlazorAnimation +@using DevExpress.Data.Filtering @using TIAM.Core.Consts @using TIAM.Core.Enums @using TIAM.Entities.Emails +@using TIAM.Entities.Emails @using TIAM.Entities.Transfers @using TIAM.Resources @using TIAM.Services @using TIAMSharedUI.Pages.Components @using TIAMSharedUI.Pages.User.SysAdmins @using TIAMSharedUI.Shared +@using TIAMSharedUI.Shared.Components.BaseComponents +@using TIAMSharedUI.Shared.Components.Grids @using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Models.ClientSide.UI @using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels @using TIAMWebApp.Shared.Application.Models.PageModels -@using TIAMWebApp.Shared.Application.Utility @using TIAMWebApp.Shared.Application.Services -@using TIAMSharedUI.Shared.Components.Grids -@using AyCode.Core.Enums -@using AyCode.Core.Extensions -@using AyCode.Core.Consts -@using AyCode.Core -@using AyCode.Core.Helpers -@using DevExpress.Data.Filtering -@using TIAM.Entities.Emails -@using TIAMSharedUI.Shared.Components.BaseComponents +@using TIAMWebApp.Shared.Application.Utility @inherits UserBasePageComponent @layout AdminLayout @inject IWizardProcessor wizardProcessor diff --git a/TIAMSharedUI/Pages/User/SysAdmins/AddressDetailGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/AddressDetailGridComponent.razor index b988de79..d1e94d2d 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/AddressDetailGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/AddressDetailGridComponent.razor @@ -1,20 +1,21 @@ -@using TIAM.Entities.Products -@using TIAM.Entities.ServiceProviders -@using TIAM.Entities.Transfers -@using TIAM.Entities.Drivers -@using TIAM.Entities.Users -@using TIAM.Models.Dtos.Users -@using TIAMWebApp.Shared.Application.Interfaces -@using TIAMWebApp.Shared.Application.Utility +@using AyCode.Blazor.Components.Components.Grids +@using AyCode.Core +@using AyCode.Core.Loggers +@using AyCode.Interfaces.Addresses @using AyCode.Services.Loggers @using TIAM.Core.Loggers @using TIAM.Entities.Addresses -@using TIAMSharedUI.Shared.Components.Grids +@using TIAM.Entities.Drivers +@using TIAM.Entities.Products +@using TIAM.Entities.ServiceProviders +@using TIAM.Entities.Transfers +@using TIAM.Entities.Users +@using TIAM.Models.Dtos.Users @using TIAMSharedUI.Pages.Components.EditComponents +@using TIAMSharedUI.Shared.Components.Grids +@using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Services -@using AyCode.Interfaces.Addresses -@using AyCode.Core -@using AyCode.Core.Loggers +@using TIAMWebApp.Shared.Application.Utility @inject IServiceProviderDataService serviceProviderDataService @inject IUserDataService userDataService @inject ITransferDataService transferDataService diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index bdc110b5..04def407 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -1,30 +1,31 @@ @page "/sysadmin/transfers" +@using AyCode.Blazor.Components.Components.Grids +@using AyCode.Core +@using AyCode.Core.Consts +@using AyCode.Core.Enums +@using AyCode.Core.Extensions +@using AyCode.Core.Helpers @using BlazorAnimation +@using DevExpress.Data.Filtering @using TIAM.Core.Consts @using TIAM.Core.Enums +@using TIAM.Entities.Drivers +@using TIAM.Entities.Emails @using TIAM.Entities.Emails @using TIAM.Entities.Transfers @using TIAM.Entities.Users @using TIAM.Resources +@using TIAM.Services @using TIAMSharedUI.Pages.Components @using TIAMSharedUI.Shared +@using TIAMSharedUI.Shared.Components.BaseComponents +@using TIAMSharedUI.Shared.Components.Grids @using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Models.ClientSide.UI @using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels @using TIAMWebApp.Shared.Application.Models.PageModels -@using TIAMWebApp.Shared.Application.Utility @using TIAMWebApp.Shared.Application.Services -@using TIAMSharedUI.Shared.Components.Grids -@using AyCode.Core.Enums -@using AyCode.Core.Extensions -@using AyCode.Core.Consts -@using AyCode.Core -@using AyCode.Core.Helpers -@using DevExpress.Data.Filtering -@using TIAM.Entities.Drivers -@using TIAM.Entities.Emails -@using TIAMSharedUI.Shared.Components.BaseComponents -@using TIAM.Services +@using TIAMWebApp.Shared.Application.Utility @inherits UserBasePageComponent @layout AdminLayout @inject IWizardProcessor wizardProcessor diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor index 93ac22fa..3ee5270b 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor @@ -1,25 +1,26 @@ -@using AyCode.Core.Helpers +@using Address = TIAM.Entities.Addresses.Address +@using AyCode.Blazor.Components.Components.Grids +@using AyCode.Core +@using AyCode.Core.Extensions +@using AyCode.Core.Helpers +@using AyCode.Core.Loggers +@using AyCode.Interfaces.Addresses +@using AyCode.Services.Loggers +@using Profile = TIAM.Entities.Profiles.Profile +@using TIAM.Core.Loggers +@using TIAM.Entities.Drivers @using TIAM.Entities.Products @using TIAM.Entities.ServiceProviders @using TIAM.Entities.Transfers -@using TIAM.Entities.Drivers @using TIAM.Entities.Users @using TIAM.Models.Dtos.Users @using TIAM.Resources @using TIAM.Services -@using TIAMWebApp.Shared.Application.Interfaces -@using TIAMWebApp.Shared.Application.Utility -@using AyCode.Services.Loggers -@using TIAM.Core.Loggers -@using Address = TIAM.Entities.Addresses.Address -@using Profile = TIAM.Entities.Profiles.Profile -@using TIAMSharedUI.Shared.Components.Grids @using TIAMSharedUI.Pages.Components.EditComponents +@using TIAMSharedUI.Shared.Components.Grids +@using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Services -@using AyCode.Interfaces.Addresses -@using AyCode.Core -@using AyCode.Core.Extensions -@using AyCode.Core.Loggers +@using TIAMWebApp.Shared.Application.Utility @inject IStringLocalizer Localizer @inject IEnumerable LogWriters @inject AdminSignalRClient AdminSignalRClient; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ProductGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/ProductGridComponent.razor index e9a3aa4b..eeda2e7c 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ProductGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ProductGridComponent.razor @@ -1,24 +1,24 @@ -@using AyCode.Core.Helpers +@using Address = TIAM.Entities.Addresses.Address +@using AyCode.Blazor.Components.Components.Grids +@using AyCode.Core +@using AyCode.Core.Helpers +@using AyCode.Core.Loggers +@using AyCode.Interfaces.Addresses +@using AyCode.Services.Loggers +@using Profile = TIAM.Entities.Profiles.Profile +@using TIAM.Core.Loggers +@using TIAM.Entities.Drivers @using TIAM.Entities.Products @using TIAM.Entities.ServiceProviders @using TIAM.Entities.Transfers -@using TIAM.Entities.Drivers @using TIAM.Entities.Users @using TIAM.Models.Dtos.Users @using TIAM.Resources @using TIAM.Services -@using TIAMWebApp.Shared.Application.Interfaces -@using TIAMWebApp.Shared.Application.Utility -@using AyCode.Services.Loggers -@using TIAM.Core.Loggers -@using Address = TIAM.Entities.Addresses.Address -@using Profile = TIAM.Entities.Profiles.Profile @using TIAMSharedUI.Shared.Components.Grids - +@using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Services -@using AyCode.Interfaces.Addresses -@using AyCode.Core -@using AyCode.Core.Loggers +@using TIAMWebApp.Shared.Application.Utility @inject IStringLocalizer Localizer @inject IEnumerable LogWriters @inject AdminSignalRClient AdminSignalRClient; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/TransferDestinationGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/TransferDestinationGridComponent.razor index c7f3ece6..1bf5cd79 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/TransferDestinationGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/TransferDestinationGridComponent.razor @@ -1,19 +1,20 @@ -@using TIAM.Entities.Addresses -@using TIAM.Entities.Transfers +@using AyCode.Blazor.Components.Components.Grids +@using AyCode.Core +@using AyCode.Core.Enums +@using AyCode.Core.Extensions +@using AyCode.Core.Loggers +@using AyCode.Services.Loggers +@using TIAM.Core.Loggers +@using TIAM.Entities.Addresses @using TIAM.Entities.Drivers +@using TIAM.Entities.Transfers @using TIAM.Models.Dtos.Users @using TIAM.Resources @using TIAM.Services @using TIAMSharedUI.Shared.Components.Grids @using TIAMWebApp.Shared.Application.Interfaces -@using TIAMWebApp.Shared.Application.Utility -@using TIAM.Core.Loggers -@using AyCode.Core.Loggers -@using AyCode.Services.Loggers @using TIAMWebApp.Shared.Application.Services -@using AyCode.Core.Enums -@using AyCode.Core.Extensions -@using AyCode.Core +@using TIAMWebApp.Shared.Application.Utility @inject IUserDataService UserDataService @inject IEnumerable LogWriters @inject AdminSignalRClient AdminSignalRClient; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor index 8cd522fe..5027ee3e 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor @@ -1,22 +1,23 @@ -@using TIAM.Entities.Transfers -@using TIAM.Entities.Drivers -@using TIAM.Models.Dtos.Users -@using TIAMSharedUI.Shared.Components.Grids -@using TIAMWebApp.Shared.Application.Interfaces -@using TIAMWebApp.Shared.Application.Utility -@using TIAM.Core.Loggers -@using AyCode.Core.Loggers -@using AyCode.Services.Loggers -@using TIAMWebApp.Shared.Application.Services +@using AyCode.Blazor.Components.Components.Grids +@using AyCode.Core @using AyCode.Core.Enums @using AyCode.Core.Extensions -@using AyCode.Core @using AyCode.Core.Helpers +@using AyCode.Core.Loggers +@using AyCode.Services.Loggers @using AyCode.Services.SignalRs @using AyCode.Utils.Extensions @using TIAM.Core.Consts +@using TIAM.Core.Loggers +@using TIAM.Entities.Drivers +@using TIAM.Entities.Transfers @using TIAM.Entities.Users +@using TIAM.Models.Dtos.Users @using TIAM.Services +@using TIAMSharedUI.Shared.Components.Grids +@using TIAMWebApp.Shared.Application.Interfaces +@using TIAMWebApp.Shared.Application.Services +@using TIAMWebApp.Shared.Application.Utility @inject IUserDataService UserDataService @inject IEnumerable LogWriters @inject AdminSignalRClient AdminSignalRClient; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor index 88842114..f0c4f5a8 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor @@ -1,23 +1,24 @@ -@using TIAM.Entities.Products -@using TIAM.Entities.Transfers +@using AyCode.Blazor.Components.Components.Grids +@using AyCode.Core +@using AyCode.Core.Enums +@using AyCode.Core.Helpers +@using AyCode.Core.Loggers +@using AyCode.Models.Users +@using AyCode.Services.Loggers +@using AyCode.Services.SignalRs +@using TIAM.Core.Consts +@using TIAM.Core.Loggers @using TIAM.Entities.Drivers +@using TIAM.Entities.Products +@using TIAM.Entities.Transfers @using TIAM.Entities.Users +@using TIAM.Models.Dtos.Products @using TIAM.Models.Dtos.Users @using TIAM.Services @using TIAMSharedUI.Shared.Components.Grids @using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Services @using TIAMWebApp.Shared.Application.Utility -@using TIAM.Core.Loggers -@using AyCode.Core.Loggers -@using AyCode.Services.Loggers -@using AyCode.Core -@using AyCode.Core.Enums -@using AyCode.Core.Helpers -@using AyCode.Models.Users -@using AyCode.Services.SignalRs -@using TIAM.Core.Consts -@using TIAM.Models.Dtos.Products @inject IServiceProviderDataService ServiceProviderDataService @inject IEnumerable LogWriters @inject AdminSignalRClient AdminSignalRClient diff --git a/TIAMSharedUI/Shared/Components/Grids/MgGridBase.cs b/TIAMSharedUI/Shared/Components/Grids/MgGridBase.cs new file mode 100644 index 00000000..2c85528a --- /dev/null +++ b/TIAMSharedUI/Shared/Components/Grids/MgGridBase.cs @@ -0,0 +1,335 @@ +//using System.ComponentModel; +//using AyCode.Blazor.Components.Components.Grids; +//using AyCode.Core; +//using AyCode.Core.Enums; +//using AyCode.Core.Extensions; +//using AyCode.Core.Helpers; +//using AyCode.Core.Interfaces; +//using AyCode.Services.Server.SignalRs; +//using AyCode.Services.SignalRs; +//using AyCode.Utils.Extensions; +//using DevExpress.Blazor; +//using Microsoft.AspNetCore.Components; +//using TIAMWebApp.Shared.Application.Utility; + +//namespace TIAMSharedUI.Shared.Components.Grids; + +//public abstract class MgGridBase : DxGrid where TDataItem : class, IId +//{ +// protected bool IsFirstInitializeParameters; +// private SignalRDataSource _dataSource = null!; +// private IList _dataSourceParam = []; +// private string _gridLogName; + +// public MgGridBase() : base() +// { +// } + +// [Parameter] public LoggerClient Logger { get; set; } +// [Parameter] public string GridName { get; set; } +// [Parameter] public object[]? ContextIds { get; set; } + +// private string? _filterText = null; + +// [Parameter] +// public string? FilterText +// { +// get => _filterText; +// set +// { +// _filterText = value; + +// if (_dataSource != null! && _dataSource.FilterText != value) +// { +// _dataSource.FilterText = value; +// ReloadDataSourceAsync().Forget(); +// } +// } +// } + +// [Parameter] public AcSignalRClientBase SignalRClient { get; set; } + +// [Parameter] public int GetAllMessageTag { get; set; } +// [Parameter] public int GetItemMessageTag { get; set; } +// [Parameter] public int AddMessageTag { get; set; } +// [Parameter] public int UpdateMessageTag { get; set; } +// [Parameter] public int RemoveMessageTag { get; set; } + +// protected new EventCallback DataItemDeleting { get; set; } +// [Parameter] public EventCallback OnGridItemDeleting { get; set; } + +// protected new EventCallback EditModelSaving { get; set; } +// [Parameter] public EventCallback OnGridEditModelSaving { get; set; } + +// [Parameter] public EventCallback> OnDataSourceChanged { get; set; } +// [Parameter] public EventCallback> OnGridItemChanging { get; set; } + +// /// +// /// After the server has responded! +// /// +// [Parameter] +// public EventCallback> OnGridItemChanged { get; set; } + +// [Parameter] +// [DefaultValue(null)] +// [System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "BL0007:Component parameters should be auto properties", Justification = "")] +// public IList DataSource +// { +// get +// { +// if (_dataSource == null && Data != null) +// { +// Logger.Error($"{_gridLogName} Use the DataSource parameter instead of Data!"); +// throw new NullReferenceException($"{_gridLogName} Use the DataSource parameter instead of Data!"); +// } + +// return _dataSource!; +// } +// set +// { +// _dataSourceParam = value; + +// if (_dataSource != null! && _dataSourceParam is List workingReferenceList) +// _dataSource.SetWorkingReferenceList(workingReferenceList); +// } +// } + +// protected override async Task OnInitializedAsync() +// { +// if (Logger == null) +// throw new NullReferenceException($"[{GetType().Name}] Logger == null"); + +// if (SignalRClient == null) +// { +// Logger.Error($"[{GetType().Name}] SignalRClient == null"); +// throw new NullReferenceException($"[{GetType().Name}] SignalRClient == null"); +// } + +// var crudTags = new SignalRCrudTags(GetAllMessageTag, GetItemMessageTag, AddMessageTag, UpdateMessageTag, RemoveMessageTag); +// _dataSource = new SignalRDataSource(SignalRClient, crudTags, ContextIds) { FilterText = FilterText }; + +// Data = _dataSource; + +// _dataSource.OnDataSourceLoaded += OnDataSourceLoaded; +// _dataSource.OnDataSourceItemChanged += OnDataSourceItemChanged; + +// await base.OnInitializedAsync(); +// } + +// private async Task OnDataSourceItemChanged(ItemChangedEventArgs args) +// { +// if (args.TrackingState is TrackingState.GetAll or TrackingState.None) return; + +// Logger.Debug($"{_gridLogName} OnDataSourceItemChanged; trackingState: {args.TrackingState}"); + +// var changedEventArgs = new GridDataItemChangedEventArgs(this, args.Item, args.TrackingState); +// await OnGridItemChanged.InvokeAsync(changedEventArgs); + +// if (!changedEventArgs.CancelStateChangeInvoke) +// { +// //BeginUpdate(); +// await InvokeAsync(StateHasChanged); //TODO: bezárja a DetailRow-t! pl: az email-nél IsReaded=true update... - J. +// //EndUpdate(); +// } +// } + +// private Task OnDataSourceLoaded() +// { +// Logger.Debug($"{_gridLogName} OnDataSourceLoaded; Count: {_dataSource.Count}"); + +// Reload(); +// //_dataSource.LoadItem(_dataSource.First().Id).Forget(); +// return OnDataSourceChanged.InvokeAsync(_dataSource); +// } + +// protected override async Task OnAfterRenderAsync(bool firstRender) +// { +// if (firstRender) +// { +// if (_dataSourceParam != null!) await _dataSource.LoadDataSource(_dataSourceParam, true, true); +// else _dataSource.LoadDataSourceAsync(true).Forget(); +// } + +// await base.OnAfterRenderAsync(firstRender); +// } + +// public Task AddDataItem(TDataItem dataItem) +// { +// if (dataItem.Id.IsNullOrEmpty()) dataItem.Id = Guid.NewGuid(); +// return _dataSource.Add(dataItem, true); +// } + +// public Task AddDataItemAsync(TDataItem dataItem) +// { +// if (dataItem.Id.IsNullOrEmpty()) dataItem.Id = Guid.NewGuid(); +// _dataSource.Add(dataItem); + +// return SaveChangesToServerAsync(); +// } + +// private async Task OnItemSaving(GridEditModelSavingEventArgs e) +// { +// var dataItem = (e.EditModel as TDataItem)!; + +// if (e.IsNew && dataItem.Id.IsNullOrEmpty()) dataItem.Id = Guid.NewGuid(); + +// var logText = e.IsNew ? "add" : "update"; +// Logger.Debug($"{_gridLogName} OnItemSaving {logText}; Id: {dataItem.Id}"); + +// await OnGridEditModelSaving.InvokeAsync(e); + +// if (e.Cancel) +// { +// Logger.Debug($"{_gridLogName} OnItemSaving {logText} canceled; Id: {dataItem.Id}"); +// return; +// } + +// if (e.IsNew) await AddDataItemAsync(dataItem); +// else await UpdateDataItemAsync(dataItem); + +// _dataSource.UpdateCollection(dataItem, false); +// } + +// private Task SaveChangesToServerAsync() +// { +// try +// { +// return _dataSource.SaveChangesAsync(); +// } +// catch (Exception ex) +// { +// Logger.Error($"{_gridLogName} SaveChangesToServerAsync->SaveChangesAsync error!", ex); +// } + +// return Task.CompletedTask; +// } + +// private async Task SaveChangesToServer() +// { +// var result = false; + +// try +// { +// var unsavedItems = await _dataSource.SaveChanges(); + +// if ((result = unsavedItems.Count == 0) == false) +// Logger.Error($"{_gridLogName} SaveChangesToServer->SaveChanges error! unsavedCount: {unsavedItems.Count}"); +// } +// catch (Exception ex) +// { +// Logger.Error($"{_gridLogName} OnItemSaving", ex); +// } + +// return result; +// } + +// private async Task OnItemDeleting(GridDataItemDeletingEventArgs e) +// { +// Logger.Debug($"{_gridLogName} OnItemDeleting"); + +// await OnGridItemDeleting.InvokeAsync(e); + +// if (e.Cancel) +// { +// Logger.Debug($"{_gridLogName} OnItemDeleting canceled"); +// return; +// } + +// var dataItem = (e.DataItem as TDataItem)!; +// await RemoveDataItem(dataItem); +// } + +// private void OnCustomizeElement(GridCustomizeElementEventArgs e) +// { +// if (e.ElementType == GridElementType.DetailCell) +// { +// e.Style = "padding: 0.5rem; opacity: 0.75"; +// } +// else if (false && e.ElementType == GridElementType.DataCell && e.Column.Name == nameof(IId.Id)) +// { +// e.Column.Visible = AcDomain.IsDeveloperVersion; +// e.Column.ShowInColumnChooser = AcDomain.IsDeveloperVersion; +// } +// } + +// protected override Task SetParametersAsyncCore(ParameterView parameters) +// { +// if (!IsFirstInitializeParameters) +// { +// //if (typeof(TDataItem) is IId || typeof(TDataItem) is IId) +// KeyFieldName = "Id"; + +// base.DataItemDeleting = EventCallback.Factory.Create(this, OnItemDeleting); +// base.EditModelSaving = EventCallback.Factory.Create(this, OnItemSaving); + +// CustomizeElement += OnCustomizeElement; + +// //ShowFilterRow = true; +// //PageSize = 4; +// //ShowGroupPanel = true; +// //AllowSort = false; + +// TextWrapEnabled = false; +// AllowSelectRowByClick = true; +// HighlightRowOnHover = true; +// AutoCollapseDetailRow = true; +// AutoExpandAllGroupRows = false; +// //KeyboardNavigationEnabled = true; + +// //var dataColumns = GetDataColumns(); + +// //var idColumn = dataColumns.FirstOrDefault(x => x.FieldName == nameof(IId.Id)); +// //if (idColumn != null) +// //{ +// // idColumn.ShowInColumnChooser = AcDomain.IsDeveloperVersion; +// // idColumn.Visible = !AcDomain.IsDeveloperVersion; +// //} + +// IsFirstInitializeParameters = true; +// } + +// return base.SetParametersAsyncCore(parameters); +// } + + +// protected override void OnParametersSet() +// { +// base.OnParametersSet(); + +// if (GridName.IsNullOrWhiteSpace()) GridName = $"{typeof(TDataItem).Name}Grid"; + +// _gridLogName = $"[{GridName}]"; + +// } + +// //public Task AddDataItem(TDataItem dataItem, int messageTag) => PostDataToServerAsync(dataItem, messageTag, TrackingState.Add); + +// public Task UpdateDataItem(TDataItem dataItem) => _dataSource.Update(dataItem, true); + +// public Task UpdateDataItemAsync(TDataItem dataItem) +// { +// _dataSource.Update(dataItem, false); +// return SaveChangesToServerAsync(); +// } +// //public Task UpdateDataItem(TDataItem dataItem, int messageTag) => PostDataToServerAsync(dataItem, messageTag, TrackingState.Update); + +// public Task AddOrUpdateDataItem(TDataItem dataItem) => _dataSource.AddOrUpdate(dataItem, true); + +// public Task RemoveDataItem(TDataItem dataItem) => _dataSource.Remove(dataItem, true); +// //public Task RemoveDataItem(TDataItem dataItem, int messageTag) => PostDataToServerAsync(dataItem, messageTag, TrackingState.Remove); + +// public Task RemoveDataItem(Guid id) => RemoveDataItem(id, RemoveMessageTag); + +// public Task RemoveDataItem(Guid id, int messageTag) +// { +// var dataItem = _dataSource.FirstOrDefault(x => x.Id == id); +// if (dataItem == null) return Task.CompletedTask; + +// return _dataSource.Remove(dataItem, true); +// } + +// public Task ReloadDataSourceAsync() +// { +// return _dataSource.LoadDataSourceAsync(false); +// } +//} \ No newline at end of file diff --git a/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs b/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs index d372d8f1..a78f504c 100644 --- a/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs +++ b/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs @@ -1,16 +1,8 @@ -using System.ComponentModel; -using System.Data.Common; -using AyCode.Blazor.Components.Services; -using AyCode.Core; +using AyCode.Blazor.Components.Components.Grids; using AyCode.Core.Enums; -using AyCode.Core.Extensions; -using AyCode.Core.Helpers; using AyCode.Core.Interfaces; -using AyCode.Services.Server.SignalRs; -using AyCode.Services.SignalRs; -using AyCode.Utils.Extensions; -using DevExpress.Blazor; -using Microsoft.AspNetCore.Components; +using DevExpress.Blazor.Internal; +using System.Data.Common; using TIAM.Core.Enums; using TIAM.Entities.Transfers; using TIAM.Services; @@ -19,347 +11,6 @@ using TIAMWebApp.Shared.Application.Utility; namespace TIAMSharedUI.Shared.Components.Grids { - public class TiamGrid : DxGrid where TDataItem : class, IId - { - protected bool IsFirstInitializeParameters; - private SignalRDataSource _dataSource = null!; - private IList _dataSourceParam = []; - private string _gridLogName; - - public TiamGrid() : base() - { - } - - [Parameter] public LoggerClient Logger { get; set; } - [Parameter] public string GridName { get; set; } - [Parameter] public object[]? ContextIds { get; set; } - - private string? _filterText = null; - - [Parameter] - public string? FilterText - { - get => _filterText; - set - { - _filterText = value; - - if (_dataSource != null! && _dataSource.FilterText != value) - { - _dataSource.FilterText = value; - ReloadDataSourceAsync().Forget(); - } - } - } - - [Parameter] public AcSignalRClientBase SignalRClient { get; set; } - - [Parameter] public int GetAllMessageTag { get; set; } - [Parameter] public int GetItemMessageTag { get; set; } - [Parameter] public int AddMessageTag { get; set; } - [Parameter] public int UpdateMessageTag { get; set; } - [Parameter] public int RemoveMessageTag { get; set; } - - protected new EventCallback DataItemDeleting { get; set; } - [Parameter] public EventCallback OnGridItemDeleting { get; set; } - - protected new EventCallback EditModelSaving { get; set; } - [Parameter] public EventCallback OnGridEditModelSaving { get; set; } - - [Parameter] public EventCallback> OnDataSourceChanged { get; set; } - [Parameter] public EventCallback> OnGridItemChanging { get; set; } - - /// - /// After the server has responded! - /// - [Parameter] - public EventCallback> OnGridItemChanged { get; set; } - - [Parameter] - [DefaultValue(null)] - [System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "BL0007:Component parameters should be auto properties", Justification = "")] - public IList DataSource - { - get - { - if (_dataSource == null && Data != null) - { - Logger.Error($"{_gridLogName} Use the DataSource parameter instead of Data!"); - throw new NullReferenceException($"{_gridLogName} Use the DataSource parameter instead of Data!"); - } - - return _dataSource!; - } - set - { - _dataSourceParam = value; - - if (_dataSource != null! && _dataSourceParam is List workingReferenceList) - _dataSource.SetWorkingReferenceList(workingReferenceList); - } - } - - protected override async Task OnInitializedAsync() - { - if (Logger == null) - throw new NullReferenceException($"[{GetType().Name}] Logger == null"); - - if (SignalRClient == null) - { - Logger.Error($"[{GetType().Name}] SignalRClient == null"); - throw new NullReferenceException($"[{GetType().Name}] SignalRClient == null"); - } - - var crudTags = new SignalRCrudTags(GetAllMessageTag, GetItemMessageTag, AddMessageTag, UpdateMessageTag, RemoveMessageTag); - _dataSource = new SignalRDataSource(SignalRClient, crudTags, ContextIds) { FilterText = FilterText }; - - Data = _dataSource; - - _dataSource.OnDataSourceLoaded += OnDataSourceLoaded; - _dataSource.OnDataSourceItemChanged += OnDataSourceItemChanged; - - await base.OnInitializedAsync(); - } - - private async Task OnDataSourceItemChanged(ItemChangedEventArgs args) - { - if (args.TrackingState is TrackingState.GetAll or TrackingState.None) return; - - Logger.Debug($"{_gridLogName} OnDataSourceItemChanged; trackingState: {args.TrackingState}"); - - var changedEventArgs = new GridDataItemChangedEventArgs(this, args.Item, args.TrackingState); - await OnGridItemChanged.InvokeAsync(changedEventArgs); - - if (!changedEventArgs.CancelStateChangeInvoke) - { - //BeginUpdate(); - await InvokeAsync(StateHasChanged); //TODO: bezárja a DetailRow-t! pl: az email-nél IsReaded=true update... - J. - //EndUpdate(); - } - } - - private Task OnDataSourceLoaded() - { - Logger.Debug($"{_gridLogName} OnDataSourceLoaded; Count: {_dataSource.Count}"); - - Reload(); - //_dataSource.LoadItem(_dataSource.First().Id).Forget(); - return OnDataSourceChanged.InvokeAsync(_dataSource); - } - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - if (_dataSourceParam != null!) await _dataSource.LoadDataSource(_dataSourceParam, true, true); - else _dataSource.LoadDataSourceAsync(true).Forget(); - } - - await base.OnAfterRenderAsync(firstRender); - } - - public Task AddDataItem(TDataItem dataItem) - { - if (dataItem.Id.IsNullOrEmpty()) dataItem.Id = Guid.NewGuid(); - return _dataSource.Add(dataItem, true); - } - - public Task AddDataItemAsync(TDataItem dataItem) - { - if (dataItem.Id.IsNullOrEmpty()) dataItem.Id = Guid.NewGuid(); - _dataSource.Add(dataItem); - - return SaveChangesToServerAsync(); - } - - private async Task OnItemSaving(GridEditModelSavingEventArgs e) - { - var dataItem = (e.EditModel as TDataItem)!; - - if (e.IsNew && dataItem.Id.IsNullOrEmpty()) dataItem.Id = Guid.NewGuid(); - - var logText = e.IsNew ? "add" : "update"; - Logger.Debug($"{_gridLogName} OnItemSaving {logText}; Id: {dataItem.Id}"); - - await OnGridEditModelSaving.InvokeAsync(e); - - if (e.Cancel) - { - Logger.Debug($"{_gridLogName} OnItemSaving {logText} canceled; Id: {dataItem.Id}"); - return; - } - - if (e.IsNew) await AddDataItemAsync(dataItem); - else await UpdateDataItemAsync(dataItem); - - _dataSource.UpdateCollection(dataItem, false); - } - - private Task SaveChangesToServerAsync() - { - try - { - return _dataSource.SaveChangesAsync(); - } - catch (Exception ex) - { - Logger.Error($"{_gridLogName} SaveChangesToServerAsync->SaveChangesAsync error!", ex); - } - - return Task.CompletedTask; - } - - private async Task SaveChangesToServer() - { - var result = false; - - try - { - var unsavedItems = await _dataSource.SaveChanges(); - - if ((result = unsavedItems.Count == 0) == false) - Logger.Error($"{_gridLogName} SaveChangesToServer->SaveChanges error! unsavedCount: {unsavedItems.Count}"); - } - catch (Exception ex) - { - Logger.Error($"{_gridLogName} OnItemSaving", ex); - } - - return result; - } - - private async Task OnItemDeleting(GridDataItemDeletingEventArgs e) - { - Logger.Debug($"{_gridLogName} OnItemDeleting"); - - await OnGridItemDeleting.InvokeAsync(e); - - if (e.Cancel) - { - Logger.Debug($"{_gridLogName} OnItemDeleting canceled"); - return; - } - - var dataItem = (e.DataItem as TDataItem)!; - await RemoveDataItem(dataItem); - } - - private void OnCustomizeElement(GridCustomizeElementEventArgs e) - { - if (e.ElementType == GridElementType.DetailCell) - { - e.Style = "padding: 0.5rem; opacity: 0.75"; - } - else if (false && e.ElementType == GridElementType.DataCell && e.Column.Name == nameof(IId.Id)) - { - e.Column.Visible = AcDomain.IsDeveloperVersion; - e.Column.ShowInColumnChooser = AcDomain.IsDeveloperVersion; - } - } - - protected override Task SetParametersAsyncCore(ParameterView parameters) - { - if (!IsFirstInitializeParameters) - { - //if (typeof(TDataItem) is IId || typeof(TDataItem) is IId) - KeyFieldName = "Id"; - - base.DataItemDeleting = EventCallback.Factory.Create(this, OnItemDeleting); - base.EditModelSaving = EventCallback.Factory.Create(this, OnItemSaving); - - CustomizeElement += OnCustomizeElement; - - //ShowFilterRow = true; - //PageSize = 4; - //ShowGroupPanel = true; - //AllowSort = false; - - TextWrapEnabled = false; - AllowSelectRowByClick = true; - HighlightRowOnHover = true; - AutoCollapseDetailRow = true; - AutoExpandAllGroupRows = false; - //KeyboardNavigationEnabled = true; - - //var dataColumns = GetDataColumns(); - - //var idColumn = dataColumns.FirstOrDefault(x => x.FieldName == nameof(IId.Id)); - //if (idColumn != null) - //{ - // idColumn.ShowInColumnChooser = AcDomain.IsDeveloperVersion; - // idColumn.Visible = !AcDomain.IsDeveloperVersion; - //} - - IsFirstInitializeParameters = true; - } - - return base.SetParametersAsyncCore(parameters); - } - - - protected override void OnParametersSet() - { - base.OnParametersSet(); - - if (GridName.IsNullOrWhiteSpace()) GridName = $"{typeof(TDataItem).Name}Grid"; - - _gridLogName = $"[{GridName}]"; - - } - - //public Task AddDataItem(TDataItem dataItem, int messageTag) => PostDataToServerAsync(dataItem, messageTag, TrackingState.Add); - - public Task UpdateDataItem(TDataItem dataItem) => _dataSource.Update(dataItem, true); - - public Task UpdateDataItemAsync(TDataItem dataItem) - { - _dataSource.Update(dataItem, false); - return SaveChangesToServerAsync(); - } - //public Task UpdateDataItem(TDataItem dataItem, int messageTag) => PostDataToServerAsync(dataItem, messageTag, TrackingState.Update); - - public Task AddOrUpdateDataItem(TDataItem dataItem) => _dataSource.AddOrUpdate(dataItem, true); - - public Task RemoveDataItem(TDataItem dataItem) => _dataSource.Remove(dataItem, true); - //public Task RemoveDataItem(TDataItem dataItem, int messageTag) => PostDataToServerAsync(dataItem, messageTag, TrackingState.Remove); - - public Task RemoveDataItem(Guid id) => RemoveDataItem(id, RemoveMessageTag); - - public Task RemoveDataItem(Guid id, int messageTag) - { - var dataItem = _dataSource.FirstOrDefault(x => x.Id == id); - if (dataItem == null) return Task.CompletedTask; - - return _dataSource.Remove(dataItem, true); - } - - public Task ReloadDataSourceAsync() - { - return _dataSource.LoadDataSourceAsync(false); - } - } - - public class GridDataItemChangingEventArgs : GridDataItemChangedEventArgs where TDataItem : class, IId - { - internal GridDataItemChangingEventArgs(TiamGrid grid, TDataItem dataItem, TrackingState trackingState) : base(grid, dataItem, trackingState) - { - } - - public bool IsCanceled { get; set; } - } - - public class GridDataItemChangedEventArgs where TDataItem : class, IId - { - internal GridDataItemChangedEventArgs(TiamGrid grid, TDataItem dataItem, TrackingState trackingState) - { - Grid = grid; - DataItem = dataItem; - TrackingState = trackingState; - } - - public TiamGrid Grid { get; } - public TDataItem DataItem { get; } - public TrackingState TrackingState { get; } - public bool CancelStateChangeInvoke { get; set; } - } + public class TiamGrid : MgGridBase, TDataItem, LoggerClient> where TDataItem : class, IId + {} }