@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); } }