@payfit/unity-components
Version:
37 lines (36 loc) • 1.14 kB
JavaScript
import { areScrollEdgesEqual as e, emptyScrollEdges as t, getScrollEdges as n } from "../utils/scroll-edges.js";
import { useCallback as r, useLayoutEffect as i, useRef as a, useState as o } from "react";
//#region src/core/hooks/use-scroll-edges.ts
function s({ axis: s = "both" } = {}) {
let c = a(null), [l, u] = o(t), d = r(() => {
let r = c.current, i = r ? n(r, s) : t;
u((t) => e(t, i) ? t : i);
}, [s]), f = r(() => {
d();
}, [d]);
return i(() => {
let e = c.current;
if (!e) return;
d();
let t = requestAnimationFrame(d), n = typeof ResizeObserver > "u" ? void 0 : new ResizeObserver(d), r = typeof MutationObserver > "u" ? void 0 : new MutationObserver(() => {
i(), d();
}), i = () => {
n?.disconnect(), n?.observe(e), e.querySelectorAll("*").forEach((e) => n?.observe(e));
};
return i(), r?.observe(e, {
attributes: !0,
childList: !0,
subtree: !0,
characterData: !0
}), () => {
cancelAnimationFrame(t), n?.disconnect(), r?.disconnect();
};
}, [d]), {
scrollEdges: l,
scrollRef: c,
refreshScrollEdges: d,
onScroll: f
};
}
//#endregion
export { s as useScrollEdges };