MCPcopy Create free account
hub / github.com/Noumena-Network/code / computeVirtualScrollOffsets

Function computeVirtualScrollOffsets

src/hooks/useVirtualScroll.ts:304–342  ·  view source on GitHub ↗
(
  itemKeys: readonly string[],
  heightCache: ReadonlyMap<string, number>,
  previous: VirtualScrollOffsetsState,
  version: number,
)

Source from the content-addressed store, hash-verified

302}
303
304export 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
344export function computeVirtualScrollRenderPolicy({
345 start,

Callers 2

useVirtualScrollFunction · 0.85

Calls 2

setMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected