Something went wrong. Try again.
Bluesky app fork with some witchin' additions 💫 forked from jollywhoppers.com/witchsky.app
Something went wrong. Try again.
807 B · 26 lines
TypeScript
at main
123456789101112131415161718192021222324252627/** Share observers across rows while retaining distinct prefetch and seen margins. */export function createRowObserver(options: IntersectionObserverInit) { const callbacks = new Map< Element, (entries: IntersectionObserverEntry[]) => void >() let observer: IntersectionObserver | undefined return ( node: Element, callback: (entries: IntersectionObserverEntry[]) => void, ) => { observer ??= new IntersectionObserver(entries => { for (const entry of entries) callbacks.get(entry.target)?.([entry]) }, options) callbacks.set(node, callback) observer.observe(node) return () => { observer?.unobserve(node) callbacks.delete(node) if (callbacks.size === 0) { observer?.disconnect() observer = undefined } } }}