diff --git a/AyCode.Blazor.Components/Services/AcSignalRClientBase.cs b/AyCode.Blazor.Components/Services/AcSignalRClientBase.cs index d2f6189..f2c6694 100644 --- a/AyCode.Blazor.Components/Services/AcSignalRClientBase.cs +++ b/AyCode.Blazor.Components/Services/AcSignalRClientBase.cs @@ -84,19 +84,19 @@ namespace AyCode.Blazor.Components.Services } #region CRUD - public virtual Task GetByIdAsync(int messageTag, params Guid[] ids) where TResponseData : class + public virtual Task GetByIdAsync(int messageTag, object[] ids) where TResponseData : class => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(new IdMessage(ids)), AcDomain.NextUniqueInt32); - public virtual Task GetByIdAsync(int messageTag, Func, Task> responseCallback, params Guid[] ids) + public virtual Task GetByIdAsync(int messageTag, Func, Task> responseCallback, object[] ids) => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(new IdMessage(ids)), responseCallback); public virtual Task GetAllAsync(int messageTag) where TResponseData : class => SendMessageToServerAsync(messageTag); public virtual Task GetAllAsync(int messageTag, Func, Task> responseCallback) => SendMessageToServerAsync(messageTag, null, responseCallback); - public virtual Task GetAllAsync(int messageTag, Func, Task> responseCallback, params Guid[]? contextIds) + public virtual Task GetAllAsync(int messageTag, Func, Task> responseCallback, object[]? contextIds) => SendMessageToServerAsync(messageTag, (contextIds == null || contextIds.Length == 0 ? null : new SignalPostJsonDataMessage(new IdMessage(contextIds))), responseCallback); - public virtual Task GetAllAsync(int messageTag, params Guid[]? contextIds) where TResponseData : class + public virtual Task GetAllAsync(int messageTag, object[]? contextIds) where TResponseData : class => SendMessageToServerAsync(messageTag, contextIds == null || contextIds.Length == 0 ? null : new SignalPostJsonDataMessage(new IdMessage(contextIds)), AcDomain.NextUniqueInt32); public virtual Task PostDataAsync(int messageTag, TPostData postData) where TPostData : class diff --git a/AyCode.Blazor.Components/Services/AcSignalRDataSource.cs b/AyCode.Blazor.Components/Services/AcSignalRDataSource.cs index 34125da..8f54911 100644 --- a/AyCode.Blazor.Components/Services/AcSignalRDataSource.cs +++ b/AyCode.Blazor.Components/Services/AcSignalRDataSource.cs @@ -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 InnerList = []; //TODO: Dictionary??? - J. protected readonly ChangeTracking TrackingItems = new(); - protected readonly Guid[]? ContextIds; + public List? ContextIds; + public string? FilterText { get; set; } + public AcSignalRClientBase SignalRClient; protected readonly SignalRCrudTags SignalRCrudTags; public Func, Task>? OnDataSourceItemChanged; public Func? OnDataSourceLoaded; - public AcSignalRDataSource(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, params Guid[]? contextIds) + public AcSignalRDataSource(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, IEnumerable? contextIds = null) { - if (contextIds?.Length > 0) ContextIds = contextIds; + if (contextIds != null) (ContextIds = new List()).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(); + if (ContextIds != null) parameters.AddRange(ContextIds.Cast()); + if (!FilterText.IsNullOrWhiteSpace()) parameters.Add(FilterText); + + if (parameters.Count == 0) parameters = null; + return parameters?.ToArray(); + } + /// /// GetAllMessageTag /// @@ -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>(SignalRCrudTags.GetAllMessageTag, ContextIds)) ?? throw new NullReferenceException(); + var resultList = (await SignalRClient.GetAllAsync>(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 fromSource, bool clearChangeTracking = true) @@ -179,7 +192,7 @@ namespace AyCode.Blazor.Components.Services try { - resultitem = await SignalRClient.GetByIdAsync(SignalRCrudTags.GetItemMessageTag, id); + resultitem = await SignalRClient.GetByIdAsync(SignalRCrudTags.GetItemMessageTag, [id]); if (resultitem == null) return null; if (TryGetIndex(id, out var index)) InnerList[index] = resultitem; diff --git a/AyCode.Blazor.Controllers/AyCode.Blazor.Controllers.csproj b/AyCode.Blazor.Controllers/AyCode.Blazor.Controllers.csproj index 4842669..4e7639e 100644 --- a/AyCode.Blazor.Controllers/AyCode.Blazor.Controllers.csproj +++ b/AyCode.Blazor.Controllers/AyCode.Blazor.Controllers.csproj @@ -58,6 +58,7 @@ +