? ShippingDocumentToFiles { get; set; }
}
diff --git a/FruitBankHybrid.Shared/Components/FileUploads/FileUpload.razor b/FruitBankHybrid.Shared/Components/FileUploads/FileUpload.razor
new file mode 100644
index 00000000..88665cb9
--- /dev/null
+++ b/FruitBankHybrid.Shared/Components/FileUploads/FileUpload.razor
@@ -0,0 +1,56 @@
+@inject NavigationManager NavigationManager
+
+
+
+ Drag and Drop File Hereor
+
+
+
+
+
+
+ Uploads are limited to a single file up to 15 MB.
+
+
+@code {
+ [Parameter] public Func? OnFileUploaded { get; set; }
+
+ bool UploadVisible { get; set; } = false;
+
+ readonly List _allowedExtensions = new List { ".jpg", ".jpeg", ".gif", ".png", ".pdf", ".json" };
+ readonly List _acceptedFileTypes = new List { "application/json", "application/pdf", "application/jpeg" };
+
+ byte[] FileBytes { get; set; }
+
+ protected void SelectedFilesChanged(IEnumerable files)
+ {
+ //InvokeAsync(StateHasChanged);
+ }
+
+ protected async Task FilesUploading(FilesUploadingEventArgs args)
+ {
+ foreach (var file in args.Files)
+ {
+ using var stream = new System.IO.MemoryStream();
+ await file.OpenReadStream(file.Size).CopyToAsync(stream);
+
+ if (OnFileUploaded != null) await OnFileUploaded(stream.ToArray());
+ }
+ }
+ protected string GetUploadUrl(string url)
+ {
+ return NavigationManager.ToAbsoluteUri(url).AbsoluteUri;
+ }
+}
\ No newline at end of file
diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor
index 96f4831c..72e38427 100644
--- a/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor
+++ b/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor
@@ -42,21 +42,6 @@
}
- @*
-
-
-
-
-
-
- Auto Collapse Detail Rows
-
-
-
-
-
-
- *@
? _currentOrderDtos;
@@ -59,13 +62,15 @@
private readonly Dictionary> _orderItemDtosByProductId = new();
[Parameter] public bool IsMasterGrid { get; set; } = false;
- [Parameter] public List? ProductDtos { get; set; }
+ [Parameter] public IEnumerable? ProductDtos { get; set; }
//[Parameter] public List? OrderDtos { get; set; }
//[Parameter] public List? OrderItemDtos { get; set; }
protected override async Task OnInitializedAsync()
{
- ProductDtos ??= await FruitBankSignalRClient.GetProductDtos();
+ ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true);
+
+ //ProductDtos ??= await FruitBankSignalRClient.GetProductDtos();
// if (ProductDtos is { Count: > 0 })
// _currentOrderDtos = await GetOrderDtosFromDbAsync(ProductDtos[0].Id);
diff --git a/FruitBankHybrid.Shared/Components/GridShipping.razor b/FruitBankHybrid.Shared/Components/GridShipping.razor
new file mode 100644
index 00000000..e3ae6e41
--- /dev/null
+++ b/FruitBankHybrid.Shared/Components/GridShipping.razor
@@ -0,0 +1,157 @@
+@using FruitBank.Common.Dtos
+@using FruitBank.Common.Entities
+@using FruitBankHybrid.Shared.Services.SignalRs
+
+@inject FruitBankSignalRClient FruitBankSignalRClient
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @if (IsMasterGrid)
+ {
+ var shipping = ((Shipping)context.DataItem);
+ var shippingDocuments = shipping?.ShippingDocuments?.ToList() ?? [];
+
+
+
+ @{
+
+
+ }
+
+
+
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @*
+
+
+
+
+ *@
+
+
+
+
+
+
+
+
+@code {
+ [Parameter] public bool IsMasterGrid { get; set; } = false;
+ //[Parameter] public OrderDto? OrderDto { get; set; }
+ [Parameter] public List? Shippings{ get; set; }
+
+ const string ExportFileName = "ExportResult";
+ string GridSearchText = "";
+ bool EditItemsEnabled { get; set; }
+ int FocusedRowVisibleIndex { get; set; }
+ IGrid Grid { get; set; }
+
+ private int _activeTabIndex;
+ protected override async Task OnInitializedAsync()
+ {
+ Shippings ??= (await FruitBankSignalRClient.GetShippings()) ?? [];
+ // OrderItemDtos = OrderDto.OrderItemDtos;
+ }
+
+ async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) {
+ // await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem);
+ // await LoadGridDataAsync();
+ // if(Data.Length == 0)
+ // UpdateEditItemsEnabled(false);
+ }
+ async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) {
+ // if(e.IsNew) {
+ // await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel);
+ // UpdateEditItemsEnabled(true);
+ // } else
+ // await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel);
+ // await LoadGridDataAsync();
+ }
+ async Task NewItem_Click() {
+ await Grid.StartEditNewRowAsync();
+ }
+ async Task EditItem_Click() {
+ await Grid.StartEditRowAsync(FocusedRowVisibleIndex);
+ }
+ void DeleteItem_Click() {
+ Grid.ShowRowDeleteConfirmation(FocusedRowVisibleIndex);
+ }
+ void ColumnChooserItem_Click(ToolbarItemClickEventArgs e) {
+ Grid.ShowColumnChooser();
+ }
+ async Task ExportXlsxItem_Click() {
+ await Grid.ExportToXlsxAsync(ExportFileName);
+ }
+ async Task ExportXlsItem_Click() {
+ await Grid.ExportToXlsAsync(ExportFileName);
+ }
+ async Task ExportCsvItem_Click() {
+ await Grid.ExportToCsvAsync(ExportFileName);
+ }
+ async Task ExportPdfItem_Click() {
+ await Grid.ExportToPdfAsync(ExportFileName);
+ }
+ protected async Task OnActiveTabChanged(int activeTabIndex)
+ {
+ _activeTabIndex = activeTabIndex;
+ return;
+
+ // switch (_activeTabIndex)
+ // {
+ // case 0:
+ // if(ProductDtos == null)
+ // ProductDtos = (await FruitBankSignalRClient.GetProductDtos() ?? []); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
+ // break;
+ // case 1:
+ // if(OrderDtos == null)
+ // OrderDtos = (await FruitBankSignalRClient.GetAllOrderDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
+ // break;
+ // case 2:
+ // if (OrderItemDtos == null)
+ // OrderItemDtos = (await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
+ // break;
+ // }
+ }
+}
+
diff --git a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor
index fdc76b28..895568d2 100644
--- a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor
+++ b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor
@@ -1,17 +1,37 @@
@using FruitBank.Common.Dtos
@using FruitBank.Common.Entities
+@using FruitBankHybrid.Shared.Components.FileUploads
+@using FruitBankHybrid.Shared.Databases
@using FruitBankHybrid.Shared.Services.SignalRs
+@using System.Text
+@using AyCode.Core.Extensions
@inject FruitBankSignalRClient FruitBankSignalRClient
+ EditOnKeyPress="true"
+ ValidationEnabled="false"
+ EditModelSaving="Grid_EditModelSaving">
-
-
+
+
+
+
+
+
+
+
+
+
@@ -30,7 +50,7 @@
var shippingDocument = ((ShippingDocument)context.DataItem);
-
+
@@ -57,6 +77,17 @@
+
+
+ @*
+ *@
+
+
+
@*
@code {
+ [Inject] public required DatabaseClient Database { get; set; }
+
[Parameter] public bool IsMasterGrid { get; set; } = false;
- //[Parameter] public OrderDto? OrderDto { get; set; }
+
+ [Parameter] public List? Shippings { get; set; }
+ [Parameter] public IEnumerable? ProductDtos { get; set; }
[Parameter] public List? ShippingDocuments { get; set; }
+ [Parameter] public Func?, Task>? OnUploadedFileParsed { get; set; }
+
const string ExportFileName = "ExportResult";
string GridSearchText = "";
- bool EditItemsEnabled { get; set; }
+ bool EditItemsEnabled { get; set; } = true;
int FocusedRowVisibleIndex { get; set; }
IGrid Grid { get; set; }
private int _activeTabIndex;
- protected override void OnInitialized()
+ protected override async Task OnInitializedAsync()
{
+ ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true);
+
+ Shippings ??= await FruitBankSignalRClient.GetShippings() ?? [];
+ //ProductDtos ??= await FruitBankSignalRClient.GetProductDtos() ?? [];
+ ShippingDocuments ??= await FruitBankSignalRClient.GetShippingDocuments() ?? [];
// if (OrderDto != null)
// OrderItemDtos = OrderDto.OrderItemDtos;
}
- async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) {
+ private async Task OnFileUploaded(byte[] arg)
+ {
+ string utfString = Encoding.UTF8.GetString(arg, 0, arg.Length);
+
+ var partners = utfString.JsonTo>();
+ if (partners != null)
+ {
+ var id = ShippingDocuments.Max(x => x.Id);
+ foreach (var shippingDocument in partners.SelectMany(partner => partner.ShippingDocuments ?? []))
+ {
+ shippingDocument.Id = ++id;
+
+ ShippingDocuments.Add(shippingDocument);
+ }
+
+ }
+
+ Grid.Reload();
+
+ if (OnUploadedFileParsed != null)
+ await OnUploadedFileParsed(partners);
+ //await InvokeAsync(StateHasChanged);
+ }
+
+ async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e)
+ {
// await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem);
// await LoadGridDataAsync();
// if(Data.Length == 0)
// UpdateEditItemsEnabled(false);
}
- async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) {
+ async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e)
+ {
// if(e.IsNew) {
// await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel);
- // UpdateEditItemsEnabled(true);
// } else
// await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel);
// await LoadGridDataAsync();
+ EditItemsEnabled = true;
}
- async Task NewItem_Click() {
+ async Task NewItem_Click()
+ {
+ EditItemsEnabled = false;
await Grid.StartEditNewRowAsync();
}
- async Task EditItem_Click() {
+ async Task EditItem_Click()
+ {
+ EditItemsEnabled = false;
await Grid.StartEditRowAsync(FocusedRowVisibleIndex);
}
- void DeleteItem_Click() {
+ void DeleteItem_Click()
+ {
+ EditItemsEnabled = false;
Grid.ShowRowDeleteConfirmation(FocusedRowVisibleIndex);
}
- void ColumnChooserItem_Click(ToolbarItemClickEventArgs e) {
+
+ void ColumnChooserItem_Click(ToolbarItemClickEventArgs e)
+ {
Grid.ShowColumnChooser();
}
- async Task ExportXlsxItem_Click() {
+ async Task ExportXlsxItem_Click()
+ {
await Grid.ExportToXlsxAsync(ExportFileName);
}
- async Task ExportXlsItem_Click() {
+ async Task ExportXlsItem_Click()
+ {
await Grid.ExportToXlsAsync(ExportFileName);
}
- async Task ExportCsvItem_Click() {
+ async Task ExportCsvItem_Click()
+ {
await Grid.ExportToCsvAsync(ExportFileName);
}
- async Task ExportPdfItem_Click() {
+ async Task ExportPdfItem_Click()
+ {
await Grid.ExportToPdfAsync(ExportFileName);
}
protected async Task OnActiveTabChanged(int activeTabIndex)
diff --git a/FruitBankHybrid.Shared/Components/GridShippingItem.razor b/FruitBankHybrid.Shared/Components/GridShippingItem.razor
index 96e75b97..c300f852 100644
--- a/FruitBankHybrid.Shared/Components/GridShippingItem.razor
+++ b/FruitBankHybrid.Shared/Components/GridShippingItem.razor
@@ -1,5 +1,6 @@
@using FruitBank.Common.Dtos
@using FruitBank.Common.Entities
+@using FruitBankHybrid.Shared.Databases
@using FruitBankHybrid.Shared.Services.SignalRs
@inject FruitBankSignalRClient FruitBankSignalRClient
@@ -15,9 +16,26 @@
FilterMenuButtonDisplayMode="@(IsMasterGrid ? GridFilterMenuButtonDisplayMode.Never : GridFilterMenuButtonDisplayMode.Always)">
-
+
+
+
+
+
+
@* *@
-
+
+
+
+
+
@@ -57,13 +75,21 @@
@code {
- [Parameter] public bool IsMasterGrid { get; set; } = false;
- //[Parameter] public OrderDto? OrderDto { get; set; }
- [Parameter] public List? ShippingItems { get; set; }
+ [Inject] public required DatabaseClient Database { get; set; }
+
+ [Parameter] public bool IsMasterGrid { get; set; } = false;
+
+ [Parameter] public IEnumerable? ProductDtos { get; set; }
+ [Parameter] public IEnumerable? ShippingItems { get; set; }
+ [Parameter] public IEnumerable? ShippingDocuments { get; set; }
protected override async Task OnInitializedAsync()
{
+ ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true);
+
+ //ProductDtos ??= await FruitBankSignalRClient.GetProductDtos() ?? [];
ShippingItems ??= await FruitBankSignalRClient.GetShippingItems() ?? [];
+ ShippingDocuments ??= await FruitBankSignalRClient.GetShippingDocuments() ?? [];
}
}
\ No newline at end of file
diff --git a/FruitBankHybrid.Shared/Databases/DatabaseClient.cs b/FruitBankHybrid.Shared/Databases/DatabaseClient.cs
new file mode 100644
index 00000000..199583ed
--- /dev/null
+++ b/FruitBankHybrid.Shared/Databases/DatabaseClient.cs
@@ -0,0 +1,160 @@
+using AyCode.Core.Extensions;
+using AyCode.Interfaces.Entities;
+using AyCode.Utils.Wrappers;
+using FruitBank.Common.Dtos;
+using FruitBankHybrid.Shared.Services.SignalRs;
+using Nop.Core.Domain.Common;
+using Nop.Core.Domain.Orders;
+using System.Collections.Concurrent;
+using System.Collections.ObjectModel;
+using AyCode.Utils.Extensions;
+
+namespace FruitBankHybrid.Shared.Databases;
+
+public class ProductDtoTableItem : ProductDto
+{
+ //[Newtonsoft.Json.JsonProperty]
+ //public new ObservableCollection? GenericAttributes { get; set; }
+}
+
+public class OrderDtoTableItem : OrderDto
+{
+ //[Newtonsoft.Json.JsonProperty]
+ //public new ObservableCollection? GenericAttributes { get; set; }
+ //[Newtonsoft.Json.JsonProperty]
+ //public new ObservableCollection? OrderItemDtos { get; set; }
+}
+
+public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : ObservableCollection
+{
+ private readonly SemaphoreSlim _semaphoreSlim = new(1);
+ public async Task LoadDataAsync(bool onlyIfEmpty = true)
+ {
+ if (onlyIfEmpty && Count != 0) return this;
+
+ using (await _semaphoreSlim.UseWaitAsync())
+ {
+ if (Count != 0) return this;
+
+ var items = (await fruitBankSignalRClient.GetProductDtoTableItems() ?? []);
+
+ Clear();
+ foreach (var productDto in items)
+ {
+ this.Add(productDto);
+ }
+ }
+
+ return this;
+ }
+}
+public class OrderDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : ObservableCollection
+{
+ private readonly SemaphoreSlim _semaphoreSlim = new(1);
+
+ public async Task LoadDataAsync(bool onlyIfEmpty = true)
+ {
+ if (onlyIfEmpty && Count != 0) return this;
+
+ using (await _semaphoreSlim.UseWaitAsync())
+ {
+ if (Count != 0) return this;
+
+ var items = (await fruitBankSignalRClient.GetAllOrderDtoTableItems() ?? []);
+
+ Clear();
+ foreach (var orderDto in items)
+ {
+ this.Add(orderDto);
+ }
+ }
+
+ return this;
+ }
+}
+
+public class DatabaseClient : DatabaseClientBase
+{
+ private FruitBankSignalRClient _fruitBankSignalRClient;
+
+ public DatabaseClient(FruitBankSignalRClient fruitBankSignalRClient)
+ {
+ _fruitBankSignalRClient = fruitBankSignalRClient;
+
+ AddTable(new ProductDtoTable(_fruitBankSignalRClient));
+ AddTable(new OrderDtoTable(_fruitBankSignalRClient));
+ }
+
+ public ProductDtoTable ProductDtoTable
+ {
+ get => (GetRows()! as ProductDtoTable)!;
+ //set => AddRows(value);
+ }
+
+ public OrderDtoTable OrderDtoTable => (GetRows()! as OrderDtoTable)!;
+}
+
+public abstract class DatabaseClientBase
+{
+ //private ObservableCollection a = new ObservableCollection();
+ private readonly ConcurrentDictionary _database = new();
+
+ protected void AddTable(IList table)where TEntity: class, IEntityInt
+ {
+ if (GetTableObject() == null)
+ {
+ if (!_database.TryAdd(typeof(TEntity), table))
+ return;
+ }
+
+ return;
+ }
+
+ protected IList? GetTableObject() where T : class, IEntityInt
+ {
+ return _database.GetValueOrDefault(typeof(T)) as IList;
+ }
+
+ public IEnumerable? GetRows() where T : class, IEntityInt
+ {
+ return GetTableObject();
+ }
+
+ public T? GetRow(int id) where T : class, IEntityInt
+ {
+ return GetTableObject()?.FirstOrDefault(x => x.Id == id) as T;
+ }
+
+ public T AddRow(T entity) where T : class, IEntityInt
+ => AddRow(GetTableObject()!, entity);
+
+ protected T AddRow(in IList table, T entity) where T : class, IEntityInt
+ {
+ table.Add(entity);
+ return entity;
+ }
+
+ public void AddRows(IEnumerable entities) where T : class, IEntityInt
+ {
+ var table = GetTableObject()!;
+
+ foreach (var entity in entities)
+ {
+ AddRow(table, entity);
+ }
+ }
+
+ public T? DeleteRow(int id) where T : class, IEntityInt
+ {
+ var table = GetTableObject();
+ if (table == null) return null;
+
+ var index = table.FindIndex(x => x.Id == id);
+ if (index < 0) return null;
+
+ var entity = table[index];
+ table.RemoveAt(index);
+
+ return entity as T;
+ }
+}
\ No newline at end of file
diff --git a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor
index 590b0a36..80cb3eb0 100644
--- a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor
+++ b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor
@@ -18,16 +18,16 @@
@* @bind-ActiveTabIndex="@ActiveTabIndex" *@
-
+
- @* *@
+
-
+
-
+
diff --git a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs
index 94e803a6..7ee37884 100644
--- a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs
+++ b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs
@@ -1,8 +1,10 @@
using AyCode.Core.Loggers;
using DevExpress.Blazor;
+using DevExpress.ClipboardSource.SpreadsheetML;
using FruitBank.Common.Dtos;
using FruitBank.Common.Entities;
using FruitBank.Common.Models;
+using FruitBankHybrid.Shared.Databases;
using FruitBankHybrid.Shared.Services.Loggers;
using FruitBankHybrid.Shared.Services.SignalRs;
using Mango.Nop.Core.Loggers;
@@ -17,9 +19,10 @@ public partial class ShippingsAdmin : ComponentBase
[Inject] public required NavigationManager NavManager { get; set; }
[Inject] private IDialogService DialogService { get; set; } = null!;
[Inject] public required LoggedInModel LoggedInModel { get; set; }
+ [Inject] public required DatabaseClient Database { get; set; }
public IGrid gridShipping;
- private List? ProductDtos { get; set; } = null!;
+ //private List? ProductDtos { get; set; } = null!;
private List? Shippings { get; set; } = null!;
private List? ShippingDocuments { get; set; } = null!;
private List? ShippingItems { get; set; } = null!;
@@ -60,7 +63,7 @@ public partial class ShippingsAdmin : ComponentBase
switch (ActiveTabIndex)
{
case 0:
- ProductDtos ??= (await FruitBankSignalRClient.GetProductDtos() ?? []); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
+ await Database.ProductDtoTable.LoadDataAsync(true);
break;
case 1:
Shippings ??= (await FruitBankSignalRClient.GetShippings() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
diff --git a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs
index 2b36247c..b8d6f187 100644
--- a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs
+++ b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs
@@ -1,4 +1,5 @@
-using AyCode.Core.Extensions;
+using System.Collections.ObjectModel;
+using AyCode.Core.Extensions;
using AyCode.Core.Helpers;
using AyCode.Core.Loggers;
using AyCode.Services.Server.SignalRs;
@@ -9,6 +10,7 @@ using FruitBank.Common.Entities;
using FruitBank.Common.Interfaces;
using FruitBank.Common.Models;
using FruitBank.Common.SignalRs;
+using FruitBankHybrid.Shared.Databases;
using FruitBankHybrid.Shared.Services.Loggers;
using Mango.Nop.Core.Dtos;
using Mango.Nop.Core.Models;
@@ -131,6 +133,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
#region Product
+ public Task?> GetProductDtoTableItems()
+ => GetAllAsync>(SignalRTags.GetProductDtos);
+
public Task?> GetProductDtos()
=> GetAllAsync>(SignalRTags.GetProductDtos);
@@ -151,6 +156,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
#endregion Authenticate
#region Orders
+ public Task?> GetAllOrderDtoTableItems()
+ => GetAllAsync>(SignalRTags.GetAllOrderDtos);
+
public Task?> GetAllOrderDtos()
=> GetAllAsync>(SignalRTags.GetAllOrderDtos);
diff --git a/FruitBankHybrid/MauiProgram.cs b/FruitBankHybrid/MauiProgram.cs
index 308baf86..5753b372 100644
--- a/FruitBankHybrid/MauiProgram.cs
+++ b/FruitBankHybrid/MauiProgram.cs
@@ -3,6 +3,7 @@ using FruitBank.Common.Loggers;
using FruitBank.Common.Models;
using FruitBankHybrid.Services;
using FruitBankHybrid.Services.Loggers;
+using FruitBankHybrid.Shared.Databases;
using FruitBankHybrid.Shared.Services;
using FruitBankHybrid.Shared.Services.SignalRs;
//using DevExpress.Maui;
@@ -29,8 +30,8 @@ namespace FruitBankHybrid
builder.Services.AddSingleton();
builder.Services.AddSingleton();
- //builder.Services.AddScoped();
builder.Services.AddScoped();
+ builder.Services.AddSingleton();
#if DEBUG