@rocketsofawesome/mirage
Version:
[Live Demo of the Pattern Library](https://rocketsofawesome.github.io/mirage/)
111 lines (101 loc) • 2.53 kB
JavaScript
import React from 'react'
import PropTypes from 'prop-types'
import styled from 'styled-components'
import classNames from 'classnames'
import { HeaderLink, SubMenu } from 'SRC'
import { BlueSpinner } from 'SRC'
export class BaseAccountLinks extends React.Component {
constructor (props) {
super(props)
this.state = {
subMenuOpen: props.subMenuOpen
}
}
toggleSubmenu = () => {
const { subMenuOpen } = this.state
this.setState({subMenuOpen: !subMenuOpen})
}
signOut = () => {
const { signOut } = this.props
this.toggleSubmenu()
signOut()
}
render () {
const {
className,
highlightable,
showSubscriptionLinks,
loggedIn,
renderLink,
name,
pathname,
...props
} = this.props
delete props.subMenuOpen
delete props.signOut
const { subMenuOpen } = this.state
const subMenuAnchor = name ? name : <BlueSpinner size='40px' />
if (loggedIn) {
const classes = classNames(className, {
'active': subMenuOpen
})
return (
<div className={classes}>
<HeaderLink
onClick={this.toggleSubmenu}
highlightable={false}>
{subMenuAnchor}
</HeaderLink>
<SubMenu
open={subMenuOpen}
renderLink={renderLink}
showSubscriptionLinks={showSubscriptionLinks}
signOut={this.signOut}
pathname={pathname}
{...props} />
</div>
)
} else {
return (
<HeaderLink
className={className}
target='/shop/login'
renderLink={renderLink}
highlightable={highlightable}
{...props} >
Login
</HeaderLink>
)
}
}
}
const DesktopAccountLinks = styled(BaseAccountLinks)`
display: inline-flex;
position: relative;
${HeaderLink} {
flex: 0 0 auto;
display: inline-flex;
border: 0.1rem solid transparent;
margin: 0;
padding: 0 1rem;
}
&.active ${HeaderLink} {
border: 0.1rem solid ${props => props.theme.colors.rocketBlue};
transition: all 0.25s ease-in-out;
}
`
DesktopAccountLinks.propTypes = {
className: PropTypes.string,
showSubscriptionLinks: PropTypes.bool,
loggedIn: PropTypes.bool,
name: PropTypes.string,
renderLink: PropTypes.func,
subMenuOpen: PropTypes.bool
}
DesktopAccountLinks.defaultProps = {
subMenuOpen: false,
//Used in snap shot testing only
highlightable: true
}
/** @component */
export default DesktopAccountLinks