EfCore Tracking fix; Implement FilterText to TiamGrid/DataSource; Implement multiple Context[Id]s params to SignalRClient; improvements, fixes, etc...
This commit is contained in:
parent
33d21d9caf
commit
8e0b79e68e
|
|
@ -84,19 +84,19 @@ namespace AyCode.Blazor.Components.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
#region CRUD
|
#region CRUD
|
||||||
public virtual Task<TResponseData?> GetByIdAsync<TResponseData>(int messageTag, params Guid[] ids) where TResponseData : class
|
public virtual Task<TResponseData?> GetByIdAsync<TResponseData>(int messageTag, object[] ids) where TResponseData : class
|
||||||
=> SendMessageToServerAsync<TResponseData>(messageTag, new SignalPostJsonDataMessage<IdMessage>(new IdMessage(ids)), AcDomain.NextUniqueInt32);
|
=> SendMessageToServerAsync<TResponseData>(messageTag, new SignalPostJsonDataMessage<IdMessage>(new IdMessage(ids)), AcDomain.NextUniqueInt32);
|
||||||
public virtual Task GetByIdAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback, params Guid[] ids)
|
public virtual Task GetByIdAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback, object[] ids)
|
||||||
=> SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage<IdMessage>(new IdMessage(ids)), responseCallback);
|
=> SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage<IdMessage>(new IdMessage(ids)), responseCallback);
|
||||||
|
|
||||||
public virtual Task<TResponseData?> GetAllAsync<TResponseData>(int messageTag) where TResponseData : class
|
public virtual Task<TResponseData?> GetAllAsync<TResponseData>(int messageTag) where TResponseData : class
|
||||||
=> SendMessageToServerAsync<TResponseData>(messageTag);
|
=> SendMessageToServerAsync<TResponseData>(messageTag);
|
||||||
public virtual Task GetAllAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback)
|
public virtual Task GetAllAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback)
|
||||||
=> SendMessageToServerAsync(messageTag, null, responseCallback);
|
=> SendMessageToServerAsync(messageTag, null, responseCallback);
|
||||||
public virtual Task GetAllAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback, params Guid[]? contextIds)
|
public virtual Task GetAllAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback, object[]? contextIds)
|
||||||
=> SendMessageToServerAsync(messageTag, (contextIds == null || contextIds.Length == 0 ? null : new SignalPostJsonDataMessage<IdMessage>(new IdMessage(contextIds))), responseCallback);
|
=> SendMessageToServerAsync(messageTag, (contextIds == null || contextIds.Length == 0 ? null : new SignalPostJsonDataMessage<IdMessage>(new IdMessage(contextIds))), responseCallback);
|
||||||
|
|
||||||
public virtual Task<TResponseData?> GetAllAsync<TResponseData>(int messageTag, params Guid[]? contextIds) where TResponseData : class
|
public virtual Task<TResponseData?> GetAllAsync<TResponseData>(int messageTag, object[]? contextIds) where TResponseData : class
|
||||||
=> SendMessageToServerAsync<TResponseData>(messageTag, contextIds == null || contextIds.Length == 0 ? null : new SignalPostJsonDataMessage<IdMessage>(new IdMessage(contextIds)), AcDomain.NextUniqueInt32);
|
=> SendMessageToServerAsync<TResponseData>(messageTag, contextIds == null || contextIds.Length == 0 ? null : new SignalPostJsonDataMessage<IdMessage>(new IdMessage(contextIds)), AcDomain.NextUniqueInt32);
|
||||||
|
|
||||||
public virtual Task<TPostData?> PostDataAsync<TPostData>(int messageTag, TPostData postData) where TPostData : class
|
public virtual Task<TPostData?> PostDataAsync<TPostData>(int messageTag, TPostData postData) where TPostData : class
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ using AyCode.Core.Extensions;
|
||||||
using AyCode.Core.Helpers;
|
using AyCode.Core.Helpers;
|
||||||
using AyCode.Core.Interfaces;
|
using AyCode.Core.Interfaces;
|
||||||
using AyCode.Services.SignalRs;
|
using AyCode.Services.SignalRs;
|
||||||
|
using AyCode.Utils.Extensions;
|
||||||
|
|
||||||
namespace AyCode.Blazor.Components.Services
|
namespace AyCode.Blazor.Components.Services
|
||||||
{
|
{
|
||||||
|
|
@ -96,16 +97,18 @@ namespace AyCode.Blazor.Components.Services
|
||||||
protected List<T> InnerList = []; //TODO: Dictionary??? - J.
|
protected List<T> InnerList = []; //TODO: Dictionary??? - J.
|
||||||
protected readonly ChangeTracking<T> TrackingItems = new();
|
protected readonly ChangeTracking<T> TrackingItems = new();
|
||||||
|
|
||||||
protected readonly Guid[]? ContextIds;
|
public List<Guid>? ContextIds;
|
||||||
|
public string? FilterText { get; set; }
|
||||||
|
|
||||||
public AcSignalRClientBase SignalRClient;
|
public AcSignalRClientBase SignalRClient;
|
||||||
protected readonly SignalRCrudTags SignalRCrudTags;
|
protected readonly SignalRCrudTags SignalRCrudTags;
|
||||||
|
|
||||||
public Func<ItemChangedEventArgs<T>, Task>? OnDataSourceItemChanged;
|
public Func<ItemChangedEventArgs<T>, Task>? OnDataSourceItemChanged;
|
||||||
public Func<Task>? OnDataSourceLoaded;
|
public Func<Task>? OnDataSourceLoaded;
|
||||||
|
|
||||||
public AcSignalRDataSource(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, params Guid[]? contextIds)
|
public AcSignalRDataSource(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, IEnumerable<Guid>? contextIds = null)
|
||||||
{
|
{
|
||||||
if (contextIds?.Length > 0) ContextIds = contextIds;
|
if (contextIds != null) (ContextIds = new List<Guid>()).AddRange(contextIds);
|
||||||
|
|
||||||
SignalRCrudTags = signalRCrudTags;
|
SignalRCrudTags = signalRCrudTags;
|
||||||
SignalRClient = signalRClient;
|
SignalRClient = signalRClient;
|
||||||
|
|
@ -115,6 +118,16 @@ namespace AyCode.Blazor.Components.Services
|
||||||
public object SyncRoot => _syncRoot;
|
public object SyncRoot => _syncRoot;
|
||||||
public bool IsFixedSize => false;
|
public bool IsFixedSize => false;
|
||||||
|
|
||||||
|
private object[]? GetContextParams()
|
||||||
|
{
|
||||||
|
var parameters = new List<object>();
|
||||||
|
if (ContextIds != null) parameters.AddRange(ContextIds.Cast<object>());
|
||||||
|
if (!FilterText.IsNullOrWhiteSpace()) parameters.Add(FilterText);
|
||||||
|
|
||||||
|
if (parameters.Count == 0) parameters = null;
|
||||||
|
return parameters?.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// GetAllMessageTag
|
/// GetAllMessageTag
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -124,7 +137,7 @@ namespace AyCode.Blazor.Components.Services
|
||||||
{
|
{
|
||||||
if (SignalRCrudTags.GetAllMessageTag == AcSignalRTags.None) throw new ArgumentException($"SignalRCrudTags.GetAllMessageTag == SignalRTags.None");
|
if (SignalRCrudTags.GetAllMessageTag == AcSignalRTags.None) throw new ArgumentException($"SignalRCrudTags.GetAllMessageTag == SignalRTags.None");
|
||||||
|
|
||||||
var resultList = (await SignalRClient.GetAllAsync<List<T>>(SignalRCrudTags.GetAllMessageTag, ContextIds)) ?? throw new NullReferenceException();
|
var resultList = (await SignalRClient.GetAllAsync<List<T>>(SignalRCrudTags.GetAllMessageTag, GetContextParams())) ?? throw new NullReferenceException();
|
||||||
|
|
||||||
await LoadDataSource(resultList);
|
await LoadDataSource(resultList);
|
||||||
}
|
}
|
||||||
|
|
@ -139,7 +152,7 @@ namespace AyCode.Blazor.Components.Services
|
||||||
throw new NullReferenceException($"LoadDataSourceAsync; result.Status != SignalResponseStatus.Success || result.ResponseData == null; Status: {SignalResponseStatus.Success}");
|
throw new NullReferenceException($"LoadDataSourceAsync; result.Status != SignalResponseStatus.Success || result.ResponseData == null; Status: {SignalResponseStatus.Success}");
|
||||||
|
|
||||||
return LoadDataSource(result.ResponseData);
|
return LoadDataSource(result.ResponseData);
|
||||||
}, ContextIds);
|
}, GetContextParams());
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task LoadDataSource(IList<T> fromSource, bool clearChangeTracking = true)
|
public async Task LoadDataSource(IList<T> fromSource, bool clearChangeTracking = true)
|
||||||
|
|
@ -179,7 +192,7 @@ namespace AyCode.Blazor.Components.Services
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
resultitem = await SignalRClient.GetByIdAsync<T>(SignalRCrudTags.GetItemMessageTag, id);
|
resultitem = await SignalRClient.GetByIdAsync<T>(SignalRCrudTags.GetItemMessageTag, [id]);
|
||||||
if (resultitem == null) return null;
|
if (resultitem == null) return null;
|
||||||
|
|
||||||
if (TryGetIndex(id, out var index)) InnerList[index] = resultitem;
|
if (TryGetIndex(id, out var index)) InnerList[index] = resultitem;
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@
|
||||||
<PackageReference Include="MessagePack" Version="2.5.168" />
|
<PackageReference Include="MessagePack" Version="2.5.168" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.6" />
|
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.6" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="8.0.6" />
|
<PackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="8.0.6" />
|
||||||
|
<PackageReference Include="Serialize.Linq" Version="3.0.152" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue