Skip to content

Commit 6ae7202

Browse files
committed
refactor: new2
1 parent 4b29192 commit 6ae7202

File tree

3 files changed

+165
-163
lines changed

3 files changed

+165
-163
lines changed

src/lib/new2/SizeAndPositionManager.ts

Lines changed: 53 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import { ALIGNMENT, type SizingCalculatorFn, type VLRange } from './index.js';
99

10+
// TODO: convert this to an Array
1011
type 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

Comments
 (0)