using AyCode.Blazor.Components.Components.Grids; using AyCode.Core.Extensions; using AyCode.Core.Interfaces; using AyCode.Interfaces.Entities; using AyCode.Utils.Extensions; using DevExpress.Blazor; using FruitBank.Common.Models; using FruitBankHybrid.Shared.Services.Loggers; using FruitBankHybrid.Shared.Services.SignalRs; using Microsoft.AspNetCore.Components; using Microsoft.JSInterop; namespace FruitBankHybrid.Shared.Components.Grids; //var a = new GridDevExtremeDataSource(DataSource.AsQueryable().Where(x=>x.IsMeasurable)); public class FruitBankGridBase : MgGridBase, TDataItem, int, LoggerClient> where TDataItem : class, IId { [Inject] public required LoggedInModel LoggedInModel { get; set; } [Inject] public required IJSRuntime JSRuntime { get; set; } //[Parameter] public bool IsMasterGrid { get; set; } = false; [Parameter] public string AutoSaveLayoutName { get; set; } private bool _isFirstInitializeParameterCore; private bool _isFirstInitializeParameters; public bool PreRendered { get; set; } //public virtual Task ReloadDataFromDb(bool forceReload = false) //{ // throw new NotImplementedException(); //} protected void OnCustomizeElement(GridCustomizeElementEventArgs e) { //if (!IsMasterGrid) e.CssClass = "hideDetailButton"; if (IsMasterGrid && e.ElementType == GridElementType.DataRow && e.VisibleIndex % 2 == 1 && !e.Grid.IsRowSelected(e.VisibleIndex) && !e.Grid.IsRowFocused(e.VisibleIndex)) { e.CssClass = " alt-item"; } if (e.ElementType == GridElementType.DataRow && !LoggedInModel.IsAdministrator) { e.CssClass = "hideDetailButton"; } if (e.ElementType == GridElementType.HeaderCell) { e.Style = "background-color: #E6E6E6;"; //e.CssClass = "header-bold"; } } protected override async Task SetParametersAsyncCore(ParameterView parameters) { await base.SetParametersAsyncCore(parameters); if (!_isFirstInitializeParameterCore) { //if (typeof(TDataItem) is IId || typeof(TDataItem) is IId) KeyFieldName = "Id"; //base.DataItemDeleting = EventCallback.Factory.Create(this, OnItemDeleting); //base.EditModelSaving = EventCallback.Factory.Create(this, OnItemSaving); CustomizeElement += OnCustomizeElement; _isFirstInitializeParameterCore = true; } } protected override void OnParametersSet() { base.OnParametersSet(); if (!_isFirstInitializeParameters) { SizeMode = DevExpress.Blazor.SizeMode.Small; ShowGroupPanel = IsMasterGrid; ShowSearchBox = IsMasterGrid; ShowFilterRow = IsMasterGrid; FilterMenuButtonDisplayMode = (IsMasterGrid ? GridFilterMenuButtonDisplayMode.Never : GridFilterMenuButtonDisplayMode.Always); DetailRowDisplayMode = IsMasterGrid ? GridDetailRowDisplayMode.Auto : GridDetailRowDisplayMode.Never; DetailExpandButtonDisplayMode = IsMasterGrid ? GridDetailExpandButtonDisplayMode.Auto : GridDetailExpandButtonDisplayMode.Never; TextWrapEnabled = false; AllowSelectRowByClick = true; HighlightRowOnHover = true; AutoCollapseDetailRow = true; AutoExpandAllGroupRows = false; PagerVisible = IsMasterGrid; PageSize = IsMasterGrid ? (SizeMode == DevExpress.Blazor.SizeMode.Small ? 23 : 15) : 50; AllowColumnReorder = true; AllowGroup = IsMasterGrid; AllowSort = true; EditMode = GridEditMode.EditRow; FocusedRowEnabled = true; ColumnResizeMode = GridColumnResizeMode.NextColumn; //VirtualScrollingEnabled = IsMasterGrid; PageSizeSelectorVisible = true; if (AutoSaveLayoutName.IsNullOrWhiteSpace()) AutoSaveLayoutName = $"Grid{typeof(TDataItem).Name}"; LayoutAutoLoading = Grid_LayoutAutoLoading; LayoutAutoSaving = Grid_LayoutAutoSaving; _isFirstInitializeParameters = true; } } protected override void OnAfterRender(bool firstRender) { base.OnAfterRender(firstRender); if (firstRender) { //PreRendered = true; //StateHasChanged(); } } async Task Grid_LayoutAutoLoading(GridPersistentLayoutEventArgs e) { var masterDetailName = IsMasterGrid ? "Master" : ParentDataItem!.GetType().Name; e.Layout = await LoadLayoutFromLocalStorageAsync($"{AutoSaveLayoutName}_{masterDetailName}_AutoSave_{LoggedInModel.CustomerDto?.Id ?? 0}"); } private async Task Grid_LayoutAutoSaving(GridPersistentLayoutEventArgs e) { var masterDetailName = IsMasterGrid ? "Master" : ParentDataItem!.GetType().Name; await SaveLayoutToLocalStorageAsync(e.Layout, $"{AutoSaveLayoutName}_{masterDetailName}_AutoSave_{LoggedInModel.CustomerDto?.Id ?? 0}"); } async Task LoadLayoutFromLocalStorageAsync(string localStorageKey) { try { var json = await JSRuntime.InvokeAsync("localStorage.getItem", localStorageKey); if (!json.IsNullOrWhiteSpace()) return json.JsonTo(); } catch { // Mute exceptions for the server prerender stage } return null; } async Task SaveLayoutToLocalStorageAsync(GridPersistentLayout layout, string localStorageKey) { try { var json = layout.ToJson(); await JSRuntime.InvokeVoidAsync("localStorage.setItem", localStorageKey, json); } catch { // Mute exceptions for the server prerender stage } } } //public abstract class FruitBankObservableGridBase : MgGridBase, TDataItem, int, LoggerClient> where TDataItem : class, IId //{ }