MCPcopy Index your code
hub / github.com/wavetermdev/waveterm / useOnResize

Function useOnResize

frontend/app/hook/useDimensions.tsx:62–103  ·  view source on GitHub ↗
(
    ref: React.RefObject<T>,
    callback: (domRect: DOMRectReadOnly) => void,
    debounceMs: number = null
)

Source from the content-addressed store, hash-verified

60}
61
62export function useOnResize<T extends HTMLElement>(
63 ref: React.RefObject<T>,
64 callback: (domRect: DOMRectReadOnly) => void,
65 debounceMs: number = null
66) {
67 const isFirst = React.useRef(true);
68 const rszObjRef = React.useRef<ResizeObserver>(null);
69 const oldHtmlElem = React.useRef<T>(null);
70 const setDomRectDebounced = React.useCallback(debounceMs == null ? callback : debounce(debounceMs, callback), [
71 debounceMs,
72 callback,
73 ]);
74 React.useEffect(() => {
75 if (!rszObjRef.current) {
76 rszObjRef.current = new ResizeObserver((entries) => {
77 for (const entry of entries) {
78 if (isFirst.current) {
79 isFirst.current = false;
80 callback(entry.contentRect);
81 } else {
82 setDomRectDebounced(entry.contentRect);
83 }
84 }
85 });
86 }
87 if (ref.current) {
88 rszObjRef.current.observe(ref.current);
89 oldHtmlElem.current = ref.current;
90 }
91 return () => {
92 if (oldHtmlElem.current) {
93 rszObjRef.current?.unobserve(oldHtmlElem.current);
94 oldHtmlElem.current = null;
95 }
96 };
97 }, [ref.current, callback]);
98 React.useEffect(() => {
99 return () => {
100 rszObjRef.current?.disconnect();
101 };
102 }, []);
103}
104
105// will not react to ref changes
106// pass debounceMs of null to not debounce

Callers 1

useTileLayoutFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected