@namespace Oqtane.Modules.Controls @inherits ModuleBase @typeparam TAbleItem

@if(Format == "Table") { @Header @foreach (var item in ItemList) { @Row(item) @if (Detail != null) { @Detail(item) } }
} @if(Format == "Grid") {

@Header
@foreach (var item in ItemList) {
@Row(item)
@if (Detail != null) {
@Detail(item)
} }
}
@if (_page > _maxPages) { } @if (_endPage > 1) { @for (int i = _startPage; i <= _endPage; i++) { var pager = i; } } @if (_endPage < _pages) { } @if (_endPage > 1) { Page @_page of @_pages }

@code { int _pages = 0; int _page = 1; int _maxItems; int _maxPages; int _startPage; int _endPage; [Parameter] public string Format { get; set; } [Parameter] public RenderFragment Header { get; set; } [Parameter] public RenderFragment Row { get; set; } [Parameter] public RenderFragment Detail { get; set; } [Parameter] public IEnumerable Items { get; set; } [Parameter] public string PageSize { get; set; } [Parameter] public string DisplayPages { get; set; } [Parameter] public string Class { get; set; } IEnumerable ItemList { get; set; } protected override void OnParametersSet() { if (string.IsNullOrEmpty(Format)) { Format = "Table"; } if (string.IsNullOrEmpty(Class)) { if (Format == "Table") { Class = "table table-borderless"; } else { Class = "container"; } } if (string.IsNullOrEmpty(PageSize)) { _maxItems = 10; } else { _maxItems = int.Parse(PageSize); } if (string.IsNullOrEmpty(DisplayPages)) { _maxPages = 5; } else { _maxPages = int.Parse(DisplayPages); } if (Items != null) { ItemList = Items.Skip((_page - 1) * _maxItems).Take(_maxItems); _pages = (int)Math.Ceiling(Items.Count() / (decimal)_maxItems); } SetPagerSize("forward"); } public void UpdateList(int currentPage) { ItemList = Items.Skip((currentPage - 1) * _maxItems).Take(_maxItems); _page = currentPage; StateHasChanged(); } public void SetPagerSize(string direction) { if (direction == "forward") { if (_endPage + 1 < _pages) { _startPage = _endPage + 1; } else { _startPage = 1; } if (_endPage + _maxPages < _pages) { _endPage = _startPage + _maxPages - 1; } else { _endPage = _pages; } StateHasChanged(); } else if (direction == "back") { _endPage = _startPage - 1; _startPage = _startPage - _maxPages; } } public void NavigateToPage(string direction) { if (direction == "next") { if (_page < _pages) { if (_page == _endPage) { SetPagerSize("forward"); } _page += 1; } } else if (direction == "previous") { if (_page > 1) { if (_page == _startPage) { SetPagerSize("back"); } _page -= 1; } } UpdateList(_page); } }