This commit is contained in:
Adam 2024-06-01 16:05:50 +02:00
commit 93923a7c4f
8 changed files with 75 additions and 69 deletions

View File

@ -88,8 +88,8 @@
Logger="_logger"
SignalRClient="AdminSignalRClient"
OnDataSourceChanged="DataSourceChanged"
OnDataSourceItemChanging="DataSourceItemChanging"
OnDataSourceItemChanged="DataSourceItemChanged"
OnDataItemChanging="DataSourceItemChanging"
OnDataItemChanged="DataSourceItemChanged"
OnDataItemDeleting="DataItemDeleting"
OnDataItemSaving="DataItemSaving"

View File

@ -10,10 +10,10 @@ public class CompanyGrid : TiamGrid<Company>
{
GridName = nameof(CompanyGrid);
GetAllMessageTag = SignalRTags.GetCompaniesAsync;
AddMessageTag = SignalRTags.AddCompanyAsync;
UpdateMessageTag = SignalRTags.UpdateCompanyAsync;
RemoveMessageTag = SignalRTags.RemoveCompanyAsync;
GetAllMessageTag = SignalRTags.GetCompanies;
AddMessageTag = SignalRTags.AddCompany;
UpdateMessageTag = SignalRTags.UpdateCompany;
RemoveMessageTag = SignalRTags.RemoveCompany;
}
protected override Task SetParametersAsyncCore(ParameterView parameters)

View File

@ -5,7 +5,9 @@ using AyCode.Services.SignalRs;
using AyCode.Utils.Extensions;
using DevExpress.Blazor;
using DevExpress.Blazor.Internal;
using DevExpress.Blazor.Navigation.Internal;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
using TIAMWebApp.Shared.Application.Services;
using TIAMWebApp.Shared.Application.Utility;
@ -17,7 +19,6 @@ namespace TIAMSharedUI.Shared.Components.Grids
private IList<TDataItem>? _dataSource;
private string _gridLogName;
public TiamGrid() : base()
{ }
@ -31,6 +32,16 @@ namespace TIAMSharedUI.Shared.Components.Grids
[Parameter] public int UpdateMessageTag { get; set; }
[Parameter] public int RemoveMessageTag { get; set; }
protected new EventCallback<GridDataItemDeletingEventArgs> DataItemDeleting { 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> OnDataItemChanging { get; set; }
[Parameter] public EventCallback<TDataItem> OnDataItemChanged { get; set; }
[Parameter]
[DefaultValue(null)]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "BL0007:Component parameters should be auto properties", Justification = "<Pending>")]
@ -73,20 +84,21 @@ namespace TIAMSharedUI.Shared.Components.Grids
if (firstRender) RefreshDataSourceAsync().Forget();
}
protected new EventCallback<GridDataItemDeletingEventArgs> DataItemDeleting { get; set; }
[Parameter] public EventCallback<GridDataItemDeletingEventArgs> OnDataItemDeleting{ get; set; }
public Task AddDataItem(TDataItem dataItem) => PostDataToServerAsync(dataItem, AddMessageTag);
public Task UpdateDataItem(TDataItem dataItem) => PostDataToServerAsync(dataItem, UpdateMessageTag);
public Task RemoveDataItem(TDataItem dataItem) => PostDataToServerAsync(dataItem, RemoveMessageTag);
protected new EventCallback<GridEditModelSavingEventArgs> EditModelSaving { get; set; }
[Parameter] public EventCallback<GridEditModelSavingEventArgs> OnDataItemSaving { get; set; }
public Task RemoveDataItem(Guid id)
{
var dataItem = _dataSource.FirstOrDefault(x => x.Id == id);
[Parameter] public EventCallback<IList<TDataItem>> OnDataSourceChanged { get; set; }
[Parameter] public EventCallback<TDataItem> OnDataSourceItemChanging { get; set; }
[Parameter] public EventCallback<TDataItem> OnDataSourceItemChanged { get; set; }
return dataItem == null ? Task.CompletedTask : RemoveDataItem(dataItem);
}
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}");
@ -99,10 +111,8 @@ namespace TIAMSharedUI.Shared.Components.Grids
return;
}
PostDataToServerAsync(dataItem, e.IsNew ? AddMessageTag : UpdateMessageTag).Forget();
//await transferDataService.CreateTransfer((TransferWizardModel)e.EditModel);
//transfer = await transferDataService.UpdateTransferAsync(transfer);
if (e.IsNew) await AddDataItem(dataItem);
else await UpdateDataItem(dataItem);
}
private async Task OnItemDeleting(GridDataItemDeletingEventArgs e)
@ -118,7 +128,7 @@ namespace TIAMSharedUI.Shared.Components.Grids
}
var dataItem = (e.DataItem as TDataItem)!;
PostDataToServerAsync(dataItem, RemoveMessageTag, true).Forget();
await RemoveDataItem(dataItem);
}
public virtual Task RefreshDataSourceAsync()
@ -140,33 +150,33 @@ namespace TIAMSharedUI.Shared.Components.Grids
});
}
public virtual async Task PostDataToServerAsync(TDataItem dataItem, int messageTag, bool isDelete = false)
protected virtual async Task PostDataToServerAsync(TDataItem dataItem, int messageTag, bool isDelete = false)
{
Logger.Info($"{_gridLogName} PostDataToServerAsync called; transferId " + dataItem.Id);
//if (messageTag == 0) return;
await OnDataSourceItemChanging.InvokeAsync(dataItem);
await OnDataItemChanging.InvokeAsync(dataItem);
if (dataItem.Id.IsNullOrEmpty()) dataItem.Id = Guid.NewGuid();
RefreshDataSourceItem(dataItem, 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.
RefreshDataItem(dataItem, isDelete); //egyből látszódik a változás a grid-ben, nem csak a callback lefutásakor! felhasználóbarátabb... - J.
SignalRClient.PostDataAsync(messageTag, dataItem, async repsonse =>
{
if (repsonse.Status != SignalResponseStatus.Success || repsonse.ResponseData == null || !RefreshDataSourceItem(repsonse.ResponseData, isDelete))
if (repsonse.Status != SignalResponseStatus.Success || repsonse.ResponseData == null || !RefreshDataItem(repsonse.ResponseData, isDelete))
{
RefreshDataSourceAsync().Forget();
return;
}
await OnDataSourceItemChanged.InvokeAsync(dataItem);
await InvokeAsync(StateHasChanged);
await OnDataItemChanged.InvokeAsync(dataItem);
InvokeAsync(StateHasChanged).Forget();
}).Forget();
//transfer = await devAdminSignalClient.PostDataAsync(SignalRTags.UpdateTransferAsync, transfer);
}
public bool RefreshDataSourceItem(TDataItem dataItem, bool isDelete, bool invokeItemChanged = true)
public bool RefreshDataItem(TDataItem dataItem, bool isDelete)
{
if (dataItem.Id.IsNullOrEmpty())
{

View File

@ -10,10 +10,10 @@ public class TransferGrid : TiamGrid<Transfer>
{
GridName = nameof(TransferGrid);
GetAllMessageTag = SignalRTags.GetTransfersAsync;
AddMessageTag = SignalRTags.AddTransferAsync;
UpdateMessageTag = SignalRTags.UpdateTransferAsync;
RemoveMessageTag = SignalRTags.RemoveTransferAsync;
GetAllMessageTag = SignalRTags.GetTransfers;
AddMessageTag = SignalRTags.AddTransfer;
UpdateMessageTag = SignalRTags.UpdateTransfer;
RemoveMessageTag = SignalRTags.RemoveTransfer;
}
protected override Task SetParametersAsyncCore(ParameterView parameters)

View File

@ -82,7 +82,7 @@ namespace TIAMWebApp.Server.Controllers
}
}
[SignalR(SignalRTags.AddCompanyAsync, MethodParamType.Object, typeof(Company))]
[SignalR(SignalRTags.AddCompany)]
public async Task<string> AddCompanyAsync(Company company)
{
if (company.Id.IsNullOrEmpty()) company.Id = Guid.NewGuid();
@ -107,7 +107,7 @@ namespace TIAMWebApp.Server.Controllers
[AllowAnonymous]
[HttpGet]
[Route(APIUrls.GetServiceProvidersRouteName)]
[SignalR(SignalRTags.GetCompaniesAsync, MethodParamType.None)]
[SignalR(SignalRTags.GetCompanies)]
public async Task<string> GetServiceProviders()
{
return await adminDal.GetServiceProvidersJsonAsync();
@ -138,7 +138,7 @@ namespace TIAMWebApp.Server.Controllers
[AllowAnonymous]
[HttpPost]
[Route(APIUrls.UpdateServiceProviderRouteName)]
[SignalR(SignalRTags.UpdateCompanyAsync, MethodParamType.Object, typeof(Company))]
[SignalR(SignalRTags.UpdateCompany)]
public async Task<string> UpdateServiceProvider(Company companyToModify)
{
_logger.Info($"UpdateServiceProvider called! + {companyToModify.Id}");
@ -153,7 +153,7 @@ namespace TIAMWebApp.Server.Controllers
[HttpPost]
[Route(APIUrls.GetServiceProvidersByOwnerIdRouteName)]
[Tags("Finished", "ServiceProvider")]
[SignalR(SignalRTags.GetPropertiesByOwnerIdAsync, MethodParamType.Id)]
[SignalR(SignalRTags.GetPropertiesByOwnerId)]
public async Task<Dictionary<Guid, string>> GetServiceProvidersByOwnerId([FromBody] Guid ownerId)
{
_logger.Info($@"GetServiceProvidersByOwnerId called with ownerId: {ownerId}");

View File

@ -1,5 +1,6 @@
using System.Text.Json;
using AyCode.Core.Loggers;
using AyCode.Services.SignalRs;
using AyCode.Utils.Extensions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@ -380,7 +381,7 @@ namespace TIAMWebApp.Server.Controllers
[Authorize]
[HttpGet]
[Route(APIUrls.GetTransfersRouteName)]
[SignalR(SignalRTags.GetTransfersAsync, MethodParamType.None)]
[SignalR(SignalRTags.GetTransfers)]
public async Task<string> GetTransfers()
{
//var token = _authService.GetAuthTokenFromRequest(Request);
@ -406,7 +407,7 @@ namespace TIAMWebApp.Server.Controllers
[AllowAnonymous]
[HttpPost]
[Route(APIUrls.UpdateTransferRouteName)]
[SignalR(SignalRTags.UpdateTransferAsync, MethodParamType.Object, typeof(Transfer))]
[SignalR(SignalRTags.UpdateTransfer)]
public async Task<Transfer> UpdateTransfer(Transfer transferToModify)
{
_logger.Info($"UpdateTransfer called! + {Request?.ReadFormAsync()}");

View File

@ -17,6 +17,7 @@ using System.Runtime.CompilerServices;
using MessagePack;
using System.Security.Cryptography.Xml;
using DevExpress.XtraPrinting.Native.WebClientUIControl;
using DevExpress.XtraReports.Parameters;
namespace TIAMWebApp.Server.Services;
@ -34,30 +35,25 @@ public static class ExtensionMethods
}
}
public enum MethodParamType : byte
public class MethodInfoModel<TAttribute> where TAttribute : TagAttribute
{
None = 0,
Id = 5,
Object = 10
}
public Type? ParameterType { get; init; } = null;
public TAttribute Attribute { get; init; }
public MethodInfo MethodInfo { get; init; }
[AttributeUsage(AttributeTargets.Method)]
public class TagAttribute(int messageTag) : Attribute
{
public int MessageTag { get; init; } = messageTag;
}
public MethodInfoModel(TAttribute attribute, MethodInfo methodInfo)
{
Attribute = attribute;
MethodInfo = methodInfo;
[AttributeUsage(AttributeTargets.Method)]
public class SignalRAttribute(int messageTag, MethodParamType methodParamType, Type paramType = null) : TagAttribute(messageTag)
{
public MethodParamType MethodParamType { get; init; } = methodParamType;
public Type ParamType { get; init; } = paramType;
}
var parameters = methodInfo.GetParameters();
public class MethodInfoModel<TAttribute>(TAttribute attribute, MethodInfo methodInfo) where TAttribute : TagAttribute
{
public TAttribute Attribute { get; set; } = attribute;
public MethodInfo MethodInfo { get; set; } = methodInfo;
if (parameters.Length > 1)
throw new Exception("MethodInfoModel; parameters.Length > 1");
if (parameters.Length == 1)
ParameterType = parameters[0].ParameterType;
}
}
public class DynamicMethodCallModel<TAttribute> where TAttribute : TagAttribute
@ -142,23 +138,22 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
if (!methodsByDeclaringObject.MethodsByMessageTag.TryGetValue(messageTag, out var methodInfoModel)) continue;
object[]? paramValues = null;
var parameters = methodInfoModel.MethodInfo.GetParameters();
logText = $"Found the dynamic method for the tag! tag: {messageTag}; method: {methodsByDeclaringObject.InstanceObject.GetType().Name}.{methodInfoModel.MethodInfo.Name}";
logText = $"Found dynamic method for the tag! tag: {messageTag}; method: {methodsByDeclaringObject.InstanceObject.GetType().Name}.{methodInfoModel.MethodInfo.Name}";
if (parameters.Length > 0)
if (methodInfoModel.ParameterType != null)
{
_logger.Debug($"{logText}({parameters[0].ParameterType.Name})");
_logger.Debug($"{logText}({methodInfoModel.ParameterType.Name})");
paramValues = new object[1];
if (parameters[0].ParameterType == typeof(Guid) || parameters[0].ParameterType == typeof(Guid?))
if (methodInfoModel.ParameterType == typeof(Guid) || methodInfoModel.ParameterType == typeof(Guid?))
{
paramValues[0] = message!.MessagePackTo<SignalRequestByIdMessage>().Id;
}
else
{
var msg = message!.MessagePackTo<SignalPostJsonDataMessage<object>>(MessagePackSerializerOptions.Standard);
paramValues[0] = msg.PostDataJson.JsonTo(parameters[0].ParameterType)!;
paramValues[0] = msg.PostDataJson.JsonTo(methodInfoModel.ParameterType)!;
}
}
else _logger.Debug($"{logText}()");
@ -168,11 +163,11 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
return;
}
_logger.Debug($"Not found the dynamic method for the tag! tag: {messageTag};");
_logger.Debug($"Not found dynamic method for the tag! tag: {messageTag};");
switch (messageTag)
{
case SignalRTags.RemoveCompanyAsync:
case SignalRTags.RemoveCompany:
var deleteCompany = message!.MessagePackTo<SignalPostJsonDataMessage<Company>>().PostData;
await _adminDal.RemoveCompanyAsync(deleteCompany.Id);

View File

@ -98,7 +98,7 @@ namespace TIAMWebApp.Shared.Application.Services
//17.
public Task GetPropertiesByOwnerIdAsync(Guid id, Action<Dictionary<Guid, string>?> callback)
{
return _adminSignalRClient.GetByIdAsync<Dictionary<Guid, string>>(SignalRTags.GetPropertiesByOwnerIdAsync, id, response =>
return _adminSignalRClient.GetByIdAsync<Dictionary<Guid, string>>(SignalRTags.GetPropertiesByOwnerId, id, response =>
{
if (response.Status == SignalResponseStatus.Error)
callback.Invoke(null);
@ -112,7 +112,7 @@ namespace TIAMWebApp.Shared.Application.Services
//17.
public async Task<Dictionary<Guid, string>?> GetPropertiesByOwnerIdAsync(Guid id)
{
var companyPropertiesByOwner = await _adminSignalRClient.GetByIdAsync<Dictionary<Guid, string>>(SignalRTags.GetPropertiesByOwnerIdAsync, id);
var companyPropertiesByOwner = await _adminSignalRClient.GetByIdAsync<Dictionary<Guid, string>>(SignalRTags.GetPropertiesByOwnerId, id);
if (companyPropertiesByOwner != null) _logger.DetailConditional($"companyPropertiesByOwner: {string.Join("; ", companyPropertiesByOwner.Values)}");
return companyPropertiesByOwner;
@ -146,7 +146,7 @@ namespace TIAMWebApp.Shared.Application.Services
//16.
public async Task<List<Company>> GetServiceProvidersAsync()
{
var companies = await _adminSignalRClient.GetAllAsync<List<Company>>(SignalRTags.GetCompaniesAsync);
var companies = await _adminSignalRClient.GetAllAsync<List<Company>>(SignalRTags.GetCompanies);
if (companies != null) _logger.DetailConditional($"companies: {string.Join("; ", companies.Count)}");
return companies;
@ -167,7 +167,7 @@ namespace TIAMWebApp.Shared.Application.Services
//14.
public async Task<Company> UpdateServiceProviderAsync(Company company)
{
var result = await _adminSignalRClient.PostDataAsync(SignalRTags.UpdateCompanyAsync, company);
var result = await _adminSignalRClient.PostDataAsync(SignalRTags.UpdateCompany, company);
return result;
}