( itemKeys: readonly string[], heightCache: ReadonlyMap<string, number>, previous: VirtualScrollOffsetsState, version: number, )
| 302 | } |
| 303 | |
| 304 | export function computeVirtualScrollOffsets( |
| 305 | itemKeys: readonly string[], |
| 306 | heightCache: ReadonlyMap<string, number>, |
| 307 | previous: VirtualScrollOffsetsState, |
| 308 | version: number, |
| 309 | ): VirtualScrollOffsetsState { |
| 310 | const n = itemKeys.length |
| 311 | if (previous.version === version && previous.n === n) { |
| 312 | return previous |
| 313 | } |
| 314 | |
| 315 | const canAppend = |
| 316 | previous.version === version && |
| 317 | previous.n >= 0 && |
| 318 | n > previous.n && |
| 319 | previous.arr.length >= previous.n + 1 |
| 320 | |
| 321 | const arr = |
| 322 | previous.arr.length >= n + 1 |
| 323 | ? previous.arr |
| 324 | : new Float64Array(n + 1) |
| 325 | |
| 326 | if (canAppend) { |
| 327 | if (arr !== previous.arr) { |
| 328 | arr.set(previous.arr.subarray(0, previous.n + 1)) |
| 329 | } |
| 330 | for (let i = previous.n; i < n; i++) { |
| 331 | arr[i + 1] = |
| 332 | arr[i]! + (heightCache.get(itemKeys[i]!) ?? DEFAULT_ESTIMATE) |
| 333 | } |
| 334 | return { arr, version, n } |
| 335 | } |
| 336 | |
| 337 | arr[0] = 0 |
| 338 | for (let i = 0; i < n; i++) { |
| 339 | arr[i + 1] = arr[i]! + (heightCache.get(itemKeys[i]!) ?? DEFAULT_ESTIMATE) |
| 340 | } |
| 341 | return { arr, version, n } |
| 342 | } |
| 343 | |
| 344 | export function computeVirtualScrollRenderPolicy({ |
| 345 | start, |
no test coverage detected