MCPcopy Index your code
hub / github.com/TanStack/virtual / createVirtualizerBase

Function createVirtualizerBase

packages/angular-virtual/src/index.ts:28–82  ·  view source on GitHub ↗
(
  options: Signal<VirtualizerOptions<TScrollElement, TItemElement>>,
)

Source from the content-addressed store, hash-verified

26export * from './types'
27
28function createVirtualizerBase<
29 TScrollElement extends Element | Window,
30 TItemElement extends Element,
31>(
32 options: Signal<VirtualizerOptions<TScrollElement, TItemElement>>,
33): AngularVirtualizer<TScrollElement, TItemElement> {
34 let virtualizer: Virtualizer<TScrollElement, TItemElement>
35 function lazyInit() {
36 virtualizer ??= new Virtualizer(options())
37 return virtualizer
38 }
39
40 const virtualizerSignal = signal(virtualizer!, { equal: () => false })
41
42 // two-way sync options
43 effect(
44 () => {
45 const _options = options()
46 lazyInit()
47 virtualizerSignal.set(virtualizer)
48 virtualizer.setOptions({
49 ..._options,
50 onChange: (instance, sync) => {
51 // update virtualizerSignal so that dependent computeds recompute.
52 virtualizerSignal.set(instance)
53 _options.onChange?.(instance, sync)
54 },
55 })
56 // update virtualizerSignal so that dependent computeds recompute.
57 virtualizerSignal.set(virtualizer)
58 },
59 { allowSignalWrites: true },
60 )
61
62 const scrollElement = computed(() => options().getScrollElement())
63 // let the virtualizer know when the scroll element is changed
64 effect(
65 () => {
66 const el = scrollElement()
67 if (el) {
68 untracked(virtualizerSignal)._willUpdate()
69 }
70 },
71 { allowSignalWrites: true },
72 )
73
74 let cleanup: () => void | undefined
75 afterNextRender(() => (virtualizer ?? lazyInit())._didMount(), {
76 phase: AfterRenderPhase.Read,
77 })
78
79 inject(DestroyRef).onDestroy(() => cleanup?.())
80
81 return proxyVirtualizer(virtualizerSignal, lazyInit)
82}
83
84export function injectVirtualizer<
85 TScrollElement extends Element,

Callers 2

injectVirtualizerFunction · 0.70
injectWindowVirtualizerFunction · 0.70

Calls 2

proxyVirtualizerFunction · 0.90
lazyInitFunction · 0.85

Tested by

no test coverage detected