-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathEMNavbar.js
More file actions
94 lines (84 loc) · 2.15 KB
/
Copy pathEMNavbar.js
File metadata and controls
94 lines (84 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// @flow
import React, { Component } from 'react';
import { connect } from 'react-redux';
import {
Collapse,
Navbar,
NavbarToggler,
NavbarBrand,
Nav,
NavLink,
NavItem,
UncontrolledDropdown,
DropdownToggle,
DropdownMenu,
DropdownItem,
} from 'reactstrap';
import { userLogout } from '../actions';
import User from '../types/multi-types';
type Props = {
userState: User,
};
type State = {
isOpen: boolean,
};
class EMNavbar extends Component<Props, State> {
state = {
isOpen: false,
};
logout = () => {
this.props.dispatch(userLogout());
};
toggle = () => {
this.setState({
isOpen: !this.state.isOpen,
});
};
getMyProfile = currentUser => {
const { username, id } = currentUser;
return (
<UncontrolledDropdown nav inNavbar>
<DropdownToggle>
<span className="fa fa-user-circle fa-lg" />
{` ${username}`}
</DropdownToggle>
<DropdownMenu right>
<DropdownItem href={`/users/${id}`}>My Profile</DropdownItem>
<DropdownItem divider />
<DropdownItem onClick={this.logout}>Logout</DropdownItem>
</DropdownMenu>
</UncontrolledDropdown>
);
};
render() {
const { userState } = this.props;
return (
<Navbar color="dark" dark expand="md">
<NavbarToggler onClick={this.toggle} className="mr-2" />
<NavbarBrand href="/">Event Manager</NavbarBrand>
<Collapse isOpen={this.state.isOpen} navbar>
<Nav className="ml-auto" navbar>
<NavItem>
<NavLink href="/">Home</NavLink>
</NavItem>
<NavItem>
<NavLink href="/about">About</NavLink>
</NavItem>
{userState && userState.currentUser && userState.token ? (
this.getMyProfile(userState.currentUser)
) : (
<NavItem>
<NavLink href="/login">Login</NavLink>
</NavItem>
)}
</Nav>
</Collapse>
</Navbar>
);
}
}
const mapStateToProps = state => {
const { userState } = state;
return { userState };
};
export default connect(mapStateToProps)(EMNavbar);