@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
32 lines (31 loc) • 1.1 kB
JavaScript
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
let solid_js = require("solid-js");
solid_js = require_runtime.__toESM(solid_js, 1);
//#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_js.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_js.onCleanup(() => {
active = false;
observer.disconnect();
callback();
});
} else if (mode) solid_js.onCleanup(() => callback());
});
}
//#endregion
exports.useIntersectionObserver = useIntersectionObserver;
//# sourceMappingURL=utils.cjs.map