import React from 'react'; import { NavLink } from 'react-router-dom'; import { OauthService, StorageService } from '../../services'; import { AppStore } from '../../stores'; import './navbar.scss'; interface Props { appStore: AppStore; onNavClick: () => void; } interface State { oauthUrl?: string; } export class Navbar extends React.Component { constructor(props: Props) { super(props); this.state = {}; } componentDidMount() { this.loadOauthUrl(); } async loadOauthUrl() { const oauthUrl = await OauthService.getOauthUrl(); if (oauthUrl) { this.setState({ oauthUrl }); } } private logout = () => { StorageService.clear(); window.location.href = '/'; }; renderLoginButton() { const { claims } = this.props.appStore; if (!this.state.oauthUrl) { return null; } return !claims ? ( Login ) : ( Logout ); } renderNavLink = (title: string, to: string, params?: any) => { return ( {title} ); }; render() { const { claims, navbarOpen, hasModPermissions, hasAdminPermissions } = this.props.appStore; const openClass = navbarOpen ? 'navbar--open' : ''; return (
{this.renderNavLink('Soundboard', '/', { exact: true })} {hasModPermissions() && this.renderNavLink('Upload History', '/upload-history')} {this.renderNavLink('Video Archive', '/video-archive')} {this.renderNavLink('Youtube Downloader', '/downloader')} {this.renderNavLink('Clips', '/clips')} {this.renderNavLink('Stats', '/stats')} {hasAdminPermissions() && this.renderNavLink('Admin', '/admin')} {this.renderLoginButton()} {claims && claims.email &&
{claims.email}
}
); } }