UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

45 lines (44 loc) 1.37 kB
import * as Solid from "solid-js"; //#region src/utils.ts /** * React hook to wrap `IntersectionObserver`. * * This hook will create an `IntersectionObserver` and observe the ref passed to it. * * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`. * * @param ref - The ref to observe * @param callback - The callback to call when the intersection changes * @param disabled - Whether observation is disabled * @returns The IntersectionObserver instance * @example * ```tsx * const MyComponent = () => { * const ref = React.useRef<HTMLDivElement>(null) * useIntersectionObserver( * ref, * (entry) => { doSomething(entry) }, * false * ) * return <div ref={ref} /> * ``` */ function useIntersectionObserver(ref, callback, disabled) { const isIntersectionObserverAvailable = typeof IntersectionObserver === "function"; let observerRef = null; Solid.createEffect(() => [ref(), disabled()], ([r, isDisabled]) => { if (isDisabled || !r || !isIntersectionObserverAvailable) return () => callback(); observerRef = new IntersectionObserver((entries) => { callback(entries.pop()); }, { rootMargin: "100px" }); observerRef.observe(r); return () => { observerRef?.disconnect(); callback(); }; }); return () => observerRef; } //#endregion export { useIntersectionObserver }; //# sourceMappingURL=utils.js.map