@@ -118,75 +118,82 @@ export function createVirtualizedList<T extends Primitive | ObjectWithKey>(args:
118
118
return undefined ;
119
119
} ) ;
120
120
121
- const options : VirtualizerOptions < Element , Element > = mergeProps ( {
122
- get count ( ) {
123
- return count ( )
124
- } ,
125
- getScrollElement,
126
- estimateSize : estimateSize ( ) ,
127
- overscan : args ?. overscan ?? 5 ,
128
- horizontal : horizontal ( ) ,
129
- paddingStart : args ?. paddingStart ?? 0 ,
130
- paddingEnd : args ?. paddingEnd ?? 10 ,
131
- scrollPaddingStart : args ?. scrollPaddingStart ?? 0 ,
132
- scrollPaddingEnd : args ?. scrollPaddingEnd ?? 0 ,
133
- initialRect : args ?. initialRect ?? initialRect ( ) ,
134
- initialOffset : args ?. initialOffset ?? 0 ,
135
- onChange : args . onChange ,
136
- scrollToFn : args ?. scrollToFn ?? ( ( offset , { behavior } ) => {
137
- const scrollElement = getScrollElement ( ) ;
138
- if ( scrollElement ) {
139
- scrollElement . scrollTo ( {
140
- [ horizontal ( ) ? 'left' : 'top' ] : offset ,
141
- behavior,
121
+ const reactiveArgs = createMemo ( ( ) => args )
122
+
123
+ const options : ( ) => VirtualizerOptions < Element , Element > = createMemo ( ( ) => {
124
+ const currentArgs = reactiveArgs ( )
125
+
126
+ return mergeProps ( {
127
+ get count ( ) {
128
+ return count ( )
129
+ } ,
130
+ getScrollElement,
131
+ estimateSize : estimateSize ( ) ,
132
+ overscan : currentArgs ?. overscan ?? 5 ,
133
+ horizontal : horizontal ( ) ,
134
+ paddingStart : currentArgs ?. paddingStart ?? 0 ,
135
+ paddingEnd : currentArgs ?. paddingEnd ?? 10 ,
136
+ scrollPaddingStart : currentArgs ?. scrollPaddingStart ?? 0 ,
137
+ scrollPaddingEnd : currentArgs ?. scrollPaddingEnd ?? 0 ,
138
+ initialRect : currentArgs ?. initialRect ?? initialRect ( ) ,
139
+ initialOffset : currentArgs ?. initialOffset ?? 0 ,
140
+ onChange : currentArgs . onChange ,
141
+ scrollToFn : currentArgs ?. scrollToFn ?? ( ( offset , { behavior } ) => {
142
+ const scrollElement = getScrollElement ( ) ;
143
+ if ( scrollElement ) {
144
+ scrollElement . scrollTo ( {
145
+ [ horizontal ( ) ? 'left' : 'top' ] : offset ,
146
+ behavior,
147
+ } ) ;
148
+ }
149
+ } ) ,
150
+ observeElementRect : currentArgs ?. observeElementRect ?? ( ( instance , cb ) => {
151
+ const scrollElement = getScrollElement ( ) ;
152
+ if ( ! scrollElement ) return ;
153
+
154
+ const resizeObserver = new ResizeObserver ( ( ) => {
155
+ const rect = scrollElement . getBoundingClientRect ( ) ;
156
+ cb ( rect ) ;
142
157
} ) ;
143
- }
144
- } ) ,
145
- observeElementRect : args ?. observeElementRect ?? ( ( instance , cb ) => {
146
- const scrollElement = getScrollElement ( ) ;
147
- if ( ! scrollElement ) return ;
148
-
149
- const resizeObserver = new ResizeObserver ( ( ) => {
150
- const rect = scrollElement . getBoundingClientRect ( ) ;
151
- cb ( rect ) ;
152
- } ) ;
153
-
154
- resizeObserver . observe ( scrollElement ) ;
155
-
156
- return ( ) => resizeObserver . disconnect ( ) ;
157
- } ) ,
158
- observeElementOffset : args ?. observeElementOffset ?? ( ( instance , cb ) => {
159
- const scrollElement = getScrollElement ( ) ;
160
- if ( ! scrollElement ) return ;
161
-
162
- const handleScroll = ( ) => {
163
- const offset = horizontal ( )
164
- ? scrollElement . scrollLeft
165
- : scrollElement . scrollTop ;
166
- cb ( offset , true ) ;
167
- } ;
168
-
169
- scrollElement . addEventListener ( 'scroll' , handleScroll , {
170
- passive : true ,
171
- } ) ;
172
-
173
- return ( ) => scrollElement . removeEventListener ( 'scroll' , handleScroll ) ;
174
- } ) ,
175
- debug : args ?. debug ,
176
- measureElement : measureElement ( ) ,
177
- getItemKey : ( index : number ) => determineKey ( data ( ) [ index ] , index ) ,
178
- rangeExtractor : args ?. rangeExtractor ,
179
- scrollMargin : args ?. scrollMargin ,
180
- gap : args ?. gap ,
181
- indexAttribute : args ?. indexAttribute ,
182
- initialMeasurementsCache : args ?. initialMeasurementsCache ,
183
- lanes : args ?. lanes ,
184
- isScrollingResetDelay : args ?. isScrollingResetDelay ,
185
- enabled : args ?. enabled ,
186
- isRtl : args ?. isRtl ,
187
- } , args )
158
+
159
+ resizeObserver . observe ( scrollElement ) ;
160
+
161
+ return ( ) => resizeObserver . disconnect ( ) ;
162
+ } ) ,
163
+ observeElementOffset : currentArgs ?. observeElementOffset ?? ( ( instance , cb ) => {
164
+ const scrollElement = getScrollElement ( ) ;
165
+ if ( ! scrollElement ) return ;
166
+
167
+ const handleScroll = ( ) => {
168
+ const offset = horizontal ( )
169
+ ? scrollElement . scrollLeft
170
+ : scrollElement . scrollTop ;
171
+ cb ( offset , true ) ;
172
+ } ;
173
+
174
+ scrollElement . addEventListener ( 'scroll' , handleScroll , {
175
+ passive : true ,
176
+ } ) ;
177
+
178
+ return ( ) => scrollElement . removeEventListener ( 'scroll' , handleScroll ) ;
179
+ } ) ,
180
+ debug : currentArgs ?. debug ,
181
+ measureElement : measureElement ( ) ,
182
+ getItemKey : ( index : number ) => determineKey ( data ( ) [ index ] , index ) ,
183
+ rangeExtractor : currentArgs ?. rangeExtractor ,
184
+ scrollMargin : currentArgs ?. scrollMargin ,
185
+ gap : currentArgs ?. gap ,
186
+ indexAttribute : currentArgs ?. indexAttribute ,
187
+ initialMeasurementsCache : currentArgs ?. initialMeasurementsCache ,
188
+ lanes : currentArgs ?. lanes ,
189
+ isScrollingResetDelay : currentArgs ?. isScrollingResetDelay ,
190
+ enabled : currentArgs ?. enabled ,
191
+ isRtl : currentArgs ?. isRtl ,
192
+ } , currentArgs )
193
+ }
194
+ )
188
195
189
- const virtualizer = createVirtualizer ( options ) ;
196
+ const virtualizer = createMemo ( ( ) => createVirtualizer ( options ( ) ) )
190
197
191
198
const rootProps = createMemo ( ( ) => {
192
199
const defaultStyle = {
@@ -211,8 +218,8 @@ export function createVirtualizedList<T extends Primitive | ObjectWithKey>(args:
211
218
const containerId = generateId ( 'list' ) ;
212
219
const defaultStyle = {
213
220
position : 'relative' ,
214
- height : horizontal ( ) ? '100%' : `${ virtualizer . getTotalSize ( ) } px` ,
215
- width : horizontal ( ) ? `${ virtualizer . getTotalSize ( ) } px` : '100%' ,
221
+ height : horizontal ( ) ? '100%' : `${ virtualizer ( ) . getTotalSize ( ) } px` ,
222
+ width : horizontal ( ) ? `${ virtualizer ( ) . getTotalSize ( ) } px` : '100%' ,
216
223
} ;
217
224
218
225
return mergeProps ( {
@@ -239,7 +246,7 @@ export function createVirtualizedList<T extends Primitive | ObjectWithKey>(args:
239
246
'data-index' : virtualItem . index ,
240
247
key,
241
248
ref : mergeRefs ( ( el : Element ) => {
242
- if ( el ) virtualizer . measureElement ( el ) ;
249
+ if ( el ) virtualizer ( ) . measureElement ( el ) ;
243
250
} , args . itemProps ?. ref ) ,
244
251
} , args ?. itemProps ?? { } ) ;
245
252
@@ -273,7 +280,7 @@ export function createVirtualizedList<T extends Primitive | ObjectWithKey>(args:
273
280
} ,
274
281
items : itemWrapper ,
275
282
get item ( ) {
276
- return virtualizer . getVirtualItems ( )
283
+ return virtualizer ( ) . getVirtualItems ( )
277
284
}
278
285
} ;
279
286
}
0 commit comments