UNPKG

@carbon/react

Version:

React components for the Carbon Design System

59 lines (51 loc) 2.25 kB
/** * Copyright IBM Corp. 2016, 2023 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js'); var PropTypes = require('prop-types'); var React = require('react'); var keys = require('../../internal/keyboard/keys.js'); var match = require('../../internal/keyboard/match.js'); var useEvent = require('../../internal/useEvent.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes); var React__default = /*#__PURE__*/_interopDefaultLegacy(React); function HeaderContainer({ render: Children, isSideNavExpanded = false, ...rest }) { //state for expandable sidenav const [isSideNavExpandedState, setIsSideNavExpandedState] = React.useState(isSideNavExpanded); useEvent.useWindowEvent('keydown', event => { if (match.match(event, keys.Escape)) { setIsSideNavExpandedState(false); } }); const handleHeaderMenuButtonClick = React.useCallback(() => { setIsSideNavExpandedState(prevIsSideNavExpanded => !prevIsSideNavExpanded); }, [setIsSideNavExpandedState]); return /*#__PURE__*/React__default["default"].createElement(Children, _rollupPluginBabelHelpers["extends"]({}, rest, { isSideNavExpanded: isSideNavExpandedState, onClickSideNavExpand: handleHeaderMenuButtonClick })); } HeaderContainer.propTypes = { /** * Optionally provide a custom class name that is applied to the underlying <header> */ isSideNavExpanded: PropTypes__default["default"].bool, /** * A function or a component that is invoked with `isSideNavExpanded` and `onClickSideNavExpand`. * The function or component can then use those properties to within the components it * returns, such as with the HeaderMenuButton and SideNav components. Additional props will also be passed * into this component for convenience. */ render: PropTypes__default["default"].elementType.isRequired }; exports["default"] = HeaderContainer;