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

108 lines
3.1 KiB
TypeScript
Raw Normal View History

2023-12-01 22:50:43 +03:00
import { useState } from 'react';
import { TabList, TabPanel, Tabs } from 'react-tabs';
2023-12-01 22:50:43 +03:00
import ConceptTab from '../../components/Common/ConceptTab';
2023-11-27 12:11:39 +03:00
import ConceptTooltip from '../../components/Common/ConceptTooltip';
import Modal from '../../components/Common/Modal';
import HelpTerminologyControl from '../../components/Help/HelpTerminologyControl';
import { HelpIcon } from '../../components/Icons';
2023-12-01 22:50:43 +03:00
import { ReferenceType } from '../../models/language';
import { IConstituenta } from '../../models/rsform';
2023-12-01 22:50:43 +03:00
import { labelReferenceType } from '../../utils/labels';
import EntityTab from './EntityTab';
import SyntacticTab from './SyntacticTab';
export interface IReferenceInputState {
type: ReferenceType
refRaw?: string
text?: string
mainRefs: string[]
basePosition: number
}
interface DlgEditReferenceProps {
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);
const handleSubmit = () => onSave(reference);
return (
<Modal
title='Редактирование ссылки'
submitText='Сохранить ссылку'
2023-11-27 02:13:37 +03:00
hideWindow={hideWindow}
canSubmit={isValid}
onSubmit={handleSubmit}
>
2023-11-27 13:06:52 +03:00
<div className='min-w-[40rem] max-w-[40rem] flex flex-col gap-3 mb-2 min-h-[34rem]'>
2023-12-01 22:50:43 +03:00
<Tabs defaultFocus
className='flex flex-col items-center'
selectedTabClassName='clr-selected'
selectedIndex={activeTab}
onSelect={setActiveTab}
>
<div className='flex gap-1 pl-6 mb-3'>
<TabList className='flex border'>
<ConceptTab
label={labelReferenceType(ReferenceType.ENTITY)}
tooltip='Отсылка на термин в заданной словоформе'
className='w-[12rem] border-r-2'
/>
<ConceptTab
label={labelReferenceType(ReferenceType.SYNTACTIC)}
tooltip='Установление синтаксической связи с отсылкой на термин'
className='w-[12rem]'
/>
</TabList>
<div id='terminology-help' className='px-1 py-1'>
<HelpIcon color='text-primary' size={5} />
</div>
<ConceptTooltip
anchorSelect='#terminology-help'
className='max-w-[30rem] z-modal-tooltip'
2023-12-01 22:50:43 +03:00
offset={10}
>
<HelpTerminologyControl />
</ConceptTooltip>
</div>
2023-12-01 22:50:43 +03:00
<div className='w-full'>
<TabPanel>
<EntityTab
initial={initial}
items={items}
setReference={setReference}
setIsValid={setIsValid}
/>
2023-12-01 22:50:43 +03:00
</TabPanel>
2023-12-01 22:50:43 +03:00
<TabPanel>
<SyntacticTab
initial={initial}
setReference={setReference}
setIsValid={setIsValid}
/>
</TabPanel>
</div>
</Tabs>
</div>
</Modal>);
}
export default DlgEditReference;