2023-12-13 14:32:57 +03:00
|
|
|
'use client';
|
|
|
|
|
2023-12-18 19:42:27 +03:00
|
|
|
import clsx from 'clsx';
|
2023-12-04 14:19:54 +03:00
|
|
|
import { useEffect, useMemo, useState } from 'react';
|
|
|
|
import { toast } from 'react-toastify';
|
|
|
|
|
2024-01-04 19:38:12 +03:00
|
|
|
import Checkbox from '@/components/ui/Checkbox';
|
|
|
|
import Modal, { ModalProps } from '@/components/ui/Modal';
|
|
|
|
import TextArea from '@/components/ui/TextArea';
|
|
|
|
import TextInput from '@/components/ui/TextInput';
|
2023-12-13 14:32:57 +03:00
|
|
|
import { useLibrary } from '@/context/LibraryContext';
|
2023-12-26 14:23:51 +03:00
|
|
|
import { useConceptNavigation } from '@/context/NavigationContext';
|
2023-12-13 14:32:57 +03:00
|
|
|
import { ILibraryItem } from '@/models/library';
|
2024-01-04 14:35:46 +03:00
|
|
|
import { cloneTitle } from '@/models/libraryAPI';
|
2023-12-13 14:32:57 +03:00
|
|
|
import { IRSFormCreateData } from '@/models/rsform';
|
2023-12-18 19:42:27 +03:00
|
|
|
import { classnames } from '@/utils/constants';
|
2023-12-04 14:19:54 +03:00
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
interface DlgCloneLibraryItemProps extends Pick<ModalProps, 'hideWindow'> {
|
|
|
|
base: ILibraryItem;
|
2023-12-04 14:19:54 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function DlgCloneLibraryItem({ hideWindow, base }: DlgCloneLibraryItemProps) {
|
2023-12-13 14:32:57 +03:00
|
|
|
const router = useConceptNavigation();
|
2023-12-04 14:19:54 +03:00
|
|
|
const [title, setTitle] = useState('');
|
|
|
|
const [alias, setAlias] = useState('');
|
|
|
|
const [comment, setComment] = useState('');
|
|
|
|
const [common, setCommon] = useState(false);
|
|
|
|
const [canonical, setCanonical] = useState(false);
|
|
|
|
|
|
|
|
const { cloneItem } = useLibrary();
|
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
const canSubmit = useMemo(() => title !== '' && alias !== '', [title, alias]);
|
2023-12-04 14:19:54 +03:00
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
if (base) {
|
|
|
|
setTitle(cloneTitle(base));
|
|
|
|
setAlias(base.alias);
|
|
|
|
setComment(base.comment);
|
|
|
|
setCommon(base.is_common);
|
|
|
|
setCanonical(false);
|
|
|
|
}
|
|
|
|
}, [base, base?.title, base?.alias, base?.comment, base?.is_common]);
|
|
|
|
|
|
|
|
function handleSubmit() {
|
|
|
|
const data: IRSFormCreateData = {
|
|
|
|
item_type: base.item_type,
|
|
|
|
title: title,
|
|
|
|
alias: alias,
|
|
|
|
comment: comment,
|
|
|
|
is_common: common,
|
|
|
|
is_canonical: canonical
|
|
|
|
};
|
|
|
|
cloneItem(base.id, data, newSchema => {
|
|
|
|
toast.success(`Копия создана: ${newSchema.alias}`);
|
2023-12-13 14:32:57 +03:00
|
|
|
router.push(`/rsforms/${newSchema.id}`);
|
2023-12-04 14:19:54 +03:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
2023-12-28 14:04:44 +03:00
|
|
|
<Modal
|
|
|
|
header='Создание копии концептуальной схемы'
|
|
|
|
hideWindow={hideWindow}
|
|
|
|
canSubmit={canSubmit}
|
|
|
|
submitText='Создать'
|
|
|
|
onSubmit={handleSubmit}
|
|
|
|
className={clsx('px-6 py-2', classnames.flex_col)}
|
|
|
|
>
|
|
|
|
<TextInput label='Полное название' value={title} onChange={event => setTitle(event.target.value)} />
|
|
|
|
<TextInput
|
|
|
|
label='Сокращение'
|
|
|
|
value={alias}
|
|
|
|
className='max-w-sm'
|
|
|
|
onChange={event => setAlias(event.target.value)}
|
|
|
|
/>
|
|
|
|
<TextArea label='Комментарий' value={comment} onChange={event => setComment(event.target.value)} />
|
|
|
|
<Checkbox label='Общедоступная схема' value={common} setValue={value => setCommon(value)} />
|
|
|
|
</Modal>
|
|
|
|
);
|
2023-12-04 14:19:54 +03:00
|
|
|
}
|
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
export default DlgCloneLibraryItem;
|