Skip to content

feat(ui): keep pagination controls visible while scrolling a listing#71

Merged
jaymeklein merged 1 commit into
mainfrom
feat/sticky-pagination
Jul 20, 2026
Merged

feat(ui): keep pagination controls visible while scrolling a listing#71
jaymeklein merged 1 commit into
mainfrom
feat/sticky-pagination

Conversation

@jaymeklein

Copy link
Copy Markdown
Owner

What

Pins the pagination controls to the bottom of the viewport on the Documents and Ingestion Queue listings, so paging a long list no longer means scrolling to the very end to reach Prev/Next.

How

  • Pager gains a sticky?: boolean prop. When set, it renders sticky bottom-0 z-10 -mx-8 border-t bg-canvas px-8 py-3 — pinned to the scroll container's bottom, spanning the page's px-8 gutter (so rows can't peek beside it) with an opaque background (so they can't show through).
  • Both listings pass sticky. The pager's existing total === 0 → null guard is kept inside the component, so an empty listing renders no bar (rather than an empty pinned strip).

Notes

Verified in the running app: pinned and fully visible at every scroll position at 1080px and at 720px (the short-viewport case, where the pager was previously below the fold), opaque, no horizontal overflow, and it releases to its natural position at the end of the list. An earlier internal-scroll approach was rejected because any overflow container clips the per-row tag popover; a sticky bar clips nothing. UI typecheck clean.

Pin the pager to the bottom of the viewport on the Documents and Ingestion
Queue pages via a new sticky prop, so paging a long list no longer requires
scrolling to the end to reach Prev/Next. The bar spans the page gutter and is
opaque so rows never show beside or through it; the existing empty-listing
guard keeps a zero-result page from rendering an empty bar.
@jaymeklein
jaymeklein merged commit 6584a19 into main Jul 20, 2026
8 checks passed
@jaymeklein
jaymeklein deleted the feat/sticky-pagination branch July 20, 2026 12:02
jaymeklein pushed a commit that referenced this pull request Jul 21, 2026
Integrate the live MCP rate-limit (#70), sticky pagination (#71), and
indexing retry-failed (#72) work that landed on main.

Resolved two conflicts in the MCP layer: build_mcp_middleware keeps #70's
live rate_limit_rpm callable alongside this branch's per-user
resolve_principal, dropping the now-obsolete master_key param (auth is
DB-backed via authenticate_api_key, which already handles the master key).
The middleware tests construct TokenBucketRateLimiter with a callable to
match #70's new signature.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant