feat(centralui): OffsetPager reusable pagination component (T35a)
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
@namespace ZB.MOM.WW.ScadaBridge.CentralUI.Components.Shared
|
||||
|
||||
@* T35a — reusable offset-pagination bar. Purely presentational: the host page
|
||||
owns page-number state, query execution, and the HasNextPage decision.
|
||||
Parameters: Page, PageChanged, HasNextPage, TotalCount, PageSize, Disabled. *@
|
||||
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<button class="btn btn-outline-secondary btn-sm"
|
||||
data-test="pager-prev"
|
||||
disabled="@(!HasPrev || Disabled)"
|
||||
@onclick="OnPrevAsync">
|
||||
Previous
|
||||
</button>
|
||||
|
||||
<span data-test="pager-summary">@SummaryText</span>
|
||||
|
||||
<button class="btn btn-outline-secondary btn-sm"
|
||||
data-test="pager-next"
|
||||
disabled="@(!HasNextPage || Disabled)"
|
||||
@onclick="OnNextAsync">
|
||||
Next
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
[Parameter] public int Page { get; set; } = 1;
|
||||
[Parameter] public EventCallback<int> PageChanged { get; set; }
|
||||
[Parameter] public bool HasNextPage { get; set; }
|
||||
[Parameter] public int? TotalCount { get; set; }
|
||||
[Parameter] public int PageSize { get; set; }
|
||||
[Parameter] public bool Disabled { get; set; }
|
||||
|
||||
private bool HasPrev => Page > 1;
|
||||
|
||||
private int? PageCount =>
|
||||
TotalCount is { } t && PageSize > 0
|
||||
? (int)Math.Ceiling(t / (double)PageSize)
|
||||
: (int?)null;
|
||||
|
||||
private string SummaryText
|
||||
{
|
||||
get
|
||||
{
|
||||
var text = $"Page {Page}";
|
||||
if (PageCount is { } pc) text += $" of {pc}";
|
||||
if (TotalCount is { } total) text += $" · {total} total";
|
||||
return text;
|
||||
}
|
||||
}
|
||||
|
||||
private Task OnPrevAsync() => PageChanged.InvokeAsync(Page - 1);
|
||||
private Task OnNextAsync() => PageChanged.InvokeAsync(Page + 1);
|
||||
}
|
||||
Reference in New Issue
Block a user