diff --git a/FruitBankHybrid.Shared.Tests/JsonExtensionTests.cs b/FruitBankHybrid.Shared.Tests/JsonExtensionTests.cs index 57b2676..0fc656c 100644 --- a/FruitBankHybrid.Shared.Tests/JsonExtensionTests.cs +++ b/FruitBankHybrid.Shared.Tests/JsonExtensionTests.cs @@ -14,6 +14,7 @@ using Mono.Cecil; using Newtonsoft.Json; using Nop.Core.Domain.Orders; using System.Runtime.Serialization; +using AyCode.Core.Serializers.Jsons; namespace FruitBankHybrid.Shared.Tests; diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor index 32fcf9d..d85ff89 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor @@ -69,7 +69,7 @@ @if (IsMasterGrid) { - + } diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor index 0c3795d..2089179 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor @@ -74,7 +74,7 @@ @if (IsMasterGrid) { - + } diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor index 025854c..b2c7d21 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor @@ -37,7 +37,7 @@ @if (IsMasterGrid) { - + } diff --git a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor index 599b07f..217d1c2 100644 --- a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor +++ b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor @@ -69,7 +69,7 @@ @if (IsMasterGrid) { - + } diff --git a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor index 0f3a896..b3b59a0 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor @@ -94,7 +94,7 @@ @if (IsMasterGrid) { - + *@ - + } diff --git a/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor b/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor index 46452de..4ffa195 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor @@ -108,7 +108,7 @@ @if (IsMasterGrid) { - + } diff --git a/FruitBankHybrid.Shared/Components/Grids/GenericAttributes/GridGenericAttribute.razor b/FruitBankHybrid.Shared/Components/Grids/GenericAttributes/GridGenericAttribute.razor index b01c4f7..70cae11 100644 --- a/FruitBankHybrid.Shared/Components/Grids/GenericAttributes/GridGenericAttribute.razor +++ b/FruitBankHybrid.Shared/Components/Grids/GenericAttributes/GridGenericAttribute.razor @@ -32,7 +32,7 @@ @if (IsMasterGrid) { - + } diff --git a/FruitBankHybrid.Shared/Components/Grids/Partners/GridPartner.razor b/FruitBankHybrid.Shared/Components/Grids/Partners/GridPartner.razor index 305382e..2f64c4b 100644 --- a/FruitBankHybrid.Shared/Components/Grids/Partners/GridPartner.razor +++ b/FruitBankHybrid.Shared/Components/Grids/Partners/GridPartner.razor @@ -64,7 +64,7 @@ @if (IsMasterGrid) { - + } diff --git a/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor b/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor index bf21ce1..698ba74 100644 --- a/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor +++ b/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor @@ -46,7 +46,7 @@ @if (IsMasterGrid) { - + } @* diff --git a/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor b/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor index 850255c..1a7cb55 100644 --- a/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor +++ b/FruitBankHybrid.Shared/Components/Grids/Shippings/GridShipping.razor @@ -55,7 +55,7 @@ @if (IsMasterGrid) { - + } diff --git a/FruitBankHybrid.Shared/Components/Grids/StockTakingItems/GridStockTakingItem.razor b/FruitBankHybrid.Shared/Components/Grids/StockTakingItems/GridStockTakingItem.razor index 64bc863..3a42004 100644 --- a/FruitBankHybrid.Shared/Components/Grids/StockTakingItems/GridStockTakingItem.razor +++ b/FruitBankHybrid.Shared/Components/Grids/StockTakingItems/GridStockTakingItem.razor @@ -46,7 +46,7 @@ @if (IsMasterGrid) { - + } diff --git a/FruitBankHybrid.Shared/Components/MgGridBase.cs b/FruitBankHybrid.Shared/Components/MgGridBase.cs index 5002489..5d46f6e 100644 --- a/FruitBankHybrid.Shared/Components/MgGridBase.cs +++ b/FruitBankHybrid.Shared/Components/MgGridBase.cs @@ -1,4 +1,5 @@ -using AyCode.Core.Extensions; +using AyCode.Blazor.Components.Components.Grids; +using AyCode.Core.Extensions; using AyCode.Core.Loggers; using AyCode.Utils.Extensions; using DevExpress.Blazor; @@ -13,12 +14,18 @@ using System.Reflection; namespace FruitBankHybrid.Shared.Components; -public class MgGridBase : DxGrid +public class MgGridBase : DxGrid, IMgGridBase { private bool _isFirstInitializeParameterCore; private bool _isFirstInitializeParameters; public bool PreRendered { get; set; } + /// + public bool IsSyncing => false; + + /// + public MgEditState EditState { get; private set; } = MgEditState.None; + [Inject] public required IEnumerable LogWriters { get; set; } [Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; } [Inject] public required LoggedInModel LoggedInModel { get; set; } diff --git a/FruitBankHybrid.Shared/Components/Toolbars/FruitBankToolbarTemplate.razor b/FruitBankHybrid.Shared/Components/Toolbars/FruitBankToolbarTemplate.razor deleted file mode 100644 index 628d748..0000000 --- a/FruitBankHybrid.Shared/Components/Toolbars/FruitBankToolbarTemplate.razor +++ /dev/null @@ -1,148 +0,0 @@ -@using AyCode.Blazor.Components.Components.Grids -@using AyCode.Core.Loggers; -@using AyCode.Core.Extensions -@using AyCode.Core.Helpers -@using AyCode.Utils.Extensions -@using FruitBank.Common.Dtos -@using FruitBank.Common.Entities -@using FruitBank.Common.Models -@using FruitBankHybrid.Shared.Components.Grids.ShippingItems -@using FruitBankHybrid.Shared.Databases -@using FruitBankHybrid.Shared.Services.Loggers; -@using FruitBankHybrid.Shared.Services.SignalRs - -@implements IDisposable - -@inject IEnumerable LogWriters -@inject FruitBankSignalRClient FruitBankSignalRClient -@inject LoggedInModel LoggedInModel; - - - - - - - - - - - - - - - - - - - @ToolbarItemsExtended - - - -@code { - [Parameter] public IGrid Grid { get; set; } - [Parameter] public RenderFragment? ToolbarItemsExtended { get; set; } - [Parameter] public EventCallback OnReloadDataClick { get; set; } - - public ToolbarBase Toolbar { get; set; } - const string ExportFileName = "ExportResult"; - - private bool _isReloadInProgress; - private bool _isGridSyncing; - private IMgGridBase? _mgGrid; - - /// - /// Reload button is enabled only when no sync operation is in progress - /// - public bool BtnReloadDataEnabled => !_isReloadInProgress && !_isGridSyncing; - - public bool EditItemsEnabled { get; set; } = true; - private LoggerClient _logger; - - protected override void OnInitialized() - { - _logger = new LoggerClient(LogWriters.ToArray()); - } - - protected override void OnParametersSet() - { - // Subscribe to grid syncing state changes if Grid implements IMgGridBase - if (Grid is IMgGridBase mgGrid && !ReferenceEquals(_mgGrid, mgGrid)) - { - // Unsubscribe from previous grid - if (_mgGrid != null) - { - _mgGrid.OnSyncingStateChanged -= OnGridSyncingStateChanged; - } - - _mgGrid = mgGrid; - _mgGrid.OnSyncingStateChanged += OnGridSyncingStateChanged; - - // Get initial syncing state - _isGridSyncing = _mgGrid.IsSyncing; - } - } - - private void OnGridSyncingStateChanged(bool isSyncing) - { - _isGridSyncing = isSyncing; - InvokeAsync(StateHasChanged); - } - - public void Dispose() - { - if (_mgGrid != null) - { - _mgGrid.OnSyncingStateChanged -= OnGridSyncingStateChanged; - } - } - - async Task ReloadData_Click(ToolbarItemClickEventArgs e) - { - _isReloadInProgress = true; - try - { - await OnReloadDataClick.InvokeAsync(); - } - finally - { - _isReloadInProgress = false; - } - } - - async Task NewItem_Click() - { - EditItemsEnabled = false; - await Grid.StartEditNewRowAsync(); - } - async Task EditItem_Click() - { - EditItemsEnabled = false; - await Grid.StartEditRowAsync(Grid.GetFocusedRowIndex()); - } - void DeleteItem_Click() - { - EditItemsEnabled = false; - Grid.ShowRowDeleteConfirmation(Grid.GetFocusedRowIndex()); - } - - 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); - } -} \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/Toolbars/MgGridToolbarTemplate.razor b/FruitBankHybrid.Shared/Components/Toolbars/MgGridToolbarTemplate.razor new file mode 100644 index 0000000..1606feb --- /dev/null +++ b/FruitBankHybrid.Shared/Components/Toolbars/MgGridToolbarTemplate.razor @@ -0,0 +1,148 @@ +@using AyCode.Blazor.Components.Components.Grids +@using AyCode.Core.Loggers; +@using AyCode.Core.Extensions +@using AyCode.Core.Helpers +@using AyCode.Utils.Extensions +@using FruitBank.Common.Dtos +@using FruitBank.Common.Entities +@using FruitBank.Common.Models +@using FruitBankHybrid.Shared.Components.Grids.ShippingItems +@using FruitBankHybrid.Shared.Databases +@using FruitBankHybrid.Shared.Services.Loggers; +@using FruitBankHybrid.Shared.Services.SignalRs + +@inject IEnumerable LogWriters +@inject FruitBankSignalRClient FruitBankSignalRClient +@inject LoggedInModel LoggedInModel; + + + + + + + + + + @if (!OnlyGridEditTools) + { + + + + + + + + + + + + + + @ToolbarItemsExtended + } + + +@code { + [Parameter] public bool OnlyGridEditTools { get; set; } = false; + [Parameter] public IMgGridBase Grid { get; set; } = null!; + [Parameter] public RenderFragment? ToolbarItemsExtended { get; set; } + [Parameter] public EventCallback OnReloadDataClick { get; set; } + + public ToolbarBase Toolbar { get; set; } = null!; + const string ExportFileName = "ExportResult"; + + private bool _isReloadInProgress; + + /// + /// Whether the grid is currently in edit mode (New or Edit) + /// + private bool IsEditing => Grid?.EditState != MgEditState.None; + + /// + /// Whether the grid is currently syncing data + /// + private bool IsSyncing => Grid?.IsSyncing ?? false; + + /// + /// Whether there is a focused row in the grid + /// + private bool HasFocusedRow => Grid?.GetFocusedRowIndex() >= 0; + + private LoggerClient _logger = null!; + + protected override void OnInitialized() + { + _logger = new LoggerClient(LogWriters.ToArray()); + } + + async Task ReloadData_Click(ToolbarItemClickEventArgs e) + { + _isReloadInProgress = true; + try + { + await OnReloadDataClick.InvokeAsync(e); + } + finally + { + _isReloadInProgress = false; + } + } + + async Task NewItem_Click() + { + await Grid.StartEditNewRowAsync(); + } + + async Task EditItem_Click() + { + await Grid.StartEditRowAsync(Grid.GetFocusedRowIndex()); + } + + void DeleteItem_Click() + { + Grid.ShowRowDeleteConfirmation(Grid.GetFocusedRowIndex()); + } + + async Task SaveItem_Click() + { + await Grid.SaveChangesAsync(); + } + + async Task CancelEdit_Click() + { + await Grid.CancelEditAsync(); + } + + 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); + } +} \ No newline at end of file