solid-virtual.test.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { expect, test } from "bun:test"
  2. import { createVirtualizer } from "@tanstack/solid-virtual"
  3. import { createRoot, createSignal } from "solid-js"
  4. test("reactive count updates preserve measured row sizes", () => {
  5. createRoot((dispose) => {
  6. const [count, setCount] = createSignal(2)
  7. const virtualizer = createVirtualizer<HTMLDivElement, HTMLDivElement>({
  8. get count() {
  9. return count()
  10. },
  11. getScrollElement: () => null,
  12. estimateSize: () => 60,
  13. initialRect: { width: 800, height: 600 },
  14. })
  15. expect(virtualizer.getTotalSize()).toBe(120)
  16. virtualizer.resizeItem(0, 100)
  17. expect(virtualizer.getTotalSize()).toBe(160)
  18. setCount(3)
  19. expect(virtualizer.itemSizeCache.get(0)).toBe(100)
  20. expect(virtualizer.getTotalSize()).toBe(220)
  21. dispose()
  22. })
  23. })
  24. test("logical scroll offset includes pending measurement adjustments", () => {
  25. createRoot((dispose) => {
  26. const virtualizer = createVirtualizer<HTMLDivElement, HTMLDivElement>({
  27. count: 2,
  28. getScrollElement: () => null,
  29. estimateSize: () => 60,
  30. initialOffset: 100,
  31. initialRect: { width: 800, height: 60 },
  32. })
  33. virtualizer.getTotalSize()
  34. virtualizer.resizeItem(0, 100)
  35. expect(virtualizer.scrollOffset).toBe(100)
  36. expect(virtualizer.getLogicalScrollOffset()).toBe(140)
  37. dispose()
  38. })
  39. })