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