'use client'; import { useEffect, useLayoutEffect, useMemo, useState } from 'react'; import TextInput from '@/components/Common/TextInput'; import { ReferenceType } from '@/models/language'; import { parseSyntacticReference } from '@/models/languageAPI'; import { IReferenceInputState } from './DlgEditReference'; interface SyntacticTabProps { initial: IReferenceInputState setIsValid: React.Dispatch> setReference: React.Dispatch> } function SyntacticTab({ initial, setIsValid, setReference }: SyntacticTabProps) { const [nominal, setNominal] = useState(''); const [offset, setOffset] = useState(1); const mainLink = useMemo( () => { const position = offset > 0 ? initial.basePosition + (offset - 1) : initial.basePosition + offset; if (offset === 0 || position < 0 || position >= initial.mainRefs.length) { return 'Некорректное значение смещения'; } else { return initial.mainRefs[position]; } }, [initial, offset]); useLayoutEffect( () => { if (initial.refRaw && initial.type === ReferenceType.SYNTACTIC) { const ref = parseSyntacticReference(initial.refRaw); setOffset(ref.offset); setNominal(ref.nominal); } else { setNominal(initial.text ?? ''); } }, [initial]); useEffect( () => { setIsValid(nominal !== '' && offset !== 0); setReference(`@{${offset}|${nominal}}`); }, [nominal, offset, setIsValid, setReference]); return (
setOffset(event.target.valueAsNumber)} /> setNominal(event.target.value)} />
); } export default SyntacticTab;