2017-08-02 23:27:05 +08:00
|
|
|
import React, { Component } from "react";
|
2017-08-03 22:03:15 +08:00
|
|
|
import PropTypes from "prop-types";
|
2017-08-02 23:27:05 +08:00
|
|
|
import { connect } from "react-redux";
|
|
|
|
import { Navbar, Nav, NavItem } from "react-bootstrap";
|
|
|
|
import styled from "styled-components";
|
2017-08-09 15:08:13 +08:00
|
|
|
import {
|
|
|
|
MAIN_COLOR_BLUE,
|
|
|
|
WHITE_COLOR,
|
|
|
|
BORDER_GRAY_COLOR
|
2017-08-09 21:21:02 +08:00
|
|
|
} from "../../app/constants/colors";
|
2017-08-02 23:27:05 +08:00
|
|
|
import { getActivities } from "../actions/ActivitiesActions";
|
|
|
|
import TeamSwitch from "./components/TeamSwitch";
|
|
|
|
import GlobalActivitiesModal from "./components/GlobalActivitiesModal";
|
2017-08-07 15:31:24 +08:00
|
|
|
import SearchDropdown from "./components/SearchDropdown";
|
2017-08-09 15:08:13 +08:00
|
|
|
import NotificationsDropdown from "./components/NotificationsDropdown";
|
|
|
|
import InfoDropdown from "./components/InfoDropdown";
|
|
|
|
import UserAccountDropdown from "./components/UserAccountDropdown";
|
|
|
|
|
|
|
|
const StyledNavbar = styled(Navbar)`
|
|
|
|
background-color: ${WHITE_COLOR};
|
|
|
|
border-color: ${BORDER_GRAY_COLOR};
|
|
|
|
`;
|
2017-08-02 23:27:05 +08:00
|
|
|
|
|
|
|
const StyledBrand = styled.a`
|
|
|
|
background-color: ${MAIN_COLOR_BLUE};
|
|
|
|
|
|
|
|
&:hover,
|
|
|
|
&:active,
|
|
|
|
&:focus {
|
|
|
|
background-color: ${MAIN_COLOR_BLUE} !important;
|
|
|
|
}
|
|
|
|
|
|
|
|
& > img {
|
2017-08-09 15:08:13 +08:00
|
|
|
margin-top: -4px;
|
|
|
|
max-width: 132px;
|
|
|
|
max-height: 26px;
|
2017-08-02 23:27:05 +08:00
|
|
|
}
|
|
|
|
`;
|
2017-07-31 16:42:40 +08:00
|
|
|
|
|
|
|
class Navigation extends Component {
|
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
2017-08-02 23:27:05 +08:00
|
|
|
this.state = {
|
|
|
|
showActivitesModal: false,
|
|
|
|
page: "",
|
|
|
|
currentTeam: { id: 0 }
|
|
|
|
};
|
|
|
|
this.selectItemCallback = this.selectItemCallback.bind(this);
|
|
|
|
this.closeModalCallback = this.closeModalCallback.bind(this);
|
2017-07-31 16:42:40 +08:00
|
|
|
}
|
|
|
|
|
2017-08-02 23:27:05 +08:00
|
|
|
selectItemCallback(key, ev) {
|
|
|
|
if (key === 4) {
|
|
|
|
ev.preventDefault();
|
|
|
|
this.setState({ showActivitesModal: !this.state.showActivitesModal });
|
|
|
|
// Call action creator to fetch activities from the server
|
|
|
|
this.props.fetchActivities();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
closeModalCallback() {
|
|
|
|
this.setState({ showActivitesModal: false });
|
|
|
|
}
|
2017-07-31 16:42:40 +08:00
|
|
|
|
2017-08-02 23:27:05 +08:00
|
|
|
render() {
|
|
|
|
return (
|
|
|
|
<div>
|
2017-08-09 15:08:13 +08:00
|
|
|
<StyledNavbar onSelect={this.selectItemCallback}>
|
2017-08-02 23:27:05 +08:00
|
|
|
<Navbar.Header>
|
|
|
|
<Navbar.Brand>
|
|
|
|
<StyledBrand href="/" title="sciNote">
|
|
|
|
<img src="/images/logo.png" alt="Logo" />
|
|
|
|
</StyledBrand>
|
|
|
|
</Navbar.Brand>
|
|
|
|
</Navbar.Header>
|
|
|
|
<Nav>
|
|
|
|
<NavItem eventKey={1} href="/">
|
|
|
|
<span className="glyphicon glyphicon-home" title="Home" />
|
|
|
|
</NavItem>
|
|
|
|
<NavItem eventKey={2} href="/protocols">
|
|
|
|
<span
|
|
|
|
className="glyphicon glyphicon-list-alt"
|
|
|
|
title="Protocol repositories"
|
|
|
|
/>
|
|
|
|
</NavItem>
|
|
|
|
<NavItem
|
|
|
|
eventKey={3}
|
|
|
|
href={`/teams/${this.state.currentTeam.id}/repositories`}
|
|
|
|
>
|
|
|
|
<i
|
|
|
|
className="fa fa-cubes"
|
|
|
|
aria-hidden="true"
|
|
|
|
title="Repositories"
|
|
|
|
/>
|
|
|
|
</NavItem>
|
|
|
|
<NavItem eventKey={4}>
|
|
|
|
<span
|
|
|
|
className="glyphicon glyphicon-equalizer"
|
|
|
|
title="Activities"
|
|
|
|
/>
|
|
|
|
</NavItem>
|
|
|
|
</Nav>
|
|
|
|
<Nav pullRight>
|
|
|
|
<TeamSwitch eventKey={5} />
|
2017-08-07 15:31:24 +08:00
|
|
|
<SearchDropdown />
|
2017-08-08 21:44:28 +08:00
|
|
|
<NotificationsDropdown />
|
2017-08-09 15:08:13 +08:00
|
|
|
<InfoDropdown />
|
|
|
|
<UserAccountDropdown />
|
2017-08-02 23:27:05 +08:00
|
|
|
</Nav>
|
2017-08-09 15:08:13 +08:00
|
|
|
</StyledNavbar>
|
2017-08-02 23:27:05 +08:00
|
|
|
<GlobalActivitiesModal
|
|
|
|
showModal={this.state.showActivitesModal}
|
|
|
|
onCloseModal={this.closeModalCallback}
|
|
|
|
/>
|
|
|
|
</div>
|
2017-07-31 16:42:40 +08:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-08-03 22:03:15 +08:00
|
|
|
Navigation.propTypes = {
|
2017-08-09 18:46:04 +08:00
|
|
|
fetchActivities: PropTypes.func.isRequired
|
2017-08-07 15:31:24 +08:00
|
|
|
};
|
2017-08-03 22:03:15 +08:00
|
|
|
|
2017-08-02 23:27:05 +08:00
|
|
|
// Map the fetch activity action to component
|
|
|
|
const mapDispatchToProps = dispatch => ({
|
|
|
|
fetchActivities() {
|
|
|
|
dispatch(getActivities());
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
export default connect(null, mapDispatchToProps)(Navigation);
|