UNPKG

@xo-union/tk-component-header-nav

Version:
49 lines (47 loc) 1.47 kB
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;