scinote-web/app/javascript/packs/shared/navigation/index.js

132 lines
3.6 KiB
JavaScript
Raw Normal View History

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
}
`;
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-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-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-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);