2024-03-01 18:19:33 +03:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
import clsx from 'clsx';
|
|
|
|
import { useMemo, useState } from 'react';
|
|
|
|
import { LuReplace } from 'react-icons/lu';
|
|
|
|
|
2024-03-20 15:27:32 +03:00
|
|
|
import ConstituentaSelector from '@/components/select/ConstituentaSelector';
|
2024-03-01 18:19:33 +03:00
|
|
|
import Checkbox from '@/components/ui/Checkbox';
|
|
|
|
import FlexColumn from '@/components/ui/FlexColumn';
|
|
|
|
import Label from '@/components/ui/Label';
|
|
|
|
import Modal, { ModalProps } from '@/components/ui/Modal';
|
|
|
|
import { useRSForm } from '@/context/RSFormContext';
|
|
|
|
import { IConstituenta, ICstSubstituteData } from '@/models/rsform';
|
|
|
|
|
|
|
|
interface DlgSubstituteCstProps extends Pick<ModalProps, 'hideWindow'> {
|
|
|
|
onSubstitute: (data: ICstSubstituteData) => void;
|
|
|
|
}
|
|
|
|
|
|
|
|
function DlgSubstituteCst({ hideWindow, onSubstitute }: DlgSubstituteCstProps) {
|
|
|
|
const { schema } = useRSForm();
|
|
|
|
|
|
|
|
const [original, setOriginal] = useState<IConstituenta | undefined>(undefined);
|
|
|
|
const [substitution, setSubstitution] = useState<IConstituenta | undefined>(undefined);
|
|
|
|
const [transferTerm, setTransferTerm] = useState(false);
|
|
|
|
|
|
|
|
const canSubmit = useMemo(() => {
|
|
|
|
return !!original && !!substitution && substitution.id !== original.id;
|
|
|
|
}, [original, substitution]);
|
|
|
|
|
|
|
|
function handleSubmit() {
|
|
|
|
const data: ICstSubstituteData = {
|
|
|
|
original: original!.id,
|
|
|
|
substitution: substitution!.id,
|
|
|
|
transfer_term: transferTerm
|
|
|
|
};
|
|
|
|
onSubstitute(data);
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
|
|
<Modal
|
|
|
|
header='Отождествление конституенты'
|
|
|
|
submitText='Отождествить'
|
|
|
|
submitInvalidTooltip={'Выберите две различные конституенты'}
|
|
|
|
hideWindow={hideWindow}
|
|
|
|
canSubmit={canSubmit}
|
|
|
|
onSubmit={handleSubmit}
|
2024-03-21 17:48:42 +03:00
|
|
|
className={clsx('w-[25rem]', 'px-6 py-3 flex flex-col gap-3 justify-center items-center')}
|
2024-03-01 18:19:33 +03:00
|
|
|
>
|
|
|
|
<FlexColumn>
|
|
|
|
<Label text='Удаляемая конституента' />
|
2024-03-21 17:48:42 +03:00
|
|
|
<ConstituentaSelector
|
|
|
|
className='w-[20rem]'
|
|
|
|
items={schema?.items}
|
|
|
|
value={original}
|
|
|
|
onSelectValue={setOriginal}
|
|
|
|
/>
|
2024-03-01 18:19:33 +03:00
|
|
|
</FlexColumn>
|
2024-03-08 19:37:36 +03:00
|
|
|
|
|
|
|
<LuReplace size='3rem' className='icon-primary' />
|
|
|
|
|
2024-03-01 18:19:33 +03:00
|
|
|
<FlexColumn>
|
|
|
|
<Label text='Подставляемая конституента' />
|
2024-03-21 17:48:42 +03:00
|
|
|
<ConstituentaSelector
|
|
|
|
className='w-[20rem]'
|
|
|
|
items={schema?.items}
|
|
|
|
value={substitution}
|
|
|
|
onSelectValue={setSubstitution}
|
|
|
|
/>
|
2024-03-01 18:19:33 +03:00
|
|
|
</FlexColumn>
|
|
|
|
<Checkbox
|
|
|
|
className='mt-3'
|
|
|
|
label='Сохранить термин удаляемой конституенты'
|
|
|
|
value={transferTerm}
|
|
|
|
setValue={setTransferTerm}
|
|
|
|
/>
|
|
|
|
</Modal>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default DlgSubstituteCst;
|