77
88import { ALIGNMENT , type SizingCalculatorFn , type VLRange } from './index.js' ;
99
10+ // TODO: convert this to an Array
1011type SizeAndOffsetData = Record <
1112 number ,
1213 {
@@ -23,8 +24,10 @@ export default class SizeAndPositionManager {
2324 // size of the row in px, either calculate or constant
2425 private sizeCalculatorFn ?: SizingCalculatorFn ;
2526 private averageSize ?: number ;
26- private itemSizeAndPositionData : SizeAndOffsetData = { } ;
27+ itemSizeAndPositionData : SizeAndOffsetData = { } ;
2728 private lastMeasuredIndex : number = - 1 ;
29+
30+
2831 private totalSize ?: number ;
2932
3033 constructor (
@@ -215,10 +218,51 @@ export default class SizeAndPositionManager {
215218 return Math . max ( 0 , Math . min ( totalSize - containerSize , idealOffset ) ) ;
216219 }
217220
221+ // // returns an index range
222+ // getVisibleRangeOffsets(
223+ // containerSize: number = 0,
224+ // scrollbarOffset: number
225+ // ): VLRange {
226+ // const totalSize = this.getTotalSize();
227+
228+ // if (totalSize === 0) {
229+ // return { start: 0, end: 0 };
230+ // }
231+
232+ // const maxOffset = scrollbarOffset + containerSize;
233+ // // let startIdx = this.findNearestItem(scrollbarOffset);
234+
235+ // if (startIdx === undefined) {
236+ // throw Error(`Invalid offset ${scrollbarOffset} specified`);
237+ // }
238+
239+ // const datum = this.getSizeAndPositionForIndex(startIdx);
240+ // scrollbarOffset = datum.offset + datum.size;
241+
242+ // let endIdx = startIdx;
243+
244+ // while (scrollbarOffset < maxOffset && endIdx < this.model.length - 1) {
245+ // endIdx++;
246+ // scrollbarOffset += this.getSizeAndPositionForIndex(endIdx).size;
247+ // }
248+
249+ // if (windowOverPaddingCount) {
250+ // startIdx = Math.max(0, startIdx - windowOverPaddingCount);
251+ // endIdx = Math.min(endIdx + windowOverPaddingCount, this.model.length - 1);
252+ // }
253+
254+ // return {
255+ // start: startIdx,
256+ // end: endIdx
257+ // };
258+ // }
259+
260+
261+
218262 // returns an index range
219- getVisibleRange (
263+ getVisibleRangeIndex (
220264 containerSize : number = 0 ,
221- offset : number ,
265+ scrollbarOffset : number ,
222266 windowOverPaddingCount : number
223267 ) : VLRange {
224268 const totalSize = this . getTotalSize ( ) ;
@@ -227,21 +271,21 @@ export default class SizeAndPositionManager {
227271 return { start : 0 , end : 0 } ;
228272 }
229273
230- const maxOffset = offset + containerSize ;
231- let startIdx = this . findNearestItem ( offset ) ;
274+ const maxOffset = scrollbarOffset + containerSize ;
275+ let startIdx = this . findNearestItem ( scrollbarOffset ) ;
232276
233277 if ( startIdx === undefined ) {
234- throw Error ( `Invalid offset ${ offset } specified` ) ;
278+ throw Error ( `Invalid offset ${ scrollbarOffset } specified` ) ;
235279 }
236280
237281 const datum = this . getSizeAndPositionForIndex ( startIdx ) ;
238- offset = datum . offset + datum . size ;
282+ scrollbarOffset = datum . offset + datum . size ;
239283
240284 let endIdx = startIdx ;
241285
242- while ( offset < maxOffset && endIdx < this . model . length - 1 ) {
286+ while ( scrollbarOffset < maxOffset && endIdx < this . model . length - 1 ) {
243287 endIdx ++ ;
244- offset += this . getSizeAndPositionForIndex ( endIdx ) . size ;
288+ scrollbarOffset += this . getSizeAndPositionForIndex ( endIdx ) . size ;
245289 }
246290
247291 if ( windowOverPaddingCount ) {
0 commit comments