* chore: fix lint * fix: constants check:lint command * chore(lint): permit unused vars which begin w/ _ * chore: rm dead code * fix(lint): more lint fixes to constants pkg * fix(lint): lint the live server - fix lint issues * chore: improve clean script * fix(lint): more lint * chore: set live server process title * chore(deps): update to turbo@2.5.5 * chore(live): target node22 * fix(dev): add missing ui pkg dependency * fix(dev): lint decorators * fix(dev): lint space app * fix(dev): address lint issues in types pkg * fix(dev): lint editor pkg * chore(dev): moar lint * fix(dev): live server exit code * chore: address PR feedback * fix(lint): better TPageExtended type * chore: refactor * chore: revert most live server changes * fix: few more lint issues * chore: enable ci checks Ensure we can build + confirm that lint is not getting worse. * chore: address PR feedback * fix: web lint warning added to package.json * fix: ci:lint command --------- Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import { RefObject, useEffect } from "react";
|
|
|
|
export type UseIntersectionObserverProps = {
|
|
containerRef: RefObject<HTMLDivElement | null> | undefined;
|
|
elementRef: HTMLElement | null;
|
|
callback: () => void;
|
|
rootMargin?: string;
|
|
};
|
|
|
|
export const useIntersectionObserver = (
|
|
containerRef: RefObject<HTMLDivElement | null>,
|
|
elementRef: HTMLElement | null,
|
|
callback: (() => void) | undefined,
|
|
rootMargin?: string
|
|
) => {
|
|
useEffect(() => {
|
|
if (elementRef) {
|
|
const observer = new IntersectionObserver(
|
|
(entries) => {
|
|
if (entries[entries.length - 1].isIntersecting) {
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
}
|
|
},
|
|
{
|
|
root: containerRef?.current,
|
|
rootMargin,
|
|
}
|
|
);
|
|
observer.observe(elementRef);
|
|
return () => {
|
|
if (elementRef) {
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
observer.unobserve(elementRef);
|
|
}
|
|
};
|
|
}
|
|
// When i am passing callback as a dependency, it is causing infinite loop,
|
|
// Please make sure you fix this eslint lint disable error with caution
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [rootMargin, callback, elementRef, containerRef.current]);
|
|
};
|