@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
30 lines (29 loc) • 944 B
JavaScript
import * as Solid from "solid-js";
//#region src/utils.ts
/**
* Observe a Link's element while it preloads on `'viewport'`: `callback`
* receives each intersection entry. Whenever the element or preload mode
* changes, and on cleanup, a preloading Link gets `callback()` so it can
* cancel a pending preload.
*/
function useIntersectionObserver(ref, callback, preload) {
Solid.createEffect(() => {
const r = ref();
const mode = preload();
if (mode === "viewport" && r && typeof IntersectionObserver === "function") {
let active = true;
const observer = new IntersectionObserver((entries) => {
if (active) callback(entries.pop());
}, { rootMargin: "100px" });
observer.observe(r);
Solid.onCleanup(() => {
active = false;
observer.disconnect();
callback();
});
} else if (mode) Solid.onCleanup(() => callback());
});
}
//#endregion
export { useIntersectionObserver };
//# sourceMappingURL=utils.js.map