implement TiamGrid, TransferGrid; improvements...

This commit is contained in:
jozsef.b@aycode.com 2024-05-31 14:57:29 +02:00
parent 494c5b26bb
commit 7343f02d8a
8 changed files with 142 additions and 192 deletions

View File

@ -16,6 +16,6 @@ public class SignalRTags : AcSignalRTags
public const int RemoveTransferAsync = 9;
public const int GetCompaniesAsync = 10;
public const int UpdateCompanyAsync = 11;
public const int CreateCompanyAsync = 12;
public const int DeleteCompanyAsync = 13;
public const int AddCompanyAsync = 12;
public const int RemoveCompanyAsync = 13;
}

View File

@ -333,7 +333,7 @@
//remove orderData from orderData array
_logger.Info($"companyData deleting; companyId: {company.Id}");
var response = await AdminSignalRClient.PostDataAsync(SignalRTags.DeleteCompanyAsync, company);
var response = await AdminSignalRClient.PostDataAsync(SignalRTags.RemoveCompanyAsync, company);
//resultCompany = await serviceProviderDataService.DeleteServiceProviderAsync(company.Id);
//await UpdateDataAsync();

View File

@ -11,16 +11,9 @@
@using TIAMWebApp.Shared.Application.Models.PageModels
@using TIAMWebApp.Shared.Application.Utility
@using AyCode.Services.Loggers
@using AyCode.Services.SignalRs
@using TIAMWebApp.Shared.Application.Services
@using MessagePack
@using MessagePack.Resolvers
@using AyCode.Core.Extensions;
@using AyCode.Core
@using AyCode.Core.Helpers
@using AyCode.Interfaces.Entities
@using TIAM.Services
@using TIAMSharedUI.Shared.Components
@using TIAMSharedUI.Shared.Components.Grids
@layout AdminLayout
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> localizer
@ -37,7 +30,7 @@
<DxPopup CssClass="popup-demo-events"
@bind-Visible="@PopupVisible"
@bind-Visible="@_popupVisible"
ShowFooter="true"
CloseOnEscape="true"
CloseOnOutsideClick="false"
@ -79,23 +72,17 @@
Click="ColumnChooserButton_Click" />
</div>
<TiamGrid @ref="TransferGrid"
TDataItem="Transfer"
<TransferGrid @ref="_transferGrid"
Logger="_logger"
SignalRClient="AdminSignalRClient"
GetAllMessageTag="SignalRTags.GetTransfersAsync"
AddMessageTag="SignalRTags.AddTransferAsync"
UpdateMessageTag="SignalRTags.UpdateTransferAsync"
RemoveMessageTag="SignalRTags.RemoveTransferAsync"
OnDataSourceChanged="DataSourceChanged"
OnDataSourceItemChanged="DataSourceItemChanged"
OnDataItemDeleting="DataItemDeleting"
OnDataItemSaving="DataItemSaving"
CustomizeElement="Grid_CustomizeElement"
CustomizeEditModel="Grid_CustomizeEditModel"
EditModelSaving="Grid_EditModelSaving"
AutoCollapseDetailRow="AutoCollapseDetailRow"
AutoCollapseDetailRow="_autoCollapseDetailRow"
KeyboardNavigationEnabled="true"
EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
@ -174,7 +161,7 @@
</EditFormTemplate>
</TiamGrid>
</TransferGrid>
</div>
</DxTabPage>
@ -216,15 +203,9 @@
@code {
private LoggerClient<ManageTransfers> _logger;
//public Transfer myModel = new Transfer();
//public List<Transfer> TransferDataList { get; set; }
bool PopupVisible { get; set; }
TiamGrid<Transfer> TransferGrid { get; set; }
bool AutoCollapseDetailRow { get; set; }
private bool _popupVisible;
private bool _autoCollapseDetailRow;
private TransferGrid _transferGrid;
public List<string> IgnoreList =
[
@ -266,19 +247,21 @@
_messageWizardModel.SenderEmailAddress = "info@touriam.com";
_messageWizardModel.ReceiverEmailAddress = item.ContactEmail;
_messageWizardModel.ReceiverFullName = item.FullName;
PopupVisible = true;
_popupVisible = true;
}
void CancelCreateClick()
{
PopupVisible = false;
_popupVisible = false;
}
void EulaPopupClosed()
{
//cancel clicked
}
void EulaPopupClosing(PopupClosingEventArgs args)
{
//myModel = new TransferWizardModel();
@ -305,6 +288,7 @@
</body>
</html>";
}
messageModel.Content = FormatEmailContent();
_logger.Info(messageModel.Content);
@ -331,6 +315,7 @@
{
e.CssClass = "bg-cancel";
}
if (e.ElementType == GridElementType.HeaderCell)
{
e.Style = "background-color: rgba(0, 0, 0, 0.08)";
@ -354,62 +339,30 @@
transferEditModel.ContactEmail = "your@email.address";
}
async Task DataItemDeleting(GridDataItemDeletingEventArgs e)
private void DataItemSaving(GridEditModelSavingEventArgs e)
{
_logger.Info($"ManageTransfers OnItemDeleting");
// var transfer = (Transfer)e.DataItem;
// _logger.Info("ManageTransfers delete");
// PostDataToServerAsync(transfer, SignalRTags.DeleteTransferAsync, true).Forget();
// //await UpdateDataAsync();
_logger.Info("DataItemSaving called");
}
async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e)
private void DataItemDeleting(GridDataItemDeletingEventArgs e)
{
var transfer = (Transfer)e.EditModel;
var logText = e.IsNew ? "add" : "update";
_logger.Info($"EditModelSaving, {logText} transfer; transferId " + transfer.Id);
PostDataToServerAsync(transfer, e.IsNew ? SignalRTags.AddTransferAsync : SignalRTags.UpdateTransferAsync).Forget();
//await transferDataService.CreateTransfer((TransferWizardModel)e.EditModel);
//transfer = await transferDataService.UpdateTransferAsync(transfer);
_logger.Info($"DataItemDeleting OnItemDeleting");
}
private Task PostDataToServerAsync<T>(T transfer, int messageTag, bool isDelete = false) where T : Transfer //IEntityGuid
private void DataSourceChanged(IList<Transfer> transfers)
{
_logger.Info("PostDataToServerAsync called; transferId " + transfer.Id);
_logger.Info("DataSourceChanged called");
RefreshAppointments(transfer, isDelete); //egyből látszódik a változás a grid-ben, nem csak a callback lefutásakor! felhasználóbarátabb... - J.
return AdminSignalRClient.PostDataAsync(messageTag, transfer, repsonse =>
{
if (repsonse.Status != SignalResponseStatus.Success || repsonse.ResponseData == null)
{
UpdateAllDataAsync().Forget();
return;
InitializeAppointments(transfers);
}
RefreshAppointments(repsonse.ResponseData, isDelete);
StateHasChanged();
});
//transfer = await devAdminSignalClient.PostDataAsync(SignalRTags.UpdateTransferAsync, transfer);
private void DataSourceItemChanged(Transfer transfer)
{
_logger.Info("DataSourceItemChanged called");
}
private void RefreshAppointments(Transfer transfer, bool isDelete)
{
// var transferIndex = TransferDataList.FindIndex(x => x.Id == transfer.Id);
// if (isDelete && transferIndex > -1) TransferDataList.RemoveAt(transferIndex);
// else
// {
// if (transferIndex > -1) TransferDataList[transferIndex] = transfer;
// else TransferDataList.Add(transfer);
// }
var appointmentIndex = AppointmentModels.FindIndex(x => x.SourceId == transfer.Id);
if (isDelete && appointmentIndex > -1) AppointmentModels.RemoveAt(appointmentIndex);
else
@ -421,32 +374,10 @@
}
}
public Task UpdateAllDataAsync()
{
_logger.Info("UpdateAllDataAsync called");
return AdminSignalRClient.GetAllAsync<List<Transfer>>(SignalRTags.GetTransfersAsync, response =>
{
if (response.Status == SignalResponseStatus.Error)
return;
InitializeAppointments(response.ResponseData ?? []);
StateHasChanged();
});
}
protected override Task OnInitializedAsync()
{
_logger = new LoggerClient<ManageTransfers>(LogWriters.ToArray());
//UpdateAllDataAsync().Forget();
//var transfers = await devAdminSignalClient.GetAllAsync<List<Transfer>>(SignalRTags.GetTransfersAsync);
//InitializeDataSources(transfers ?? []);
//InitializeDataSources(await transferDataService.GetTransfersAsync());
return base.OnInitializedAsync();
}
@ -494,7 +425,7 @@
void ColumnChooserButton_Click()
{
TransferGrid.ShowColumnChooser();
_transferGrid.ShowColumnChooser();
}
@ -502,30 +433,19 @@
{
if (firstRender)
{
TransferGrid.ExpandDetailRow(0);
_transferGrid.ExpandDetailRow(0);
}
}
void AutoCollapseDetailRow_Changed(bool newValue)
{
AutoCollapseDetailRow = newValue;
_autoCollapseDetailRow = newValue;
if (!newValue) return;
TransferGrid.BeginUpdate();
TransferGrid.CollapseAllDetailRows();
TransferGrid.ExpandDetailRow(0);
TransferGrid.EndUpdate();
}
private void DataSourceChanged(IList<Transfer> transfers)
{
_logger.Info("DataSourceChanged called");
InitializeAppointments(transfers);
}
private void DataSourceItemChanged(Transfer transfer)
{
_logger.Info("DataSourceItemChanged called");
_transferGrid.BeginUpdate();
_transferGrid.CollapseAllDetailRows();
_transferGrid.ExpandDetailRow(0);
_transferGrid.EndUpdate();
}
}

View File

@ -0,0 +1,17 @@
using TIAM.Entities.ServiceProviders;
using TIAM.Services;
namespace TIAMSharedUI.Shared.Components.Grids;
public class CompanyGrid : TiamGrid<Company>
{
public CompanyGrid() : base()
{
GridName = nameof(CompanyGrid);
GetAllMessageTag = SignalRTags.GetCompaniesAsync;
AddMessageTag = SignalRTags.AddCompanyAsync;
UpdateMessageTag = SignalRTags.UpdateCompanyAsync;
RemoveMessageTag = SignalRTags.RemoveCompanyAsync;
}
}

View File

@ -1,29 +1,21 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using AyCode.Core.Helpers;
using AyCode.Interfaces.Entities;
using AyCode.Services.Loggers;
using AyCode.Services.SignalRs;
using AyCode.Utils.Extensions;
using DevExpress.Blazor;
using DevExpress.Blazor.Internal;
using Microsoft.AspNetCore.Components;
using Newtonsoft.Json.Linq;
using TIAM.Entities.Transfers;
using TIAM.Services;
using TIAMWebApp.Shared.Application.Services;
using TIAMWebApp.Shared.Application.Utility;
namespace TIAMSharedUI.Shared.Components
namespace TIAMSharedUI.Shared.Components.Grids
{
public class TiamGrid<TDataItem> : DxGrid where TDataItem : class, IEntityGuid
{
private bool _initialParametersSet;
private IList<TDataItem>? _dataSource;
private string _gridLogName;
public TiamGrid() : base()
@ -48,12 +40,11 @@ namespace TIAMSharedUI.Shared.Components
{
if (_dataSource == null && Data != null)
{
Logger.Error($"{GridName} Use the DataSource parameter instead of Data!");
throw new NullReferenceException($"{GridName} Use the DataSource parameter instead of Data!");
Logger.Error($"{_gridLogName} Use the DataSource parameter instead of Data!");
throw new NullReferenceException($"{_gridLogName} Use the DataSource parameter instead of Data!");
}
return _dataSource;
}
set
{
@ -76,40 +67,58 @@ namespace TIAMSharedUI.Shared.Components
if (firstRender) RefreshDataSourceAsync().Forget();
}
[Parameter]
public EventCallback<GridDataItemDeletingEventArgs> OnDataItemDeleting{ get; set; }
protected new EventCallback<GridDataItemDeletingEventArgs> DataItemDeleting { get; set; }
[Parameter]
public EventCallback<GridDataItemDeletingEventArgs> OnDataItemDeleted { get; set; }
[Parameter] public EventCallback<GridDataItemDeletingEventArgs> OnDataItemDeleting{ get; set; }
protected new EventCallback<GridEditModelSavingEventArgs> EditModelSaving { get; set; }
[Parameter] public EventCallback<GridEditModelSavingEventArgs> OnDataItemSaving { get; set; }
[Parameter]
public EventCallback<IList<TDataItem>> OnDataSourceChanged { get; set; }
[Parameter]
public EventCallback<TDataItem> OnDataSourceItemChanged { get; set; }
private async Task OnItemSaving(GridEditModelSavingEventArgs e)
{
var dataItem = (e.EditModel as TDataItem)!;
var logText = e.IsNew ? "add" : "update";
Logger.Info($"{_gridLogName} OnItemSaving {logText}; Id: {dataItem.Id}");
await OnDataItemSaving.InvokeAsync(e);
if (e.Cancel)
{
Logger.Debug($"{_gridLogName} OnItemSaving {logText} canceled; Id: {dataItem.Id}");
return;
}
PostDataToServerAsync(dataItem, e.IsNew ? AddMessageTag : UpdateMessageTag).Forget();
//await transferDataService.CreateTransfer((TransferWizardModel)e.EditModel);
//transfer = await transferDataService.UpdateTransferAsync(transfer);
}
private async Task OnItemDeleting(GridDataItemDeletingEventArgs e)
{
Logger.Info($"{GridName} OnItemDeleting");
Logger.Info($"{_gridLogName} OnItemDeleting");
await OnDataItemDeleting.InvokeAsync(e);
if (e.Cancel)
{
Logger.Debug($"{GridName} OnItemDeleting canceled");
Logger.Debug($"{_gridLogName} OnItemDeleting canceled");
return;
}
var dataItem = e.DataItem as TDataItem;
//PostDataToServerAsync(transfer, SignalRTags.DeleteTransferAsync, true).Forget();
//await UpdateDataAsync();
Logger.Info($"{GridName} OnDataItemDeleted");
await OnDataItemDeleted.InvokeAsync(e);
var dataItem = (e.DataItem as TDataItem)!;
PostDataToServerAsync(dataItem, RemoveMessageTag, true).Forget();
}
public Task RefreshDataSourceAsync()
{
Logger.Info($"{GridName} UpdateAllDataAsync called");
Logger.Info($"{_gridLogName} UpdateAllDataAsync called");
return SignalRClient.GetAllAsync<IList<TDataItem>>(GetAllMessageTag, response =>
{
@ -126,9 +135,9 @@ namespace TIAMSharedUI.Shared.Components
private Task PostDataToServerAsync(TDataItem transfer, int messageTag, bool isDelete = false)
{
Logger.Info($"{GridName} PostDataToServerAsync called; transferId " + transfer.Id);
Logger.Info($"{_gridLogName} PostDataToServerAsync called; transferId " + transfer.Id);
RefreshDataSourceItem(transfer, isDelete); //egyből látszódik a változás a grid-ben, nem csak a callback lefutásakor! felhasználóbarátabb... - J.
RefreshDataSourceItem(transfer, isDelete, false); //egyből látszódik a változás a grid-ben, nem csak a callback lefutásakor! felhasználóbarátabb... - J.
return SignalRClient.PostDataAsync(messageTag, transfer, repsonse =>
{
@ -145,7 +154,7 @@ namespace TIAMSharedUI.Shared.Components
//transfer = await devAdminSignalClient.PostDataAsync(SignalRTags.UpdateTransferAsync, transfer);
}
public void RefreshDataSourceItem(TDataItem dataItem, bool isDelete)
public Task RefreshDataSourceItem(TDataItem dataItem, bool isDelete, bool invokeItemChanged = true)
{
var transferIndex = _dataSource.FindIndex(x => x.Id == dataItem.Id);
@ -156,7 +165,7 @@ namespace TIAMSharedUI.Shared.Components
else _dataSource.Add(dataItem);
}
OnDataSourceItemChanged.InvokeAsync(dataItem);
return invokeItemChanged ? OnDataSourceItemChanged.InvokeAsync(dataItem) : Task.CompletedTask;
}
protected override Task SetParametersAsyncCore(ParameterView parameters)
@ -164,10 +173,13 @@ namespace TIAMSharedUI.Shared.Components
if (!_initialParametersSet)
{
base.DataItemDeleting = EventCallback.Factory.Create<GridDataItemDeletingEventArgs>(this, OnItemDeleting);
base.EditModelSaving = EventCallback.Factory.Create<GridEditModelSavingEventArgs>(this, OnItemSaving);
//ShowFilterRow = true;
//PageSize = 4;
//ShowGroupPanel = true;
//AllowSort = false;
_initialParametersSet = true;
}
@ -178,7 +190,10 @@ namespace TIAMSharedUI.Shared.Components
{
base.OnParametersSet();
if (GridName.IsNullOrWhiteSpace()) GridName = $"[{typeof(TDataItem).Name}Grid]";
if (GridName.IsNullOrWhiteSpace()) GridName = $"{typeof(TDataItem).Name}Grid";
_gridLogName = $"[{GridName}]";
}
}
}

View File

@ -0,0 +1,17 @@
using TIAM.Entities.Transfers;
using TIAM.Services;
namespace TIAMSharedUI.Shared.Components.Grids;
public class TransferGrid : TiamGrid<Transfer>
{
public TransferGrid() : base()
{
GridName = nameof(TransferGrid);
GetAllMessageTag = SignalRTags.GetTransfersAsync;
AddMessageTag = SignalRTags.AddTransferAsync;
UpdateMessageTag = SignalRTags.UpdateTransferAsync;
RemoveMessageTag = SignalRTags.RemoveTransferAsync;
}
}

View File

@ -1,19 +0,0 @@
@using TIAMWebApp.Shared.Application.Utility
@using AyCode.Core.Extensions
@using AyCode.Services.Loggers
@using AyCode.Utils.Extensions
@inject IJSRuntime jsRuntime
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inherits DxGrid
@* @implements IGrid *@
@* @typeparam TDataType *@
@* <div>
@ChildContent
</div>
*@
@code {
}

View File

@ -92,7 +92,7 @@ public class DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController
return;
case SignalRTags.CreateCompanyAsync:
case SignalRTags.AddCompanyAsync:
//var createCompany = message!.MessagePackTo<SignalPostJsonDataMessage<Company>>().PostData;
@ -100,7 +100,7 @@ public class DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController
//await ResponseToCaller(messageTag, new SignalResponseMessage<string>(SignalResponseStatus.Success, createCompany), requestId);
return;
case SignalRTags.DeleteCompanyAsync:
case SignalRTags.RemoveCompanyAsync:
var deleteCompany = message!.MessagePackTo<SignalPostJsonDataMessage<Company>>().PostData;
await adminDal.RemoveCompanyAsync(deleteCompany.Id);