mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
28 lines
758 B
TypeScript
28 lines
758 B
TypeScript
import type {RefObject} from 'react';
|
|
import {useCallback, useState} from 'react';
|
|
import {useResizeObserver} from '@react-aria/utils';
|
|
|
|
interface Props<Element extends HTMLElement> {
|
|
elementRef: RefObject<Element>;
|
|
}
|
|
|
|
/**
|
|
* Returns a ref to be added to an element and returns the dimensions of that element
|
|
*/
|
|
export function useDimensions<Element extends HTMLElement>({elementRef}: Props<Element>) {
|
|
const [dimensions, setDimensions] = useState({height: 0, width: 0});
|
|
|
|
const element = elementRef.current;
|
|
|
|
const onResize = useCallback(() => {
|
|
setDimensions({
|
|
height: element?.clientHeight || 0,
|
|
width: element?.clientWidth || 0,
|
|
});
|
|
}, [element]);
|
|
|
|
useResizeObserver({ref: elementRef, onResize});
|
|
|
|
return dimensions;
|
|
}
|