148 lines
4.4 KiB
Plaintext
148 lines
4.4 KiB
Plaintext
@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<IAcLogWriterClientBase> LogWriters
|
|
@inject FruitBankSignalRClient FruitBankSignalRClient
|
|
@inject LoggedInModel LoggedInModel;
|
|
|
|
<ToolbarBase @ref="Toolbar" Grid="Grid" ItemRenderStyleMode="ToolbarRenderStyleMode.Plain">
|
|
<DxToolbarItem Text="New" Click="NewItem_Click" IconCssClass="grid-toolbar-new" Enabled="LoggedInModel.IsAdministrator" />
|
|
<DxToolbarItem Text="Edit" Click="EditItem_Click" IconCssClass="grid-toolbar-edit" Enabled="@(LoggedInModel.IsAdministrator && EditItemsEnabled)" />
|
|
<DxToolbarItem Text="Delete" Click="DeleteItem_Click" IconCssClass="grid-toolbar-delete" Enabled="@(LoggedInModel.IsDeveloper && EditItemsEnabled)" />
|
|
<DxToolbarItem Text="Column Chooser" BeginGroup="true" Click="ColumnChooserItem_Click" IconCssClass="grid-toolbar-column-chooser" />
|
|
<DxToolbarItem Text="Export" IconCssClass="grid-toolbar-export" Enabled="@(LoggedInModel.IsAdministrator && EditItemsEnabled)">
|
|
<Items>
|
|
<DxToolbarItem Text="To CSV" Click="ExportCsvItem_Click" />
|
|
<DxToolbarItem Text="To XLSX" Click="ExportXlsxItem_Click" />
|
|
<DxToolbarItem Text="To XLS" Click="ExportXlsItem_Click" />
|
|
<DxToolbarItem Text="To PDF" Click="ExportPdfItem_Click" />
|
|
</Items>
|
|
</DxToolbarItem>
|
|
<DxToolbarItem Text="Reload data" BeginGroup="true" Click="ReloadData_Click" Enabled="@BtnReloadDataEnabled" />
|
|
<DxToolbarItem BeginGroup="true">
|
|
</DxToolbarItem>
|
|
|
|
@ToolbarItemsExtended
|
|
|
|
</ToolbarBase>
|
|
|
|
@code {
|
|
[Parameter] public IGrid Grid { get; set; }
|
|
[Parameter] public RenderFragment? ToolbarItemsExtended { get; set; }
|
|
[Parameter] public EventCallback<ToolbarItemClickEventArgs> OnReloadDataClick { get; set; }
|
|
|
|
public ToolbarBase Toolbar { get; set; }
|
|
const string ExportFileName = "ExportResult";
|
|
|
|
private bool _isReloadInProgress;
|
|
private bool _isGridSyncing;
|
|
private IMgGridBase? _mgGrid;
|
|
|
|
/// <summary>
|
|
/// Reload button is enabled only when no sync operation is in progress
|
|
/// </summary>
|
|
public bool BtnReloadDataEnabled => !_isReloadInProgress && !_isGridSyncing;
|
|
|
|
public bool EditItemsEnabled { get; set; } = true;
|
|
private LoggerClient<GridShippingItemTemplate> _logger;
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
_logger = new LoggerClient<GridShippingItemTemplate>(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);
|
|
}
|
|
} |