Pagination, Search, and Sorting
Backend
Query Parameters
All list endpoints accept:
page(int, default: 1) — current page numberpageSize(int, default: 10) — items per pagesearch(string?, optional) — text to filter resultssortBy(string, default varies) — field name to sort bysortDirection(string, default: "asc") —ascordesc
Default Sort Orders
- Patients: by
lastNamethenfirstName - Doctors: by
specialtythenlastName - Exams: by
scheduledDate
Store Implementation
public (IReadOnlyList<T> Items, int TotalCount) GetPaged(int page, int pageSize, string sortBy, string sortDirection)
{
var totalCount = _collection.Count();
var items = ApplySort(_collection.FindAll(), sortBy, sortDirection)
.Skip((page - 1) * pageSize).Take(pageSize).ToList();
return (items, totalCount);
}
public (IReadOnlyList<T> Items, int TotalCount) SearchPaged(string search, int page, int pageSize, string sortBy, string sortDirection)
{
var filtered = _collection.FindAll()
.Where(item => /* case-insensitive string matching on relevant fields */)
.ToList();
var totalCount = filtered.Count;
var items = ApplySort(filtered, sortBy, sortDirection)
.Skip((page - 1) * pageSize).Take(pageSize).ToList();
return (items, totalCount);
}
Response Structure
public record {Entity}ListResponse(
IReadOnlyList<{Entity}Response> Items,
PaginationInfo Pagination,
SortInfo Sort,
IReadOnlyList<Link> Links);
Pagination Links
Use PaginationLinks.Build(basePath, page, pageSize, totalPages, search, sortBy, sortDirection, additionalLinks).
Frontend
List Page Pattern
- State:
page,pageSize,search,sortBy,sortDirection,data. - Fetch with query params appended to the HATEOAS-discovered base URL.
- MUI
TablePaginationfor page navigation. - MUI
TextField+Buttonfor search input. - MUI
TableSortLabelon column headers for sort toggle. - Clicking a column header cycles: default → asc → desc.
微信扫一扫