ConceptPortal-public/rsconcept/frontend/src/pages/RSFormPage/DlgCloneRSForm.tsx

89 lines
2.7 KiB
TypeScript
Raw Normal View History

2023-07-28 01:37:26 +03:00
import { useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { toast } from 'react-toastify';
import Checkbox from '../../components/Common/Checkbox';
import Modal from '../../components/Common/Modal';
import TextArea from '../../components/Common/TextArea';
import TextInput from '../../components/Common/TextInput';
import { useLibrary } from '../../context/LibraryContext';
2023-07-28 01:37:26 +03:00
import { useRSForm } from '../../context/RSFormContext';
import { IRSFormCreateData } from '../../utils/models';
import { getCloneTitle } from '../../utils/staticUI';
interface DlgCloneRSFormProps {
hideWindow: () => void
}
2023-07-29 03:31:21 +03:00
function DlgCloneRSForm({ hideWindow }: DlgCloneRSFormProps) {
2023-07-28 01:37:26 +03:00
const navigate = useNavigate();
const [title, setTitle] = useState('');
const [alias, setAlias] = useState('');
const [comment, setComment] = useState('');
const [common, setCommon] = useState(false);
2023-08-25 22:51:20 +03:00
const [canonical, setCanonical] = useState(false);
2023-07-28 01:37:26 +03:00
const { cloneSchema } = useLibrary();
const { schema } = useRSForm();
2023-07-28 01:37:26 +03:00
useEffect(() => {
if (schema) {
2023-08-25 22:51:20 +03:00
setTitle(getCloneTitle(schema));
setAlias(schema.alias);
setComment(schema.comment);
setCommon(schema.is_common);
setCanonical(false);
2023-07-28 01:37:26 +03:00
}
}, [schema, schema?.title, schema?.alias, schema?.comment, schema?.is_common]);
const handleSubmit = () => {
if (!schema) {
return;
}
2023-07-28 01:37:26 +03:00
const data: IRSFormCreateData = {
2023-08-25 22:51:20 +03:00
item_type: schema.item_type,
2023-07-28 01:37:26 +03:00
title: title,
alias: alias,
comment: comment,
2023-08-25 22:51:20 +03:00
is_common: common,
is_canonical: canonical
2023-07-28 01:37:26 +03:00
};
cloneSchema(schema.id, data, newSchema => {
2023-07-28 01:37:26 +03:00
toast.success(`Схема создана: ${newSchema.alias}`);
navigate(`/rsforms/${newSchema.id}`);
});
};
return (
<Modal
title='Создание копии концептуальной схемы'
hideWindow={hideWindow}
canSubmit={true}
submitText='Создать'
onSubmit={handleSubmit}
>
<TextInput id='title' label='Полное название' type='text'
required
value={title}
onChange={event => { setTitle(event.target.value); }}
/>
<TextInput id='alias' label='Сокращение' type='text'
required
value={alias}
widthClass='max-w-sm'
onChange={event => { setAlias(event.target.value); }}
/>
<TextArea id='comment' label='Комментарий'
value={comment}
onChange={event => { setComment(event.target.value); }}
/>
<Checkbox id='common' label='Общедоступная схема'
value={common}
onChange={event => { setCommon(event.target.checked); }}
/>
</Modal>
2023-07-29 03:31:21 +03:00
);
2023-07-28 01:37:26 +03:00
}
export default DlgCloneRSForm;