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.
156 lines
5.3 KiB
TypeScript
156 lines
5.3 KiB
TypeScript
import React from 'react';
|
|
|
|
import { RouteComponentProps } from 'react-router';
|
|
import { withRouter } from 'react-router-dom';
|
|
|
|
import {
|
|
Layout,
|
|
Icon,
|
|
Button,
|
|
Menu,
|
|
} from 'antd';
|
|
|
|
import Text from 'antd/lib/typography/Text';
|
|
|
|
import getCore from '../../core';
|
|
|
|
const core = getCore();
|
|
const serverHost = core.config.backendAPI.slice(0, -7);
|
|
|
|
interface HeaderContainerProps {
|
|
onLogout: () => void;
|
|
logoutFetching: boolean;
|
|
installedAnalytics: boolean;
|
|
installedAutoAnnotation: boolean;
|
|
installedTFAnnotation: boolean;
|
|
installedTFSegmentation: boolean;
|
|
username: string;
|
|
}
|
|
|
|
type Props = HeaderContainerProps & RouteComponentProps;
|
|
|
|
const cvatLogo = (): JSX.Element => <img alt='' src='/assets/cvat-logo.svg' />;
|
|
const userLogo = (): JSX.Element => <img alt='' src='/assets/icon-account.svg' />;
|
|
|
|
function HeaderContainer(props: Props): JSX.Element {
|
|
const {
|
|
installedTFSegmentation,
|
|
installedAutoAnnotation,
|
|
installedTFAnnotation,
|
|
installedAnalytics,
|
|
username,
|
|
onLogout,
|
|
logoutFetching,
|
|
} = props;
|
|
|
|
const renderModels = installedAutoAnnotation
|
|
|| installedTFAnnotation
|
|
|| installedTFSegmentation;
|
|
|
|
return (
|
|
<Layout.Header className='cvat-header'>
|
|
<div className='cvat-left-header'>
|
|
<Icon className='cvat-logo-icon' component={cvatLogo} />
|
|
|
|
<Button
|
|
className='cvat-header-button'
|
|
type='link'
|
|
value='tasks'
|
|
onClick={
|
|
(): void => props.history.push('/tasks')
|
|
}
|
|
>
|
|
Tasks
|
|
</Button>
|
|
{ renderModels
|
|
&& (
|
|
<Button
|
|
className='cvat-header-button'
|
|
type='link'
|
|
value='models'
|
|
onClick={
|
|
(): void => props.history.push('/models')
|
|
}
|
|
>
|
|
Models
|
|
</Button>
|
|
)
|
|
}
|
|
{ installedAnalytics
|
|
&& (
|
|
<Button
|
|
className='cvat-header-button'
|
|
type='link'
|
|
onClick={
|
|
(): void => {
|
|
// false positive
|
|
// eslint-disable-next-line
|
|
window.open(`${serverHost}/analytics/app/kibana`, '_blank');
|
|
}
|
|
}
|
|
>
|
|
Analytics
|
|
</Button>
|
|
)
|
|
}
|
|
</div>
|
|
<div className='cvat-right-header'>
|
|
<Button
|
|
className='cvat-header-button'
|
|
type='link'
|
|
onClick={
|
|
(): void => {
|
|
window.open('https://github.com/opencv/cvat', '_blank');
|
|
}
|
|
}
|
|
>
|
|
<Icon type='github' />
|
|
<Text className='cvat-black-color'>GitHub</Text>
|
|
</Button>
|
|
<Button
|
|
className='cvat-header-button'
|
|
type='link'
|
|
onClick={
|
|
(): void => {
|
|
// false positive
|
|
// eslint-disable-next-line
|
|
window.open(`${serverHost}/documentation/user_guide.html`, '_blank')
|
|
}
|
|
}
|
|
>
|
|
<Icon type='question-circle' />
|
|
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>
|
|
{username.length > 14 ? `${username.slice(0, 10)} ...` : username}
|
|
</Text>
|
|
<Icon className='cvat-header-menu-icon' type='caret-down' />
|
|
</span>
|
|
</span>
|
|
)
|
|
}
|
|
>
|
|
<Menu.Item
|
|
onClick={onLogout}
|
|
disabled={logoutFetching}
|
|
className='cvat-header-button'
|
|
>
|
|
{logoutFetching && <Icon type='loading' />}
|
|
Logout
|
|
</Menu.Item>
|
|
</Menu.SubMenu>
|
|
</Menu>
|
|
</div>
|
|
</Layout.Header>
|
|
);
|
|
}
|
|
|
|
export default withRouter(HeaderContainer);
|