using Microsoft.AspNetCore.Components; namespace EgwCoreLib.Razor { public partial class DataPager : ComponentBase { #region Public Enums public enum ObjSize { small, standard, large } #endregion Public Enums #region Public Properties /// /// Num pagina correntemente selezioanta /// [Parameter] public int currPage { get { return _numPage; } set { bool doReport = !_numPage.Equals(value); if (doReport) { _numPage = value; reportChangePage(); } } } /// /// Dimensione controlli x resize /// [Parameter] public ObjSize DisplSize { get; set; } = ObjSize.standard; /// /// Export (csv) abilitato /// [Parameter] public bool exportEnabled { get; set; } = false; /// /// Evento richiesta export /// [Parameter] public EventCallback exportRequested { get; set; } /// /// Filename x export /// [Parameter] public string fileName { get; set; } = ""; /// /// Evento cambio pagina nel paginatore /// [Parameter] public EventCallback numPageChanged { get; set; } /// /// Massimo numero di pagine da mostrare (x display piccoli) /// [Parameter] public int NumPages { get; set; } = 10; /// /// Test btn vai a inizio /// [Parameter] public string TxtStart { get; set; } = "Start"; /// /// Test btn vai a fine /// [Parameter] public string TxtEnd { get; set; } = "End"; /// /// Test btn vai a PrevBlock /// [Parameter] public string TxtPrev { get; set; } = "Prev"; /// /// Test btn vai a NextBlock /// [Parameter] public string TxtNext{ get; set; } = "Next"; /// /// PageSize = Num record da mostrare cambiato /// [Parameter] public EventCallback numRecordChanged { get; set; } /// /// Attuale PageSize /// [Parameter] public int PageSize { get { return _numRecord; } set { bool doReport = !_numRecord.Equals(value); if (doReport) { _numRecord = value; reportChange(); } } } /// /// Elenco dei PageSize ammessi /// [Parameter] public List PageSizeList { get; set; } = new List() { 5,10,25,50,100 }; /// /// Fase di loading /// [Parameter] public bool showLoading { get { return _showLoading; } set { if (value) { Random random = new Random(); percLoading = random.Next(30, 90); } else { percLoading = 5; } _showLoading = value; } } /// /// Totale record da mostrare /// [Parameter] public int totalCount { get; set; } = 0; #endregion Public Properties #region Public Methods public void resetCurrPage() { //await Task.Delay(1); currPage = 1; } #endregion Public Methods #region Protected Fields protected bool _showLoading = false; protected string exportDir = $"{Directory.GetCurrentDirectory()}\\temp"; #endregion Protected Fields #region Protected Properties protected int _numPage { get; set; } = 1; protected int _numRecord { get; set; } = 10; protected bool fileExist { get { return File.Exists(fullPath); } } protected string fullPath { get => $"{exportDir}\\{fileName}"; } private string cssSize { get { string answ = ""; switch (DisplSize) { case ObjSize.small: answ = "small"; break; case ObjSize.standard: break; case ObjSize.large: answ = "large"; break; default: break; } return answ; } } protected int percLoading { get; set; } = 0; #endregion Protected Properties #region Protected Methods protected string cssActive(int numPage) { string answ = ""; if (numPage == currPage) { answ = "active"; } return answ; } protected override async Task OnInitializedAsync() { await Task.Run(() => showLoading = false); } protected void PaginationItemClick(int page) { currPage = page; } #endregion Protected Methods #region Private Properties private int endPage { get { int answ = startPage + NumPages -1; answ = answ < LastPage ? answ : LastPage; return answ; } } private int LastPage { get { return Math.Max((int)Math.Ceiling(totalCount / (double)PageSize), 1); } } private int nextBlock { get { int answ = currPage + NumPages; answ = answ < LastPage ? answ : LastPage; return answ; } } private int prevBlock { get { int answ = currPage - NumPages; answ = answ > 0 ? answ : 1; return answ; } } /// /// calcola un set 1 .. NumPages centrato sulla pagina corrente... /// private int startPage { get { int answ = ((int)((currPage -1) / NumPages) ) * NumPages + 1; answ = answ > 0 ? answ : 1; return answ; } } #endregion Private Properties #region Private Methods private void reportChange() { numRecordChanged.InvokeAsync(PageSize); } private void reportChangePage() { numPageChanged.InvokeAsync(currPage); } private async Task requestSave() { showLoading = true; await Task.Delay(1); await exportRequested.InvokeAsync(currPage); showLoading = false; } #endregion Private Methods } }