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.
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import React from 'react';
|
|
|
|
import {
|
|
Menu,
|
|
Button,
|
|
Icon,
|
|
Upload,
|
|
} from 'antd';
|
|
|
|
import { RcFile } from 'antd/lib/upload';
|
|
import Text from 'antd/lib/typography/Text';
|
|
|
|
interface LoaderItemComponentProps {
|
|
taskInstance: any;
|
|
loader: any;
|
|
loadActivity: string | null;
|
|
onLoadAnnotation: (taskInstance: any, loader: any, file: File) => void;
|
|
}
|
|
|
|
export default function LoaderItemComponent(props: LoaderItemComponentProps) {
|
|
const { loader } = props;
|
|
|
|
const loadingWithThisLoader = props.loadActivity
|
|
&& props.loadActivity === loader.name
|
|
? props.loadActivity : null;
|
|
|
|
const pending = !!loadingWithThisLoader;
|
|
|
|
return (
|
|
<Menu.Item className='cvat-actions-menu-load-submenu-item' key={loader.name}>
|
|
<Upload
|
|
accept={`.${loader.format}`}
|
|
multiple={false}
|
|
showUploadList={ false }
|
|
beforeUpload={(file: RcFile) => {
|
|
props.onLoadAnnotation(
|
|
props.taskInstance,
|
|
loader,
|
|
file as File,
|
|
);
|
|
|
|
return false;
|
|
}}>
|
|
<Button block={true} type='link' disabled={!!props.loadActivity}>
|
|
<Icon type='upload'/>
|
|
<Text>{loader.name}</Text>
|
|
{pending && <Icon type='loading'/>}
|
|
</Button>
|
|
</Upload>
|
|
</Menu.Item>
|
|
);
|
|
} |