Something went wrong. Try again.
Bluesky app fork with some witchin' additions 💫 forked from jollywhoppers.com/witchsky.app
Something went wrong. Try again.
1.1 kB · 44 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445import {useEffect, useState} from 'react'
/** * Delays enabling a query until after animations/interactions settle. * Keeps fork-specific network work off the cold render/scroll path without * restructuring upstream UI components. */export function useDeferredEnable(enabled: boolean): boolean { const [ready, setReady] = useState(false)
useEffect(() => { if (!enabled) { setReady(false) return }
let cancelled = false const enable = () => { if (!cancelled) { setReady(true) } }
let cancel: () => void if ( typeof requestIdleCallback === 'function' && typeof cancelIdleCallback === 'function' ) { const handle = requestIdleCallback(enable) cancel = () => cancelIdleCallback(handle) } else { // Safari does not provide idle callbacks, so yield using a timer instead. const handle = setTimeout(enable, 100) cancel = () => clearTimeout(handle) }
return () => { cancelled = true cancel() } }, [enabled])
return enabled && ready}