using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NBAManagment.Filter { public class PagedEnumerable : IFilteredEnumerable { private const int START_PAGE_NUM = 1; private readonly PageFilter pageFilter; public PagedEnumerable(IEnumerable collection, int pageSize) { this.Original = collection; pageFilter = new PageFilter(pageSize, START_PAGE_NUM); UpdateFiltered(); } public int CurrentPageItemCount => Original.Count(); public int ItemCount => Filtered.Count(); public IEnumerable Original { get; set; } public IEnumerable Filtered { get; private set; } public int PageCount => pageFilter.GetPageCount(Original); public int PageSize { get => pageFilter.PageSize; set { pageFilter.PageSize = value; UpdateFiltered(); } } public int CurrentPageNum { get => pageFilter.CurrentPageNum; set { if (value > PageCount) { pageFilter.CurrentPageNum = PageCount; } else if (value <= 0) { pageFilter.CurrentPageNum = 1; } else { pageFilter.CurrentPageNum = value; } UpdateFiltered(); } } public void NextPage() { CurrentPageNum++; UpdateFiltered(); } public void PriviusPage() { CurrentPageNum--; UpdateFiltered(); } public IEnumerator GetEnumerator() { return Filtered.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return Filtered.GetEnumerator(); } private void UpdateFiltered() { Filtered = pageFilter.Use(Original); } } }