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
|
||||
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);
|
||||
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);
|
||||
|
||||
public virtual Task<TResponseData?> GetAllAsync<TResponseData>(int messageTag) where TResponseData : class
|
||||
=> SendMessageToServerAsync<TResponseData>(messageTag);
|
||||
public virtual Task GetAllAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> 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);
|
||||
|
||||
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);
|
||||
|
||||
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.Interfaces;
|
||||
using AyCode.Services.SignalRs;
|
||||
using AyCode.Utils.Extensions;
|
||||
|
||||
namespace AyCode.Blazor.Components.Services
|
||||
{
|
||||
|
|
@ -96,16 +97,18 @@ namespace AyCode.Blazor.Components.Services
|
|||
protected List<T> InnerList = []; //TODO: Dictionary??? - J.
|
||||
protected readonly ChangeTracking<T> TrackingItems = new();
|
||||
|
||||
protected readonly Guid[]? ContextIds;
|
||||
public List<Guid>? ContextIds;
|
||||
public string? FilterText { get; set; }
|
||||
|
||||
public AcSignalRClientBase SignalRClient;
|
||||
protected readonly SignalRCrudTags SignalRCrudTags;
|
||||
|
||||
public Func<ItemChangedEventArgs<T>, Task>? OnDataSourceItemChanged;
|
||||
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;
|
||||
SignalRClient = signalRClient;
|
||||
|
|
@ -115,6 +118,16 @@ namespace AyCode.Blazor.Components.Services
|
|||
public object SyncRoot => _syncRoot;
|
||||
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>
|
||||
/// GetAllMessageTag
|
||||
/// </summary>
|
||||
|
|
@ -124,7 +137,7 @@ namespace AyCode.Blazor.Components.Services
|
|||
{
|
||||
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);
|
||||
}
|
||||
|
|
@ -139,7 +152,7 @@ namespace AyCode.Blazor.Components.Services
|
|||
throw new NullReferenceException($"LoadDataSourceAsync; result.Status != SignalResponseStatus.Success || result.ResponseData == null; Status: {SignalResponseStatus.Success}");
|
||||
|
||||
return LoadDataSource(result.ResponseData);
|
||||
}, ContextIds);
|
||||
}, GetContextParams());
|
||||
}
|
||||
|
||||
public async Task LoadDataSource(IList<T> fromSource, bool clearChangeTracking = true)
|
||||
|
|
@ -179,7 +192,7 @@ namespace AyCode.Blazor.Components.Services
|
|||
|
||||
try
|
||||
{
|
||||
resultitem = await SignalRClient.GetByIdAsync<T>(SignalRCrudTags.GetItemMessageTag, id);
|
||||
resultitem = await SignalRClient.GetByIdAsync<T>(SignalRCrudTags.GetItemMessageTag, [id]);
|
||||
if (resultitem == null) return null;
|
||||
|
||||
if (TryGetIndex(id, out var index)) InnerList[index] = resultitem;
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@
|
|||
<PackageReference Include="MessagePack" Version="2.5.168" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.6" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="8.0.6" />
|
||||
<PackageReference Include="Serialize.Linq" Version="3.0.152" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
Loading…
Reference in New Issue