diff --git a/packages/virtual-core/src/index.ts b/packages/virtual-core/src/index.ts index b3b4a90d..3a0c4460 100644 --- a/packages/virtual-core/src/index.ts +++ b/packages/virtual-core/src/index.ts @@ -1046,7 +1046,7 @@ export class Virtualizer< } else { const endByLane = Array(this.options.lanes).fill(null) let endIndex = measurements.length - 1 - while (endIndex > 0 && endByLane.some((val) => val === null)) { + while (endIndex >= 0 && endByLane.some((val) => val === null)) { const item = measurements[endIndex]! if (endByLane[item.lane] === null) { endByLane[item.lane] = item.end @@ -1162,7 +1162,7 @@ function calculateRange({ // Expand backward until we include all lanes' visible items // closer to the top const startPerLane = Array(lanes).fill(scrollOffset + outerSize) - while (startIndex > 0 && startPerLane.some((pos) => pos >= scrollOffset)) { + while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) { const item = measurements[startIndex]! startPerLane[item.lane] = item.start startIndex-- diff --git a/packages/virtual-core/tests/index.test.ts b/packages/virtual-core/tests/index.test.ts index 35430a57..12b49ffd 100644 --- a/packages/virtual-core/tests/index.test.ts +++ b/packages/virtual-core/tests/index.test.ts @@ -16,3 +16,16 @@ test('should return empty items for empty scroll element', () => { }) expect(virtualizer.getVirtualItems()).toEqual([]) }) + +test('should return correct total size with one item and multiple lanes', () => { + const virtualizer = new Virtualizer({ + count: 1, + lanes: 2, + estimateSize: () => 50, + getScrollElement: () => null, + scrollToFn: vi.fn(), + observeElementRect: vi.fn(), + observeElementOffset: vi.fn(), + }) + expect(virtualizer.getTotalSize()).toBe(50) +})