Skip to content

Pagination Standardization Contract

Canonical Contract

The monorepo standardizes list pagination on the CMS admin settings pattern:

  • Query keys: search, page (page omitted when page === 1).
  • Server-side filtering and pagination for authoritative list data.
  • Consistent controls: first / previous / page-of / next / last.
  • Out-of-range page requests are clamped to the last valid page.
  • Pagination links preserve active filters.

Default sort order

Tabular list pages default to ascending alphabetical order on the primary display column (the column users scan first for identity):

Surface kind Default sort
User / roster tables (email-first) email ascending (case-insensitive lower() where supported)
Tenant / course / theme / project tables (name-first) name or title ascending
CMS admin users (email + display name columns) displayName ascending via API default

Audit and time feeds intentionally default to newest first (created_at or equivalent descending). Do not change these to alphabetical order:

  • LMS: admin/page.tsx (recent activity), admin/audit/page.tsx, admin/users/\[id\]/page.tsx (audit tab)
  • CMS: api/admin/audit/route.ts

Theme presets merge system and custom rows, sort the combined set, then paginate so global name order matches the table.

Surface Inventory

LMS

Surface Path Pattern
Admin dashboard audit apps/lms/src/app/\[locale\]/admin/page.tsx AdminPaginationControls + server-side DB pagination
Admin users apps/lms/src/app/\[locale\]/admin/users/page.tsx AdminPaginationControls + server-side DB pagination
Admin user audit tab apps/lms/src/app/\[locale\]/admin/users/\[id\]/page.tsx AdminPaginationControls + server-side DB pagination
Admin tenants apps/lms/src/app/\[locale\]/admin/tenants/page.tsx AdminPaginationControls + server-side DB pagination
Admin courses apps/lms/src/app/\[locale\]/admin/courses/page.tsx AdminPaginationControls + server-side CMS-backed pagination
Admin audit apps/lms/src/app/\[locale\]/admin/audit/page.tsx AdminPaginationControls + server-side DB pagination
Course dashboard learners apps/lms/src/app/\[locale\]/admin/courses/\[slug\]/dashboard/page.tsx AdminPaginationControls + server-side DB pagination
Course students apps/lms/src/app/\[locale\]/admin/courses/\[slug\]/students/page.tsx AdminPaginationControls + server-side DB pagination
Course admins apps/lms/src/app/\[locale\]/admin/courses/\[slug\]/admins/page.tsx AdminPaginationControls + server-side DB pagination
Public learn catalog apps/lms/src/app/\[locale\]/learn/page.tsx Paginator with settings-style controls + server-side CMS pagination
Public blog list apps/lms/src/app/\[locale\]/blog/page.tsx Paginator with settings-style controls + server-side list pagination
Learner dashboard enrollments apps/lms/src/app/\[locale\]/learn/dashboard/page.tsx Paginator with settings-style controls + server-side DB pagination

CMS

Surface Path Pattern
Admin users apps/cms/src/components/admin/user-list.tsx PaginationControls + server-side API pagination
Admin tenants apps/cms/src/components/admin/tenant-list.tsx PaginationControls + server-side API pagination
Admin roles apps/cms/src/components/admin/role-list.tsx PaginationControls + server-side API pagination
Admin tenant settings apps/cms/src/components/admin/tenant-settings-form.tsx PaginationControls + server-side API pagination
Admin theme presets apps/cms/src/components/admin/theme-preset-list.tsx PaginationControls + server-side API pagination
Workarea projects apps/cms/src/app/\[locale\]/(workarea)/workarea/page.tsx PaginationControls + server-side API pagination
Asset manager apps/cms/src/components/workarea/asset-manager/listing-panel.tsx PaginationControls + server-side API pagination
Asset picker dialog apps/cms/src/components/widgets/shared/asset-picker-dialog.tsx PaginationControls + server-side API pagination (embedded exception)

Drift Remediation Notes

  • LMS admin list inputs now standardize on search only.
  • LMS public paginator now uses the same first/prev/page-of/next/last control model.
  • CMS tenant user manager now fetches all admin users across API pages for complete membership assignment.
  • CMS asset manager now sends explicit pageSize in list requests.
  • CMS theme preset pagination merges system + custom presets, sorts globally (by name or createdAt), then slices the page window.