Skip to content
This repository has been archived by the owner on Mar 7, 2018. It is now read-only.

Refactor header #38

Merged
merged 5 commits into from
Sep 12, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 0 additions & 65 deletions src/components/Header.js

This file was deleted.

88 changes: 88 additions & 0 deletions src/components/Header/Header.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import React from 'react';
import '../../styles/Header.css';
import { Link } from 'react-router';

import LanguagePicker from './LanguagePicker';

class Header extends React.Component {
render() {
return (
<nav className="navbar navbar-trans" role="navigation">
<div>
{ this.renderNavHeader() }
<div className="navbar-collapse collapse" id="navbar-collapsible">
{ this.renderLeftNav() }
{ this.renderRightNav() }
</div>
</div>
</nav>
);
}

renderNavHeader() {
const { title, logo, language } = this.props;

return (
<div className="navbar-header">
<button type="button" className="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapsible">
<span className="sr-only">Toggle navigation</span>
<span className="icon-bar"></span>
<span className="icon-bar"></span>
<span className="icon-bar"></span>
</button>
<a className="navbar-brand text-danger" href="#">
{ logo && <img role="presentation" src={logo.startsWith("http:") ? logo : `${process.env.PUBLIC_URL}/images/${logo}`} style={{display: 'inline'}} height="48" /> }
<span className="brandLabel">{title}</span>
</a>
</div>
);
}

renderLeftNav() {
return (
<ul className="nav navbar-nav navbar-left">
<li>{ this.renderDashboardLink() }</li>
<li>{ this.renderFactsLink() }</li>
{ this.props.siteKey === "dengue" && <li>{ this.renderPredictionsLink() }</li> }
</ul>
);
}

renderDashboardLink() {
return (
<Link to={`/site/${this.props.siteKey}/`} activeClassName="current">Dashboard</Link>
);
}

renderFactsLink() {
return (
<Link to={`/site/${this.props.siteKey}/facts/`} activeClassName="current">Facts</Link>
);
}

renderPredictionsLink() {
return (
<Link to={`/site/${this.props.siteKey}/predictions/`} activeClassName="current">Predictions</Link>
);
}

renderRightNav() {
return (
<ul className="nav navbar-nav navbar-right">
{ this.props.settings && <li>{ this.renderLanguagePicker() }</li> }
</ul>
);
}

renderLanguagePicker() {
return (
<LanguagePicker
supportedLanguages={this.props.supportedLanguages}
language={this.props.language}
flux={this.props.flux}
/>
);
}
};

export default Header;
29 changes: 29 additions & 0 deletions src/components/Header/LanguagePicker.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import React from 'react';
import SelectField from 'material-ui/SelectField';
import MenuItem from 'material-ui/MenuItem';

class LanguagePicker extends React.Component {
changeLanguage(event, index, value) {
this.props.flux.actions.DASHBOARD.changeLanguage(value);
}

render() {
const languages = this.props.supportedLanguages.map(lang =>
<MenuItem key={lang} value={lang} primaryText={lang} />
);

return (
<SelectField
underlineStyle={{ borderColor: '#337ab7', borderBottom: 'solid 3px' }}
labelStyle={{ fontWeight: 600, color: '#2ebd59' }}
value={this.props.language}
autoWidth={true}
style={{maxWidth:'60px'}}
onChange={(event, index, value) => this.changeLanguage(event, index, value)}>
{languages}
</SelectField>
);
}
}

export default LanguagePicker;
3 changes: 3 additions & 0 deletions src/components/Header/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import Header from './Header';

export default Header;