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.
163 lines
4.7 KiB
TypeScript
163 lines
4.7 KiB
TypeScript
// Copyright (C) 2020-2021 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import React, { useState } from 'react';
|
|
import { Row, Col } from 'antd/lib/grid';
|
|
import { MoreOutlined } from '@ant-design/icons';
|
|
import Dropdown from 'antd/lib/dropdown';
|
|
import Text from 'antd/lib/typography/Text';
|
|
|
|
import { ObjectType, ShapeType, ColorBy } from 'reducers/interfaces';
|
|
import CVATTooltip from 'components/common/cvat-tooltip';
|
|
import LabelSelector from 'components/label-selector/label-selector';
|
|
import ItemMenu from './object-item-menu';
|
|
|
|
interface Props {
|
|
jobInstance: any;
|
|
readonly: boolean;
|
|
clientID: number;
|
|
serverID: number | undefined;
|
|
labelID: number;
|
|
labels: any[];
|
|
shapeType: ShapeType;
|
|
objectType: ObjectType;
|
|
color: string;
|
|
colorBy: ColorBy;
|
|
type: string;
|
|
locked: boolean;
|
|
changeColorShortcut: string;
|
|
copyShortcut: string;
|
|
pasteShortcut: string;
|
|
propagateShortcut: string;
|
|
toBackgroundShortcut: string;
|
|
toForegroundShortcut: string;
|
|
removeShortcut: string;
|
|
changeColor(color: string): void;
|
|
changeLabel(label: any): void;
|
|
copy(): void;
|
|
remove(): void;
|
|
propagate(): void;
|
|
createURL(): void;
|
|
switchOrientation(): void;
|
|
toBackground(): void;
|
|
toForeground(): void;
|
|
resetCuboidPerspective(): void;
|
|
}
|
|
|
|
function ItemTopComponent(props: Props): JSX.Element {
|
|
const {
|
|
readonly,
|
|
clientID,
|
|
serverID,
|
|
labelID,
|
|
labels,
|
|
shapeType,
|
|
objectType,
|
|
color,
|
|
colorBy,
|
|
type,
|
|
locked,
|
|
changeColorShortcut,
|
|
copyShortcut,
|
|
pasteShortcut,
|
|
propagateShortcut,
|
|
toBackgroundShortcut,
|
|
toForegroundShortcut,
|
|
removeShortcut,
|
|
changeColor,
|
|
changeLabel,
|
|
copy,
|
|
remove,
|
|
propagate,
|
|
createURL,
|
|
switchOrientation,
|
|
toBackground,
|
|
toForeground,
|
|
resetCuboidPerspective,
|
|
jobInstance,
|
|
} = props;
|
|
|
|
const [menuVisible, setMenuVisible] = useState(false);
|
|
const [colorPickerVisible, setColorPickerVisible] = useState(false);
|
|
|
|
const changeMenuVisible = (visible: boolean): void => {
|
|
if (!visible && colorPickerVisible) return;
|
|
setMenuVisible(visible);
|
|
};
|
|
|
|
const changeColorPickerVisible = (visible: boolean): void => {
|
|
if (!visible) {
|
|
setMenuVisible(false);
|
|
}
|
|
setColorPickerVisible(visible);
|
|
};
|
|
|
|
return (
|
|
<Row align='middle'>
|
|
<Col span={10}>
|
|
<Text style={{ fontSize: 12 }}>{clientID}</Text>
|
|
<br />
|
|
<Text
|
|
type='secondary'
|
|
style={{ fontSize: 10 }}
|
|
className='cvat-objects-sidebar-state-item-object-type-text'
|
|
>
|
|
{type}
|
|
</Text>
|
|
</Col>
|
|
<Col span={12}>
|
|
<CVATTooltip title='Change current label'>
|
|
<LabelSelector
|
|
disabled={readonly}
|
|
size='small'
|
|
labels={labels}
|
|
value={labelID}
|
|
onChange={changeLabel}
|
|
className='cvat-objects-sidebar-state-item-label-selector'
|
|
/>
|
|
</CVATTooltip>
|
|
</Col>
|
|
<Col span={2}>
|
|
<Dropdown
|
|
visible={menuVisible}
|
|
onVisibleChange={changeMenuVisible}
|
|
placement='bottomLeft'
|
|
overlay={ItemMenu({
|
|
jobInstance,
|
|
readonly,
|
|
serverID,
|
|
locked,
|
|
shapeType,
|
|
objectType,
|
|
color,
|
|
colorBy,
|
|
colorPickerVisible,
|
|
changeColorShortcut,
|
|
copyShortcut,
|
|
pasteShortcut,
|
|
propagateShortcut,
|
|
toBackgroundShortcut,
|
|
toForegroundShortcut,
|
|
removeShortcut,
|
|
changeColor,
|
|
copy,
|
|
remove,
|
|
propagate,
|
|
createURL,
|
|
switchOrientation,
|
|
toBackground,
|
|
toForeground,
|
|
resetCuboidPerspective,
|
|
changeColorPickerVisible,
|
|
})}
|
|
>
|
|
<MoreOutlined />
|
|
</Dropdown>
|
|
</Col>
|
|
</Row>
|
|
);
|
|
}
|
|
|
|
export default React.memo(ItemTopComponent);
|