UNPKG

@rocketsofawesome/mirage

Version:

[Live Demo of the Pattern Library](https://rocketsofawesome.github.io/mirage/)

244 lines (230 loc) 6.44 kB
import React from 'react' import PropTypes from 'prop-types' import styled from 'styled-components' import { Accordion, BagIcon, BlueHamburger, Logo, MenuDrawer, MobileHeader, MobileLinkSecondary, MobileLinkTertiary, MobileLinkTop, MobileAccountLinks, UL } from 'SRC' import { theme } from 'SRC/core/theme' const { REACT_APP_OUTFIT_NAV, REACT_APP_SHOW_BLOG_LINK } = process.env export class BaseMobileNavigation extends React.Component { constructor (props) { super(props) this.state = { open: false } } closeDrawer = () => { this.setState({open: false}) } openDrawer = () => { this.setState({open: true}) } render () { const { boysLinks, girlsLinks, className, drawerPosition, loggedIn, homepageUrl, renderLink, isSubscriptionMember, bagCount, clickBag, showBlog, outfitNav, signOut } = this.props const { open } = this.state return ( <div className={className}> <MobileHeader> <BlueHamburger onClick={this.openDrawer} /> <MobileLinkTop style={{marginBottom: '0'}} href={homepageUrl} renderLink={renderLink}> <span className='screenReader'>Home</span> <Logo /> </MobileLinkTop> <a onClick={clickBag}> <BagIcon count={bagCount} /> </a> </MobileHeader> <MenuDrawer open={open} closeDrawer={this.closeDrawer} position={drawerPosition}> <UL leftPad='1.4rem' type='none'> <li> <MobileLinkTop target='/shop' renderLink={renderLink}> Shop </MobileLinkTop> <UL leftPad='1rem' type='none'> <li> <Accordion toggleElement={ <MobileLinkSecondary>Boys</MobileLinkSecondary> }> <UL type='none' leftPad='1rem'> {boysLinks && boysLinks.map((link, index) => { return ( <li key={index}> <MobileLinkTertiary target={link.target} renderLink={renderLink}> {link.text} </MobileLinkTertiary> </li> ) })} </UL> </Accordion> </li> <li> <Accordion toggleElement={ <MobileLinkSecondary>Girls</MobileLinkSecondary> }> <UL type='none' leftPad='1rem'> {girlsLinks && girlsLinks.map((link, index) => { return ( <li key={index}> <MobileLinkTertiary target={link.target} renderLink={renderLink}> {link.text} </MobileLinkTertiary> </li> ) })} </UL> </Accordion> </li> </UL> </li> {outfitNav && <li> <MobileLinkTop href={`${homepageUrl}/outfits`}> Outfits </MobileLinkTop> </li> } {!isSubscriptionMember && <li> <MobileLinkTop href={`${homepageUrl}/subscribe-and-save`}> Subscribe + Save </MobileLinkTop> </li> } {isSubscriptionMember && <div> <li> <MobileLinkTop target='/box' renderLink={renderLink}> Box </MobileLinkTop> </li> <li> <MobileLinkTop target='/invite' renderLink={renderLink} background={theme.colors.lightPink}> Free Clothes </MobileLinkTop> </li> <li> <MobileLinkTop target='/style-file' renderLink={renderLink}> Style File </MobileLinkTop> </li> <li> <MobileLinkTop target='/orders' renderLink={renderLink}> Order History </MobileLinkTop> </li> </div> } {!loggedIn && <li> <MobileLinkTop target='/shop/login' renderLink={renderLink}> Login </MobileLinkTop> </li> } {showBlog && <li> <MobileLinkTop href={`https://news.rocketsofawesome.com`}> Blog </MobileLinkTop> </li> } {loggedIn && <MobileAccountLinks isSubscriptionMember={isSubscriptionMember} renderLink={renderLink} signOut={signOut} /> } </UL> </MenuDrawer> </div> ) } } const MobileNavigation = styled(BaseMobileNavigation)` .screenReader { font-size: 0; } ${Logo} { max-width: 22.4rem; } ul ul { margin-bottom: 2rem; } ul ul ul { margin-bottom: 0; } ` MobileNavigation.propTypes = { drawerPosition: PropTypes.string, bagCount: PropTypes.number, homepageUrl: PropTypes.string, boysLinks: PropTypes.array, girlsLinks: PropTypes.array, className: PropTypes.string, loggedIn: PropTypes.bool, renderLink: PropTypes.func, isSubscriptionMember: PropTypes.bool, clickBag: PropTypes.func } MobileNavigation.defaultProps = { drawerPosition: 'fixed', homepageUrl: 'https://rocketsofawesome.com', outfitNav: REACT_APP_OUTFIT_NAV, showBlog: REACT_APP_SHOW_BLOG_LINK } /** @component */ export default MobileNavigation