feat(ui): keep pagination controls visible while scrolling a listing#71
Merged
Conversation
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
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
Pagergains asticky?: booleanprop. When set, it renderssticky bottom-0 z-10 -mx-8 border-t bg-canvas px-8 py-3— pinned to the scroll container's bottom, spanning the page'spx-8gutter (so rows can't peek beside it) with an opaque background (so they can't show through).sticky. The pager's existingtotal === 0 → nullguard 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.