Skip to content

feat(picklist): support lazy loading and virtual scroll on source/target lists - #1412

Open
rene-schakmann wants to merge 2 commits into
openng-org:mainfrom
rene-schakmann:feat/issue-940-picklist-lazy-loading
Open

feat(picklist): support lazy loading and virtual scroll on source/target lists#1412
rene-schakmann wants to merge 2 commits into
openng-org:mainfrom
rene-schakmann:feat/issue-940-picklist-lazy-loading

Conversation

@rene-schakmann

Copy link
Copy Markdown

Summary

Closes #940.

Adds lazy-loading / virtual-scroll support to PickList, mirroring the pattern Listbox already uses via its Scroller integration, so huge source (and optionally target) datasets can be fetched in chunks on scroll instead of all at once.

  • sourceLazy / targetLazy — enable lazy interaction mode per list.
  • sourceVirtualScroll / targetVirtualScroll (+ ...VirtualScrollItemSize, ...VirtualScrollOptions) — render either list through the existing Scroller.
  • onSourceLazyLoad / onTargetLazyLoad — emitted with { first, last } so the consumer can fetch and patch in the next chunk.
  • New "Lazy Load" docs demo (apps/docs/doc/picklist/lazy-doc.ts) simulating a backend fetch for a 10k-item source list.

Test plan

  • ng test optimus-ui --include='**/picklist/**' — 79/79 passing, including 6 new tests covering the lazy/virtualScroll wiring (default values, per-list forwarding to the inner Listbox, source/target independence, and onSourceLazyLoad/onTargetLazyLoad emission).
  • Manually verified the new "Lazy Load" doc demo in the browser (docs dev server) — no console errors, initial chunk loads correctly. Screenshot below.

PickList Lazy Load demo


Co-authored by Claude (Anthropic) — implementation, tests, and docs demo were written by Claude Code under human review.

rene.schakmann added 2 commits July 27, 2026 21:23
…get lists

Adds sourceLazy/targetLazy, sourceVirtualScroll/targetVirtualScroll (+ item
size and options) inputs and onSourceLazyLoad/onTargetLazyLoad outputs,
wired through to the existing Listbox/Scroller lazy-load machinery so huge
datasets can be fetched in chunks instead of all at once.

Closes openng-org#940
…zy demo

sourceStyle/targetStyle need object bindings, not plain string attributes,
and virtual-scroll placeholder rows must be objects (not undefined) so
Listbox's option.optionGroup access doesn't throw before data arrives.
@geromegrignon geromegrignon added this to the Catch-up milestone Jul 28, 2026
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.

PickList: Add the ability for fetching items on the source with Lazy loading

2 participants