FruitBankHybridApp/FruitBankHybrid.Shared/Components/Toolbars/MgGridToolbarTemplate.razor

162 lines
5.0 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
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject LoggedInModel LoggedInModel;
<ToolbarBase @ref="Toolbar" Grid="Grid" ItemRenderStyleMode="ToolbarRenderStyleMode.Plain">
<DxToolbarItem Text="New" Click="NewItem_Click" IconCssClass="grid-new-row"
Visible="@(!IsEditing)" Enabled="@(!IsSyncing)" />
<DxToolbarItem Text="Edit" Click="EditItem_Click" IconCssClass="grid-edit-row"
Visible="@(!IsEditing)" Enabled="@(HasFocusedRow && !IsSyncing)" />
<DxToolbarItem Text="Delete" Click="DeleteItem_Click" IconCssClass="grid-delete-row"
Visible="@(!IsEditing)" Enabled="@(LoggedInModel.IsDeveloper && HasFocusedRow && !IsSyncing)" />
<DxToolbarItem Text="Save" Click="SaveItem_Click" IconCssClass="grid-save"
Visible="@IsEditing" RenderStyle="ButtonRenderStyle.Primary" />
<DxToolbarItem Text="Cancel" Click="CancelEdit_Click" IconCssClass="grid-cancel"
Visible="@IsEditing" RenderStyle="ButtonRenderStyle.Secondary" />
@if (!OnlyGridEditTools)
{
<DxToolbarItem Text="Prev Row" BeginGroup="true" Click="PrevRow_Click" IconCssClass="grid-chevron-up"
Visible="@(!IsEditing)" Enabled="@(HasFocusedRow && !IsSyncing)" />
<DxToolbarItem Text="Next Row" Click="NextRow_Click" IconCssClass="grid-chevron-down"
Visible="@(!IsEditing)" Enabled="@(HasFocusedRow && !IsSyncing)" />
<DxToolbarItem Text="Column Chooser" BeginGroup="true" Click="ColumnChooserItem_Click" IconCssClass="grid-column-chooser"
Visible="@(!IsEditing)"/>
<DxToolbarItem Text="Export" IconCssClass="grid-export"
Visible="@(!IsEditing)" Enabled="@(LoggedInModel.IsAdministrator && HasFocusedRow)">
<Items>
<DxToolbarItem Text="To CSV" Click="ExportCsvItem_Click" IconCssClass="grid-export-xlsx"/>
<DxToolbarItem Text="To XLSX" Click="ExportXlsxItem_Click" IconCssClass="grid-export-xlsx"/>
<DxToolbarItem Text="To XLS" Click="ExportXlsItem_Click" IconCssClass="grid-export-xlsx"/>
<DxToolbarItem Text="To PDF" Click="ExportPdfItem_Click" IconCssClass="grid-export-pdf"/>
</Items>
</DxToolbarItem>
<DxToolbarItem Text="Reload data" BeginGroup="true" Click="ReloadData_Click" IconCssClass="grid-refresh"
Visible="@(!IsEditing)" Enabled="@(!IsSyncing && !_isReloadInProgress)"/>
<DxToolbarItem BeginGroup="true">
</DxToolbarItem>
@ToolbarItemsExtended
}
</ToolbarBase>
@code {
[Parameter] public bool OnlyGridEditTools { get; set; } = false;
[Parameter] public IMgGridBase Grid { get; set; } = null!;
[Parameter] public RenderFragment? ToolbarItemsExtended { get; set; }
[Parameter] public EventCallback<ToolbarItemClickEventArgs> OnReloadDataClick { get; set; }
public ToolbarBase Toolbar { get; set; } = null!;
const string ExportFileName = "ExportResult";
private bool _isReloadInProgress;
/// <summary>
/// Whether the grid is currently in edit mode (New or Edit)
/// </summary>
private bool IsEditing => Grid?.GridEditState != MgGridEditState.None;
/// <summary>
/// Whether the grid is currently syncing data
/// </summary>
private bool IsSyncing => Grid?.IsSyncing ?? false;
/// <summary>
/// Whether there is a focused row in the grid
/// </summary>
private bool HasFocusedRow => Grid?.GetFocusedRowIndex() >= 0;
private LoggerClient<GridShippingItemTemplate> _logger = null!;
protected override void OnInitialized()
{
_logger = new LoggerClient<GridShippingItemTemplate>(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 PrevRow_Click()
{
Grid.StepPrevRow();
}
void NextRow_Click()
{
Grid.StepNextRow();
}
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);
}
}