ConceptPortal-public/rsconcept/frontend/src/dialogs/DlgSubstituteCst.tsx

71 lines
2.5 KiB
TypeScript
Raw Normal View History

'use client';
import clsx from 'clsx';
import { useMemo, useState } from 'react';
import { LuReplace } from 'react-icons/lu';
import ConstituentaSelector from '@/components/ConstituentaSelector';
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}
className={clsx('w-[30rem]', 'px-6 py-3 flex flex-col gap-3 justify-center items-center')}
>
<FlexColumn>
<Label text='Удаляемая конституента' />
<ConstituentaSelector items={schema?.items} value={original} onSelectValue={setOriginal} />
</FlexColumn>
<div className=''>
<LuReplace size='3rem' className='clr-text-primary' />
</div>
<FlexColumn>
<Label text='Подставляемая конституента' />
<ConstituentaSelector items={schema?.items} value={substitution} onSelectValue={setSubstitution} />
</FlexColumn>
<Checkbox
className='mt-3'
label='Сохранить термин удаляемой конституенты'
value={transferTerm}
setValue={setTransferTerm}
/>
</Modal>
);
}
export default DlgSubstituteCst;