MCPcopy Create free account
hub / github.com/editablejs/editable / useResizeObserver

Function useResizeObserver

packages/ui/src/scroll-area.tsx:1056–1079  ·  view source on GitHub ↗
(element: HTMLElement | null, onResize: () => void)

Source from the content-addressed store, hash-verified

1054}
1055
1056function useResizeObserver(element: HTMLElement | null, onResize: () => void) {
1057 const handleResize = useCallbackRef(onResize)
1058 useIsomorphicLayoutEffect(() => {
1059 let rAF = 0
1060 if (element) {
1061 /**
1062 * Resize Observer will throw an often benign error that says `ResizeObserver loop
1063 * completed with undelivered notifications`. This means that ResizeObserver was not
1064 * able to deliver all observations within a single animation frame, so we use
1065 * `requestAnimationFrame` to ensure we don't deliver unnecessary observations.
1066 * Further reading: https://github.com/WICG/resize-observer/issues/38
1067 */
1068 const resizeObserver = new ResizeObserver(() => {
1069 cancelAnimationFrame(rAF)
1070 rAF = window.requestAnimationFrame(handleResize)
1071 })
1072 resizeObserver.observe(element)
1073 return () => {
1074 window.cancelAnimationFrame(rAF)
1075 resizeObserver.unobserve(element)
1076 }
1077 }
1078 }, [element, handleResize])
1079}
1080
1081/* -----------------------------------------------------------------------------------------------*/
1082

Callers 1

scroll-area.tsxFile · 0.85

Calls 1

useCallbackRefFunction · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…