2c353f2e7f
- Customer validation now accepts Mobile Phone as a valid contact method; previously only Email or Phone satisfied the requirement - Create customer hint text updated to match the new validation rule - Pagination page-size dropdown gets min-width: 5rem so the number has breathing room from the caret arrow across all paginated lists Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
87 lines
3.8 KiB
Plaintext
87 lines
3.8 KiB
Plaintext
@using PowderCoating.Application.DTOs.Common
|
|
@model dynamic
|
|
|
|
@if (Model.TotalCount > 0)
|
|
{
|
|
var request = Context.Request;
|
|
var queryParams = request.Query.ToDictionary(k => k.Key, v => v.Value.ToString());
|
|
|
|
string BuildUrl(int page, int? pageSize = null)
|
|
{
|
|
var urlParams = new Dictionary<string, string>(queryParams);
|
|
urlParams["pageNumber"] = page.ToString();
|
|
if (pageSize.HasValue)
|
|
{
|
|
urlParams["pageSize"] = pageSize.Value.ToString();
|
|
}
|
|
var queryString = string.Join("&", urlParams.Select(kvp => $"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}"));
|
|
return $"{request.Path}?{queryString}";
|
|
}
|
|
|
|
<div class="row mt-4">
|
|
<div class="col-md-6">
|
|
<div class="d-flex align-items-center">
|
|
<span class="me-2">Showing @Model.StartIndex-@Model.EndIndex of @Model.TotalCount results</span>
|
|
<span class="me-2">|</span>
|
|
<label class="me-2 mb-0">Page size:</label>
|
|
<select class="form-select form-select-sm w-auto" style="min-width: 5rem;" onchange="changePageSize(this.value)">
|
|
<option value="10" selected="@(Model.PageSize == 10)">10</option>
|
|
<option value="25" selected="@(Model.PageSize == 25)">25</option>
|
|
<option value="50" selected="@(Model.PageSize == 50)">50</option>
|
|
<option value="100" selected="@(Model.PageSize == 100)">100</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<nav aria-label="Page navigation">
|
|
<ul class="pagination justify-content-end mb-0">
|
|
<!-- First Page -->
|
|
<li class="page-item @(!Model.HasPreviousPage ? "disabled" : "")">
|
|
<a class="page-link" href="@BuildUrl(1)" aria-label="First">
|
|
<i class="bi bi-chevron-double-left"></i>
|
|
</a>
|
|
</li>
|
|
|
|
<!-- Previous Page -->
|
|
<li class="page-item @(!Model.HasPreviousPage ? "disabled" : "")">
|
|
<a class="page-link" href="@BuildUrl(Model.PageNumber - 1)" aria-label="Previous">
|
|
<i class="bi bi-chevron-left"></i>
|
|
</a>
|
|
</li>
|
|
|
|
@{
|
|
// Calculate page range to show (5 pages at a time)
|
|
var startPage = Math.Max(1, Model.PageNumber - 2);
|
|
var endPage = Math.Min(Model.TotalPages, startPage + 4);
|
|
if (endPage - startPage < 4)
|
|
{
|
|
startPage = Math.Max(1, endPage - 4);
|
|
}
|
|
|
|
for (var i = startPage; i <= endPage; i++)
|
|
{
|
|
<li class="page-item @(i == Model.PageNumber ? "active" : "")">
|
|
<a class="page-link" href="@BuildUrl(i)">@i</a>
|
|
</li>
|
|
}
|
|
}
|
|
|
|
<!-- Next Page -->
|
|
<li class="page-item @(!Model.HasNextPage ? "disabled" : "")">
|
|
<a class="page-link" href="@BuildUrl(Model.PageNumber + 1)" aria-label="Next">
|
|
<i class="bi bi-chevron-right"></i>
|
|
</a>
|
|
</li>
|
|
|
|
<!-- Last Page -->
|
|
<li class="page-item @(!Model.HasNextPage ? "disabled" : "")">
|
|
<a class="page-link" href="@BuildUrl(Model.TotalPages)" aria-label="Last">
|
|
<i class="bi bi-chevron-double-right"></i>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
}
|