This PR moves the entire project to Typescript. Due to the ~1000 ignores this will lead to a messy codebase for a while, but the churn is worth it – all of those ignore comments are places that were never type-safe previously. closes #1282
30 lines
838 B
TypeScript
30 lines
838 B
TypeScript
import * as React from "react";
|
|
import useMobile from "~/hooks/useMobile";
|
|
import useWindowSize from "~/hooks/useWindowSize";
|
|
|
|
const useMenuHeight = (
|
|
visible: void | boolean,
|
|
unstable_disclosureRef?: React.RefObject<HTMLElement | null>
|
|
) => {
|
|
const [maxHeight, setMaxHeight] = React.useState<number | undefined>();
|
|
const isMobile = useMobile();
|
|
const { height: windowHeight } = useWindowSize();
|
|
|
|
React.useLayoutEffect(() => {
|
|
const padding = 8;
|
|
|
|
if (visible && !isMobile) {
|
|
setMaxHeight(
|
|
unstable_disclosureRef?.current
|
|
? windowHeight -
|
|
unstable_disclosureRef.current.getBoundingClientRect().bottom -
|
|
padding
|
|
: undefined
|
|
);
|
|
}
|
|
}, [visible, unstable_disclosureRef, windowHeight, isMobile]);
|
|
return maxHeight;
|
|
};
|
|
|
|
export default useMenuHeight;
|