import { Component, JSX, Show, createSignal, onCleanup, onMount } from 'solid-js'; export type LazyLoadProps = { threshold?: number[] | number; fallback?: JSX.Element; children: () => JSX.Element; }; const LazyLoad: Component = (props) => { let containerRef: HTMLDivElement | undefined; const [visible, setVisible] = createSignal(false); onMount(() => { const observer = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { setVisible(true); } }); }, { threshold: props.threshold ?? 0, }, ); if (containerRef != null) { observer.observe(containerRef); } onCleanup(() => { observer.disconnect(); }); }); return (
{/* eslint-disable-next-line @typescript-eslint/no-unused-vars */} {(_) => props.children()}
); }; export default LazyLoad;