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.

132 lines
4.1 KiB
TypeScript

// Copyright (C) 2020-2022 Intel Corporation
// Copyright (C) 2022 CVAT.ai Corporation
//
// SPDX-License-Identifier: MIT
import React, { RefObject } from 'react';
import Input from 'antd/lib/input';
import Text from 'antd/lib/typography/Text';
import Tooltip from 'antd/lib/tooltip';
import Form, { FormInstance } from 'antd/lib/form';
import { QuestionCircleOutlined } from '@ant-design/icons';
export interface BaseConfiguration {
name: string;
}
interface Props {
onChange(values: BaseConfiguration): void;
many: boolean;
exampleMultiTaskName?: string;
}
export default class BasicConfigurationForm extends React.PureComponent<Props> {
private formRef: RefObject<FormInstance>;
private inputRef: RefObject<Input>;
private initialName: string;
public constructor(props: Props) {
super(props);
this.formRef = React.createRef<FormInstance>();
this.inputRef = React.createRef<Input>();
const { many } = this.props;
this.initialName = many ? '{{file_name}}' : '';
}
componentDidMount(): void {
const { onChange } = this.props;
onChange({
name: this.initialName,
});
}
private handleChangeName(e: React.ChangeEvent<HTMLInputElement>): void {
const { onChange } = this.props;
onChange({
name: e.target.value,
});
}
public submit(): Promise<void> {
if (this.formRef.current) {
return this.formRef.current.validateFields();
}
return Promise.reject(new Error('Form ref is empty'));
}
public resetFields(): void {
if (this.formRef.current) {
this.formRef.current.resetFields();
}
}
public focus(): void {
if (this.inputRef.current) {
this.inputRef.current.focus();
}
}
public render(): JSX.Element {
const { many, exampleMultiTaskName } = this.props;
return (
<Form ref={this.formRef} layout='vertical'>
<Form.Item
hasFeedback
name='name'
label={<span>Name</span>}
rules={[
{
required: true,
message: 'Task name cannot be empty',
},
]}
initialValue={this.initialName}
>
<Input
ref={this.inputRef}
onChange={(e) => this.handleChangeName(e)}
/>
</Form.Item>
{many ? (
<Text type='secondary'>
<Tooltip title={() => (
<>
You can substitute in the template:
<ul>
<li>
some_text - any text
</li>
<li>
{'{{'}
index
{'}}'}
&nbsp;- index file in set
</li>
<li>
{'{{'}
file_name
{'}}'}
&nbsp;- name of file
</li>
</ul>
Example:&nbsp;
<i>
{exampleMultiTaskName || 'Task name 1 - video_1.mp4'}
</i>
</>
)}
>
When forming the name, a template is used.
{' '}
<QuestionCircleOutlined />
</Tooltip>
</Text>
) : null}
</Form>
);
}
}