using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Components; using BlaServApp.UI.Components; using BlaServApp.UI.Data; namespace BlaServApp.UI.Components { public partial class DataPager { #region Protected Fields protected bool _showLoading = false; #endregion Protected Fields #region Private Properties private int endPage { get { int answ = (int)(currPage / numPages) * numPages + numPages; 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 numPages { get; set; } = 10; private int prevBlock { get { int answ = currPage - numPages; answ = answ > 0 ? answ : 1; return answ; } } // calcola un set 1..numPOages centrato sulla pagina corrente... private int startPage { get { int answ = (int)(currPage / numPages) * numPages; answ = answ > 0 ? answ : 1; return answ; } } [Inject] private Services.BlazorTimer Timer { get; set; } #endregion Private Properties #region Protected Properties protected int _numPage { get; set; } = 1; protected int _numRecord { get; set; } = 10; protected int percLoading { get; set; } = 0; #endregion Protected Properties #region Public Properties [Parameter] public int currPage { get { return _numPage; } set { bool doReport = !_numPage.Equals(value); if (doReport) { _numPage = value; reportChangePage(); } } } [Parameter] public EventCallback numPageChanged { get; set; } [Parameter] public EventCallback numRecordChanged { get; set; } [Parameter] public int PageSize { get { return _numRecord; } set { bool doReport = !_numRecord.Equals(value); if (doReport) { _numRecord = value; reportChange(); } } } [Parameter] public bool showLoading { get { return _showLoading; } set { if (value) { Random random = new Random(); percLoading = random.Next(30, 90); } else { percLoading = 5; } _showLoading = value; } } [Parameter] public int totalCount { get; set; } = 0; #endregion Public Properties #region Private Methods private void reportChange() { numRecordChanged.InvokeAsync(PageSize); } private void reportChangePage() { numPageChanged.InvokeAsync(currPage); } #endregion Private Methods #region Protected Methods protected void HandlePaginationItemClick(string page) { currPage = int.Parse(page); } protected override async Task OnInitializedAsync() { await Task.Run(() => showLoading = false); } #endregion Protected Methods } }