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.

111 lines
3.6 KiB
TypeScript

// Copyright (C) 2020 Intel Corporation
//
// SPDX-License-Identifier: MIT
import React from 'react';
import { Col } from 'antd/lib/grid';
import Icon from 'antd/lib/icon';
import Modal from 'antd/lib/modal';
import Button from 'antd/lib/button';
import Timeline from 'antd/lib/timeline';
import Dropdown from 'antd/lib/dropdown';
import AnnotationMenuContainer from 'containers/annotation-page/top-bar/annotation-menu';
import {
MainMenuIcon,
SaveIcon,
UndoIcon,
RedoIcon,
} from 'icons';
interface Props {
saving: boolean;
savingStatuses: string[];
undoAction?: string;
redoAction?: string;
saveShortcut: string;
undoShortcut: string;
redoShortcut: string;
onSaveAnnotation(): void;
onUndoClick(): void;
onRedoClick(): void;
}
function LeftGroup(props: Props): JSX.Element {
const {
saving,
savingStatuses,
undoAction,
redoAction,
saveShortcut,
undoShortcut,
redoShortcut,
onSaveAnnotation,
onUndoClick,
onRedoClick,
} = props;
return (
<Col className='cvat-annotation-header-left-group'>
<Dropdown overlay={<AnnotationMenuContainer />}>
<Button type='link' className='cvat-annotation-header-button'>
<Icon component={MainMenuIcon} />
Menu
</Button>
</Dropdown>
<Button
title={`Save current changes ${saveShortcut}`}
onClick={saving ? undefined : onSaveAnnotation}
type='link'
className={saving
? 'cvat-annotation-disabled-header-button'
: 'cvat-annotation-header-button'}
>
<Icon component={SaveIcon} />
{ saving ? 'Saving...' : 'Save' }
<Modal
title='Saving changes on the server'
visible={saving}
footer={[]}
closable={false}
>
<Timeline pending={savingStatuses[savingStatuses.length - 1] || 'Pending..'}>
{
savingStatuses.slice(0, -1)
.map((
status: string,
id: number,
// eslint-disable-next-line react/no-array-index-key
) => <Timeline.Item key={id}>{status}</Timeline.Item>)
}
</Timeline>
</Modal>
</Button>
<Button
title={`Undo: ${undoAction} ${undoShortcut}`}
disabled={!undoAction}
style={{ pointerEvents: undoAction ? 'initial' : 'none', opacity: undoAction ? 1 : 0.5 }}
type='link'
className='cvat-annotation-header-button'
onClick={onUndoClick}
>
<Icon component={UndoIcon} />
<span>Undo</span>
</Button>
<Button
title={`Redo: ${redoAction} ${redoShortcut}`}
disabled={!redoAction}
style={{ pointerEvents: redoAction ? 'initial' : 'none', opacity: redoAction ? 1 : 0.5 }}
type='link'
className='cvat-annotation-header-button'
onClick={onRedoClick}
>
<Icon component={RedoIcon} />
Redo
</Button>
</Col>
);
}
export default React.memo(LeftGroup);