UNPKG

smart-home

Version:

Netbeast dashboard, IoT apps manager

79 lines (66 loc) 2.13 kB
import React from 'react' import { Link } from 'react-router' import Avatar from 'react-avatar' import { OverlayTrigger, Popover } from 'react-bootstrap' import { Session } from '../lib' export default class UserPod extends React.Component { constructor (props, context) { super(props) this.state = { user: Session.load('user') } this.popover = this.popover.bind(this) this.router = context.router /* Methods */ window.logOut = this.logOut = this.logOut.bind(this) window.logIn = this.logIn = this.logIn.bind(this) } logIn (user) { Session.save('user', user) this.setState({ user }) if (window.location.state && window.location.state.nextPathname) { this.router.replace(window.location.state.nextPathname) } else { this.router.replace('/') } } logOut () { Session.delete('user') this.setState({ user: null }) return this.router.push('/') } popover () { const { user } = this.state const logged = ( <ul className='user-pod__menu list-unstyled'> <li><Link to='/settings'><i className='fa fa-gear'/> Settings</Link></li> <li onClick={this.logOut}><i className='fa fa-sign-out'/>Log out</li> </ul> ) const unlogged = ( <ul className='user-pod__menu list-unstyled'> <li><Link to='/login'>Log in</Link> or <Link to='/signup'>Sign up</Link></li> </ul> ) return ( <Popover id='user-pod'> { user ? logged : unlogged } </Popover> ) } render () { const { user } = this.state const { alias, src } = user ? user : { alias: 'Guest' } return ( <div className='user-pod clickable'> <span className='user-pod-avatar'> <Avatar round={true} name={alias} src={src} size={32} /> </span> <OverlayTrigger trigger={['click']} rootClose placement='bottom' overlay={this.popover()}> <span className='user-pod-name'> {alias} <i className='fa fa-caret-down'></i></span> </OverlayTrigger> </div> ) } } UserPod.contextTypes = { router: React.PropTypes.object.isRequired }