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)
{
-
+
@@ -116,7 +116,7 @@
*@
-
+
}
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