1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/hooks/useElementSize.ts

26 lines
678 B
TypeScript
Raw Normal View History

2023-06-29 23:17:59 +03:00
import { MutableRefObject, useLayoutEffect, useRef, useState } from 'react';
import useResizeObserver from '@react-hook/resize-observer';
interface Size {
2024-08-21 02:54:09 -04:00
width: number;
height: number;
2023-06-29 23:17:59 +03:00
}
export default function useElementSize<
2024-08-21 02:54:09 -04:00
T extends HTMLElement = HTMLDivElement
2023-06-29 23:17:59 +03:00
>(): [MutableRefObject<T | null>, Size] {
const target = useRef<T | null>(null);
const [size, setSize] = useState<Size>({
width: 0,
height: 0
});
useLayoutEffect(() => {
target.current && setSize(target.current.getBoundingClientRect());
}, [target]);
useResizeObserver(target, (entry) => setSize(entry.contentRect));
return [target, size];
}