@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);
}
}