mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-01-14 15:53:24 +01:00
31 lines
767 B
TypeScript
31 lines
767 B
TypeScript
import type { RefObject } from 'react';
|
|
import { useLayoutEffect, useState } from 'react';
|
|
|
|
export function useContainerSize(ref: RefObject<HTMLElement | null>) {
|
|
const [size, setSize] = useState<{ width: number; height: number }>({ width: 0, height: 0 });
|
|
|
|
useLayoutEffect(() => {
|
|
const el = ref.current;
|
|
if (el) {
|
|
const observer = new ResizeObserver((entries) => {
|
|
for (const entry of entries) {
|
|
if (entry.target === el) {
|
|
setSize({ width: entry.contentRect.width, height: entry.contentRect.height });
|
|
}
|
|
}
|
|
});
|
|
|
|
observer.observe(el);
|
|
|
|
return () => {
|
|
observer.unobserve(el);
|
|
observer.disconnect();
|
|
};
|
|
}
|
|
|
|
return undefined;
|
|
}, [ref]);
|
|
|
|
return size;
|
|
}
|