import { repoUrl } from '../utils';
import { UserService } from '../services';
-export class Navbar extends Component<any, any> {
+interface NavbarState {
+ isLoggedIn: boolean;
+ expanded: boolean;
+ expandUserDropdown: boolean;
+}
+
+export class Navbar extends Component<any, NavbarState> {
+
+ emptyState: NavbarState = {
+ isLoggedIn: UserService.Instance.loggedIn,
+ expanded: false,
+ expandUserDropdown: false
+ }
constructor(props: any, context: any) {
super(props, context);
- this.state = {isLoggedIn: UserService.Instance.loggedIn, expanded: false};
+ this.state = this.emptyState;
+ this.handleOverviewClick = this.handleOverviewClick.bind(this);
// Subscribe to user changes
UserService.Instance.sub.subscribe(user => {
</li>
</ul>
<ul class="navbar-nav ml-auto mr-2">
- <li class="nav-item">
- {this.state.isLoggedIn ?
- <a role="button" class="nav-link pointer" onClick={ linkEvent(this, this.handleLogoutClick) }>Logout</a> :
+ {this.state.isLoggedIn ?
+ <li className={`nav-item dropdown ${this.state.expandUserDropdown && 'show'}`}>
+ <a class="pointer nav-link dropdown-toggle" onClick={linkEvent(this, this.expandUserDropdown)} role="button">
+ {UserService.Instance.user.username}
+ </a>
+ <div className={`dropdown-menu dropdown-menu-right ${this.state.expandUserDropdown && 'show'}`}>
+ <a role="button" class="dropdown-item pointer" onClick={linkEvent(this, this.handleOverviewClick)}>Overview</a>
+ <a role="button" class="dropdown-item pointer" onClick={ linkEvent(this, this.handleLogoutClick) }>Logout</a>
+ </div>
+ </li> :
<Link class="nav-link" to="/login">Login</Link>
- }
- </li>
+ }
</ul>
</div>
</nav>
);
}
- handleLogoutClick() {
+ expandUserDropdown(i: Navbar) {
+ i.state.expandUserDropdown = !i.state.expandUserDropdown;
+ i.setState(i.state);
+ }
+
+ handleLogoutClick(i: Navbar) {
+ i.state.expandUserDropdown = false;
UserService.Instance.logout();
}
+ handleOverviewClick(i: Navbar) {
+ i.state.expandUserDropdown = false;
+ i.setState(i.state);
+ let userPage = `/user/${UserService.Instance.user.id}`;
+ i.context.router.history.push(userPage);
+ }
+
expandNavbar(i: Navbar) {
i.state.expanded = !i.state.expanded;
i.setState(i.state);
}
}
+
<ul class="list-inline mb-0 text-muted small">
<li className="list-inline-item">
<span>by </span>
- <Link to={`/user/${post.creator_id}`}>{post.creator_name}</Link>
+ <Link className="text-info" to={`/user/${post.creator_id}`}>{post.creator_name}</Link>
{this.props.showCommunity &&
<span>
<span> to </span>
</span>
</li>
<li className="list-inline-item">
- <Link to={`/post/${post.id}`}>{post.number_of_comments} Comments</Link>
+ <Link className="text-muted" to={`/post/${post.id}`}>{post.number_of_comments} Comments</Link>
</li>
</ul>
{this.myPost &&