Portal/rsconcept/frontend/src/dialogs/DlgEditReference/DlgEditReference.tsx

84 lines
2.6 KiB
TypeScript
Raw Normal View History

2024-06-07 20:17:03 +03:00
'use client';
import clsx from 'clsx';
import { useState } from 'react';
2024-06-07 20:17:03 +03:00
import { TabList, TabPanel, Tabs } from 'react-tabs';
import Modal from '@/components/ui/Modal';
import TabLabel from '@/components/ui/TabLabel';
import { ReferenceType } from '@/models/language';
import { HelpTopic } from '@/models/miscellaneous';
import { IRSForm } from '@/models/rsform';
import { useDialogsStore } from '@/stores/dialogs';
2024-06-07 20:17:03 +03:00
import { labelReferenceType } from '@/utils/labels';
import TabEntityReference from './TabEntityReference';
import TabSyntacticReference from './TabSyntacticReference';
2024-06-07 20:17:03 +03:00
export interface IReferenceInputState {
type: ReferenceType;
refRaw?: string;
text?: string;
mainRefs: string[];
basePosition: number;
}
export interface DlgEditReferenceProps {
2024-06-07 20:17:03 +03:00
schema: IRSForm;
initial: IReferenceInputState;
onSave: (newRef: string) => void;
}
export enum TabID {
ENTITY = 0,
SYNTACTIC = 1
}
function DlgEditReference() {
const { schema, initial, onSave } = useDialogsStore(state => state.props as DlgEditReferenceProps);
2024-06-07 20:17:03 +03:00
const [activeTab, setActiveTab] = useState(initial.type === ReferenceType.ENTITY ? TabID.ENTITY : TabID.SYNTACTIC);
const [reference, setReference] = useState('');
const [isValid, setIsValid] = useState(false);
return (
<Modal
header='Редактирование ссылки'
submitText='Сохранить ссылку'
canSubmit={isValid}
onSubmit={() => onSave(reference)}
className='w-[40rem] px-6 h-[32rem]'
2024-10-29 12:05:23 +03:00
helpTopic={HelpTopic.TERM_CONTROL}
2024-06-07 20:17:03 +03:00
>
<Tabs
selectedTabClassName='clr-selected'
className='flex flex-col'
selectedIndex={activeTab}
onSelect={setActiveTab}
>
2024-12-18 14:54:45 +03:00
<TabList className={clsx('mb-3 self-center', 'flex', 'border divide-x rounded-none', 'bg-prim-200')}>
2024-06-09 20:40:41 +03:00
<TabLabel title='Отсылка на термин в заданной словоформе' label={labelReferenceType(ReferenceType.ENTITY)} />
2024-06-07 20:17:03 +03:00
<TabLabel
title='Установление синтаксической связи с отсылкой на термин'
label={labelReferenceType(ReferenceType.SYNTACTIC)}
/>
</TabList>
<TabPanel>
<TabEntityReference
initial={initial}
schema={schema}
onChangeReference={setReference}
onChangeValid={setIsValid}
/>
</TabPanel>
<TabPanel>
<TabSyntacticReference initial={initial} onChangeReference={setReference} onChangeValid={setIsValid} />
</TabPanel>
2024-06-07 20:17:03 +03:00
</Tabs>
</Modal>
);
}
export default DlgEditReference;