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

92 lines
2.8 KiB
TypeScript
Raw Normal View History

'use client';
import clsx from 'clsx';
2023-12-01 22:50:43 +03:00
import { useState } from 'react';
import { TabList, TabPanel, Tabs } from 'react-tabs';
2024-04-01 19:07:20 +03:00
import BadgeHelp from '@/components/man/BadgeHelp';
import Modal from '@/components/ui/Modal';
import Overlay from '@/components/ui/Overlay';
import TabLabel from '@/components/ui/TabLabel';
import { ReferenceType } from '@/models/language';
2023-12-26 14:23:51 +03:00
import { HelpTopic } from '@/models/miscellaneous';
import { IConstituenta } from '@/models/rsform';
import { labelReferenceType } from '@/utils/labels';
2023-12-01 22:50:43 +03:00
import EntityTab from './EntityTab';
import SyntacticTab from './SyntacticTab';
export interface IReferenceInputState {
2023-12-28 14:04:44 +03:00
type: ReferenceType;
refRaw?: string;
text?: string;
mainRefs: string[];
basePosition: number;
}
interface DlgEditReferenceProps {
2023-12-28 14:04:44 +03:00
hideWindow: () => void;
items: IConstituenta[];
initial: IReferenceInputState;
onSave: (newRef: string) => void;
}
2023-12-01 22:50:43 +03:00
export enum TabID {
ENTITY = 0,
SYNTACTIC = 1
}
2023-12-01 22:50:43 +03:00
function DlgEditReference({ hideWindow, items, initial, onSave }: DlgEditReferenceProps) {
const [activeTab, setActiveTab] = useState(initial.type === ReferenceType.ENTITY ? TabID.ENTITY : TabID.SYNTACTIC);
2023-12-01 22:50:43 +03:00
const [reference, setReference] = useState('');
const [isValid, setIsValid] = useState(false);
2023-12-28 14:04:44 +03:00
2023-12-01 22:50:43 +03:00
const handleSubmit = () => onSave(reference);
2023-12-28 14:04:44 +03:00
return (
2023-12-28 14:04:44 +03:00
<Modal
header='Редактирование ссылки'
submitText='Сохранить ссылку'
hideWindow={hideWindow}
canSubmit={isValid}
onSubmit={handleSubmit}
className='w-[40rem] px-6 min-h-[34rem]'
>
2023-12-28 14:04:44 +03:00
<Overlay position='top-0 right-[4rem]'>
2024-04-01 19:07:20 +03:00
<BadgeHelp topic={HelpTopic.TERM_CONTROL} className='max-w-[35rem]' offset={14} />
2023-12-28 14:04:44 +03:00
</Overlay>
<Tabs
selectedTabClassName='clr-selected'
className='flex flex-col'
selectedIndex={activeTab}
onSelect={setActiveTab}
>
<TabList className={clsx('mb-3 self-center', 'flex', 'border divide-x rounded-none')}>
<TabLabel
2023-12-28 14:04:44 +03:00
title='Отсылка на термин в заданной словоформе'
label={labelReferenceType(ReferenceType.ENTITY)}
className='w-[12rem]'
/>
<TabLabel
2023-12-28 14:04:44 +03:00
title='Установление синтаксической связи с отсылкой на термин'
label={labelReferenceType(ReferenceType.SYNTACTIC)}
className='w-[12rem]'
/>
</TabList>
<TabPanel>
<EntityTab initial={initial} items={items} setReference={setReference} setIsValid={setIsValid} />
</TabPanel>
2023-12-28 14:04:44 +03:00
<TabPanel>
<SyntacticTab initial={initial} setReference={setReference} setIsValid={setIsValid} />
</TabPanel>
</Tabs>
</Modal>
);
}
2023-12-28 14:04:44 +03:00
export default DlgEditReference;