mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-21 09:38:01 +02:00
40 lines
923 B
TypeScript
40 lines
923 B
TypeScript
import shim from '../shim';
|
|
const { useCallback, useEffect, useState } = shim.react();
|
|
import useEventListener from './useEventListener';
|
|
|
|
interface Size {
|
|
width: number;
|
|
height: number;
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
|
function useElementSize(elementRef: any): Size {
|
|
const [size, setSize] = useState({
|
|
width: 0,
|
|
height: 0,
|
|
});
|
|
|
|
// Prevent too many rendering using useCallback
|
|
const updateSize = useCallback(() => {
|
|
const node = elementRef?.current;
|
|
if (node) {
|
|
setSize({
|
|
width: node.offsetWidth || 0,
|
|
height: node.offsetHeight || 0,
|
|
});
|
|
}
|
|
}, [elementRef]);
|
|
|
|
// Initial size on mount
|
|
useEffect(() => {
|
|
updateSize();
|
|
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
|
|
}, []);
|
|
|
|
useEventListener('resize', updateSize);
|
|
|
|
return size;
|
|
}
|
|
|
|
export default useElementSize;
|