diff --git a/assets/js/Dashboard.jsx b/assets/js/Dashboard.jsx index c317fa5a8aa4b22997fddec9c9483602f1a79e08..c1b9287f6905481fbd3953a870bdf7fbbfd3a801 100755 --- a/assets/js/Dashboard.jsx +++ b/assets/js/Dashboard.jsx @@ -1,20 +1,53 @@ import React from 'react'; import TopMenu from './components/TopMenu'; -import Footer from './components/Footer' +import Server from './lib/Server'; + + +const defaultPicture = 'http://semantic-ui.com/images/avatar/small/elliot.jpg'; export default class Dashboard extends React.Component { static propTypes = { + user: React.PropTypes.object.isRequired, + route: React.PropTypes.object.isRequired, + params: React.PropTypes.object.isRequired, children: React.PropTypes.oneOfType([ React.PropTypes.arrayOf(React.PropTypes.node), React.PropTypes.node, ]).isRequired, }; + static getInfo(user) { + const role = user.role; + if (role === 'student') { + return user.data.student; + } else if (role === 'company') { + return user.data.company; + } + + return 0; + } + + constructor(props) { + super(props); + /* istanbul ignore next */ + const data = Dashboard.getInfo(this.props.user); + this.state = { + id: data.id, + name: data.name, + email: data.user.email, + photo: data.photo, + }; + } + + render = () => ( <div> - <TopMenu /> - <div className="content"> {this.props.children} </div> - <Footer /> + <TopMenu + name={this.state.name} email={this.state.email} + photo={this.state.photo ? this.state.photo : defaultPicture} + /> + {this.props.children} </div> ) } + diff --git a/assets/js/VacancyPage.jsx b/assets/js/VacancyPage.jsx index 438defe00d070801a2e770dd02e95791f7f20b67..98425697314a791cb8f1596bf06ceb409ee06e63 100644 --- a/assets/js/VacancyPage.jsx +++ b/assets/js/VacancyPage.jsx @@ -61,7 +61,6 @@ export default class VacancyPage extends React.Component { return ( <VacancyList key={1} userId={this.state.id} url={`/companies/${this.state.id}/vacancies/`} type="company" /> ); - } return ( <div> diff --git a/assets/js/components/TopMenu.jsx b/assets/js/components/TopMenu.jsx index 43319101a03cefeb8bdcadaf9be8db0b7cd4a573..96b27829853fd2799b338d840b67c5d105996556 100644 --- a/assets/js/components/TopMenu.jsx +++ b/assets/js/components/TopMenu.jsx @@ -1,15 +1,22 @@ import React from 'react'; -import { Menu, Image } from 'semantic-ui-react'; +import { Menu, Image, Popup, Button, Card } from 'semantic-ui-react'; import { Link, browserHistory } from 'react-router'; - import Server from '../lib/Server'; import Storage from '../lib/Storage'; export default class TopMenu extends React.Component { + static propTypes = { + // user: React.PropTypes.object.isRequired, + name: React.PropTypes.string.isRequired, + email: React.PropTypes.string.isRequired, + photo: React.PropTypes.any.isRequired, + }; + constructor(props) { super(props); /* istanbul ignore next */ + // console.log(this.props.user); this.state = { activeItem: 'home' }; this.logout = this.logout.bind(this); } @@ -25,13 +32,32 @@ export default class TopMenu extends React.Component { render() { const { activeItem } = this.state; + return ( <Menu color="blue" pointing secondary> <Image as="a" size="small" src="/assets/img/logo.png" href="/" /> <Menu.Menu position="right"> <Menu.Item as={Link} to="/home" name="home" active={activeItem === 'home'} onClick={this.handleItemClick} /> - <Menu.Item as={Link} to="/profile" name="profil" active={activeItem === 'profil'} onClick={this.handleItemClick} /> - <Menu.Item as={Link} onClick={this.logout} name="logout" /> + <Menu.Item as={Link} to="/profil" name="profile" onClick={this.handleItemClick} /> + <Menu.Item> + <Popup + trigger={<Image + as={Link} to="/profil" src={this.props.photo} avatar + onClick={this.handleItemClick} + />} + flowing + hoverable + > + + <Card + header={this.props.name} + description={this.props.email} + /> + <Button as={Link} onClick={this.logout} name="logout" color="blue" size="tiny">Logout</Button> + + </Popup> + + </Menu.Item> </Menu.Menu> </Menu> ); diff --git a/assets/js/index.jsx b/assets/js/index.jsx index 76c1a224bd3ed72d17a4468eaeaa29bbdee3f37c..da2d971a4d0291da5bea562418d5914165e88e46 100644 --- a/assets/js/index.jsx +++ b/assets/js/index.jsx @@ -86,11 +86,12 @@ export default class App extends React.Component { const commonUser = this.authorization(['admin', 'student', 'company']); const grownups = this.authorization(['admin', 'company', 'supervisor']); const facultyMember = this.authorization(['admin', 'student', 'supervisor']); + const all = this.authorization(['admin', 'company', 'student', 'supervisor']); return ( <Router history={browserHistory}> <Route path="/login" component={Login} /> - <Route component={Dashboard} onEnter={this.handleAuth}> + <Route component={all(Dashboard)} onEnter={this.handleAuth} own> <Route path="/transcript/:id" component={company(TranscriptPage)} /> <Route path="/lowongan" component={commonUser(VacancyPage)} /> <Route path="/admin-lowongan" component={AdminVacancyPage} />