@xo-union/tk-component-header-nav
Version:
49 lines (47 loc) • 1.47 kB
JavaScript
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
import _globalThis from "@babel/runtime-corejs3/core-js/global-this";
import React from "react";
import PropTypes from "prop-types";
const ResizeObserverNav = _ref => {
let {
isHamburgerOpenInMobile,
children,
...props
} = _ref;
const [bottomOfHeader, setBottomOfHeader] = React.useState('65px' /* default bottom */);
const headerNavRef = React.useRef();
React.useEffect(() => {
// IE 11 fix to bypass resize observer without a polyfill. This useEffect is
// only needed for the mobile view
if (!_globalThis.ResizeObserver) {
return;
}
const resizeObserver = new ResizeObserver(() => {
if (isHamburgerOpenInMobile) {
const {
bottom
} = headerNavRef.current.getBoundingClientRect();
setBottomOfHeader(`${bottom}px`);
}
});
const {
body
} = document;
resizeObserver.observe(body);
// eslint-disable-next-line consistent-return
return () => {
resizeObserver.unobserve(body);
};
}, [isHamburgerOpenInMobile]);
return /*#__PURE__*/React.createElement("nav", _extends({
ref: headerNavRef,
style: {
'--bottom-of-header': bottomOfHeader
}
}, props), children);
};
process.env.NODE_ENV !== "production" ? ResizeObserverNav.propTypes = {
children: PropTypes.node,
isHamburgerOpenInMobile: PropTypes.bool
} : void 0;
export default ResizeObserverNav;