Skip to content

Omnibus v1.1.0-beta.071

Latest

Choose a tag to compare

@github-actions github-actions released this 28 Jun 17:58

v1.1.0-beta.071 - perf: virtualize the library grid + list so scrolling stays smooth as it grows

🖼️ Windowed rendering for both library views

  • The library rendered EVERY accumulated card in the DOM (infinite scroll appended without bound) and re-rendered the whole list on each page-append, so scrolling got laggier the deeper you went — a client-side cost the earlier query/index work couldn't touch. Switched both views to react-virtuoso so only the on-screen rows exist in the DOM:
    • Grid view → VirtuosoGrid (useWindowScroll) with the existing responsive grid classes as listClassName; the card JSX is unchanged, just moved into itemContent.
    • List view → TableVirtuoso (useWindowScroll) with a module-scoped components object (stable identity so rows don't remount) and a context carrying selection state for per-row click/highlight; header, cells, badges and actions unchanged.

🔁 endReached replaces the IntersectionObserver

  • Infinite loading is now driven by Virtuoso's endReached (still paused in selection mode, matching the old sentinel that was hidden while selecting). Removed the observer/lastElementRef; the "Loading more…" footer now keys off loadingMore.

📦 Dependency

  • Added react-virtuoso@^4.18.10 (dependencies + package-lock, installed with --legacy-peer-deps to match the existing next-auth/nodemailer peer setup so Docker's npm ci resolves it).

✅ Verification

  • tsc clean; eslint . 0 errors; vitest 298 passed; next build compiled + generated all 80 pages (incl. /library). Visual/interaction behavior (grid columns per breakpoint, sticky list header, row selection, scroll-to-top on filter change) not auto-verifiable — confirmed buildable; needs an eyeball in the running container.