// Copyright (C) 2021-2022 Intel Corporation // Copyright (C) 2023 CVAT.ai Corporation // // SPDX-License-Identifier: MIT import React, { useEffect } from 'react'; import { DeleteOutlined, PlusCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons'; import Button from 'antd/lib/button'; import Col from 'antd/lib/col'; import Form, { RuleObject } from 'antd/lib/form'; import { FormListFieldData, FormListOperation } from 'antd/lib/form/FormList'; import Input from 'antd/lib/input'; import Row from 'antd/lib/row'; import Tooltip from 'antd/lib/tooltip'; import config from 'config'; interface Props { form: any; manifestNames: string[]; setManifestNames: (manifestNames: string[]) => void; } export default function ManifestsManager(props: Props): JSX.Element { const { form, manifestNames, setManifestNames } = props; const { DATASET_MANIFEST_GUIDE_URL } = config; const updateManifestFields = (): void => { const newManifestFormItems = manifestNames.map((name, idx) => ({ id: idx, name, })); form.setFieldsValue({ manifests: [...newManifestFormItems], }); }; useEffect(() => { updateManifestFields(); }, [manifestNames]); const onChangeManifestPath = (manifestName: string | undefined, manifestId: number): void => { if (manifestName !== undefined) { setManifestNames(manifestNames.map((name, idx) => (idx !== manifestId ? name : manifestName))); } }; const onDeleteManifestItem = (key: number): void => { setManifestNames(manifestNames.filter((name, idx) => idx !== key)); }; const onAddManifestItem = (): void => { setManifestNames(manifestNames.concat([''])); }; return ( <> Manifests )} required /> => { if (!names || !names.length) { throw new Error('Please, specify at least one manifest file'); } }, }, ]} > { (fields: FormListFieldData[], _: FormListOperation, { errors }: { errors: React.ReactNode[] }) => ( <> {fields.map((field, idx): JSX.Element => ( onChangeManifestPath(event.target.value, idx)} /> ))} ) } ); }