You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.1 KiB
TypeScript
87 lines
3.1 KiB
TypeScript
import React from 'react';
|
|
|
|
import { RouteComponentProps } from 'react-router';
|
|
import { withRouter } from 'react-router-dom';
|
|
|
|
import {
|
|
Layout,
|
|
Radio,
|
|
Icon,
|
|
Button,
|
|
Menu,
|
|
Modal,
|
|
} from 'antd';
|
|
|
|
import Text from 'antd/lib/typography/Text';
|
|
|
|
interface HeaderContainerProps {
|
|
onLogout: () => void;
|
|
username: string;
|
|
logoutError: string;
|
|
}
|
|
|
|
function HeaderContainer(props: HeaderContainerProps & RouteComponentProps) {
|
|
const cvatLogo = () => (<img src='/assets/cvat-logo.svg'/>);
|
|
const backLogo = () => (<img src='/assets/icon-playcontrol-previous.svg'/>);
|
|
const userLogo = () => (<img src='/assets/icon-account.svg' />);
|
|
|
|
if (props.logoutError) {
|
|
Modal.error({
|
|
title: 'Could not logout',
|
|
content: `${props.logoutError}`,
|
|
});
|
|
}
|
|
|
|
let activeTab = null;
|
|
|
|
if (props.history.location.pathname === '/tasks') {
|
|
activeTab = 'tasks';
|
|
} else if (props.history.location.pathname === '/models') {
|
|
activeTab = 'models';
|
|
}
|
|
|
|
return (
|
|
<Layout.Header className='cvat-header'>
|
|
<div className='left-header'>
|
|
<Icon className='cvat-logo-icon' component={cvatLogo}/>
|
|
<Icon className='cvat-back-icon' component={backLogo}/>
|
|
|
|
<Radio.Group size='default' value={activeTab} className='cvat-header-buttons'>
|
|
<Radio.Button value='tasks'onChange={
|
|
() => props.history.push('/tasks')
|
|
}> Tasks </Radio.Button>
|
|
<Radio.Button value='models' onChange={
|
|
() => props.history.push('/models')
|
|
}> Models </Radio.Button>
|
|
<Button className='header-button' type='link' onClick={
|
|
() => window.open('/analytics/app/kibana', '_blank')
|
|
}> Analytics </Button>
|
|
</Radio.Group>
|
|
</div>
|
|
<div className='right-header'>
|
|
<Button className='header-button' type='link' onClick={
|
|
() => window.open('https://github.com/opencv/cvat', '_blank')
|
|
}> <Icon type='github' /> GitHub </Button>
|
|
<Button className='header-button' type='link' onClick={
|
|
() => window.open('/documentation/user_guide.html', '_blank')
|
|
}> Help </Button>
|
|
<Menu className='cvat-header-menu' subMenuCloseDelay={0.1} mode='horizontal'>
|
|
<Menu.SubMenu title={
|
|
<span>
|
|
<Icon className='cvat-header-user-icon' component={userLogo} />
|
|
<span>
|
|
<Text strong> {props.username} </Text>
|
|
<Icon className='cvat-header-menu-icon' component={backLogo} />
|
|
</span>
|
|
</span>
|
|
}>
|
|
<Menu.Item onClick={props.onLogout}>Logout</Menu.Item>
|
|
</Menu.SubMenu>
|
|
</Menu>
|
|
</div>
|
|
</Layout.Header>
|
|
);
|
|
}
|
|
|
|
export default withRouter(HeaderContainer);
|