import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; import { getConfig } from '@edx/frontend-platform'; // Local Components import { Menu, MenuTrigger, MenuContent } from './Menu'; import Avatar from './Avatar'; import { LinkedLogo, Logo } from './Logo'; // i18n import messages from './Header.messages'; // Assets import { MenuIcon } from './Icons'; class MobileHeader extends React.Component { constructor(props) { // eslint-disable-line no-useless-constructor super(props); } renderMainMenu() { const { mainMenu } = this.props; // Nodes are accepted as a prop if (!Array.isArray(mainMenu)) { return mainMenu; } return mainMenu.map((menuItem) => { const { type, href, content, submenuContent, } = menuItem; if (type === 'item') { return ( {content} ); } return ( {content} {submenuContent} ); }); } renderUserMenuItems() { const { userMenu } = this.props; return userMenu.map(({ type, href, content }) => (
  • {content}
  • )); } renderLoggedOutItems() { const { loggedOutItems } = this.props; return loggedOutItems.map(({ type, href, content }, i, arr) => (
  • {content}
  • )); } render() { const { logo, logoAltText, logoDestination, loggedIn, avatar, username, stickyOnMobile, intl, mainMenu, userMenu, loggedOutItems, } = this.props; const logoProps = { src: logo, alt: logoAltText, href: logoDestination }; const stickyClassName = stickyOnMobile ? 'sticky-top' : ''; const logoClasses = getConfig().AUTHN_MINIMAL_HEADER ? 'justify-content-left pl-3' : 'justify-content-center'; return (
    {intl.formatMessage(messages['header.label.skip.nav'])} {mainMenu.length > 0 ? (
    {this.renderMainMenu()}
    ) : null}
    { logoDestination === null ? : }
    {userMenu.length > 0 || loggedOutItems.length > 0 ? (
    {loggedIn ? this.renderUserMenuItems() : this.renderLoggedOutItems()}
    ) : null}
    ); } } MobileHeader.propTypes = { mainMenu: PropTypes.oneOfType([ PropTypes.node, PropTypes.array, ]), userMenu: PropTypes.arrayOf(PropTypes.shape({ type: PropTypes.oneOf(['item', 'menu']), href: PropTypes.string, content: PropTypes.string, })), loggedOutItems: PropTypes.arrayOf(PropTypes.shape({ type: PropTypes.oneOf(['item', 'menu']), href: PropTypes.string, content: PropTypes.string, })), logo: PropTypes.string, logoAltText: PropTypes.string, logoDestination: PropTypes.string, avatar: PropTypes.string, username: PropTypes.string, loggedIn: PropTypes.bool, stickyOnMobile: PropTypes.bool, // i18n intl: intlShape.isRequired, }; MobileHeader.defaultProps = { mainMenu: [], userMenu: [], loggedOutItems: [], logo: null, logoAltText: null, logoDestination: null, avatar: null, username: null, loggedIn: false, stickyOnMobile: true, }; export default injectIntl(MobileHeader);