
* feat: update jotai in excalidraw package * feat: update jotai in excalidraw-app * fix: exports from excalidraw/jotai * fix: use isolated react hooks * test: use jotai provider in <Trans /> test * remove unused package * refactor & make safer --------- Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
33 lines
817 B
TypeScript
33 lines
817 B
TypeScript
import { useEffect } from "react";
|
|
import { atom, useAtom } from "../editor-jotai";
|
|
import throttle from "lodash.throttle";
|
|
|
|
const scrollPositionAtom = atom<number>(0);
|
|
|
|
export const useScrollPosition = <T extends HTMLElement>(
|
|
elementRef: React.RefObject<T>,
|
|
) => {
|
|
const [scrollPosition, setScrollPosition] = useAtom(scrollPositionAtom);
|
|
|
|
useEffect(() => {
|
|
const { current: element } = elementRef;
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
const handleScroll = throttle(() => {
|
|
const { scrollTop } = element;
|
|
setScrollPosition(scrollTop);
|
|
}, 200);
|
|
|
|
element.addEventListener("scroll", handleScroll);
|
|
|
|
return () => {
|
|
handleScroll.cancel();
|
|
element.removeEventListener("scroll", handleScroll);
|
|
};
|
|
}, [elementRef, setScrollPosition]);
|
|
|
|
return scrollPosition;
|
|
};
|