@namespace Oqtane.Modules.Controls @inherits ModuleControlBase @typeparam TableItem

@if (Toolbar == "Top") {

@if (_endPage > 1) { } @if (_page > _maxPages) { } @if (_endPage > 1) { @for (int i = _startPage; i <= _endPage; i++) { var pager = i; } } @if (_endPage < _pages) { } @if (_endPage > 1) { } @if (_endPage > 1) { Page @_page of @_pages }
} @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 (Toolbar == "Bottom") {
@if (_endPage > 1) { } @if (_page > _maxPages) { } @if (_endPage > 1) { @for (int i = _startPage; i <= _endPage; i++) { var pager = i; } } @if (_endPage < _pages) { } @if (_endPage > 1) { } @if (_endPage > 1) { Page @_page of @_pages }
}

@code { private int _pages = 0; private int _page = 1; private int _maxItems = 10; private int _maxPages = 5; private int _startPage = 0; private int _endPage = 0; [Parameter] public string Format { get; set; } [Parameter] public string Toolbar { 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; } private IEnumerable ItemList { get; set; } protected override void OnParametersSet() { if (string.IsNullOrEmpty(Format)) { Format = "Table"; } if (string.IsNullOrEmpty(Toolbar)) { Toolbar = "Top"; } if (string.IsNullOrEmpty(Class)) { if (Format == "Table") { Class = "table table-borderless"; } else { Class = "container"; } } if (!string.IsNullOrEmpty(PageSize)) { _maxItems = int.Parse(PageSize); } if (!string.IsNullOrEmpty(DisplayPages)) { _maxPages = int.Parse(DisplayPages); } _page = 1; _startPage = 0; _endPage = 0; 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); } }