import { useEffect, useLayoutEffect, useState } from 'react'; import { TabList, TabPanel, Tabs } from 'react-tabs'; import ConceptTab from '../../components/Common/ConceptTab'; import ConceptTooltip from '../../components/Common/ConceptTooltip'; import Modal, { ModalProps } from '../../components/Common/Modal'; import HelpRSTemplates from '../../components/Help/HelpRSTemplates'; import { HelpIcon } from '../../components/Icons'; import usePartialUpdate from '../../hooks/usePartialUpdate'; import { CstType, ICstCreateData, IRSForm } from '../../models/rsform'; import { createAliasFor, validateCstAlias } from '../../utils/misc'; import ArgumentsTab, { IArgumentsState } from './ArgumentsTab'; import ConstituentaTab from './ConstituentaTab'; import TemplateTab, { ITemplateState } from './TemplateTab'; interface DlgConstituentaTemplateProps extends Pick { schema: IRSForm onCreate: (data: ICstCreateData) => void } export enum TabID { TEMPLATE = 0, ARGUMENTS = 1, CONSTITUENTA = 2 } function DlgConstituentaTemplate({ hideWindow, schema, onCreate }: DlgConstituentaTemplateProps) { const [validated, setValidated] = useState(false); const [ templateData, updateTemplateData ] = usePartialUpdate({}); const [ argumentsData, updateArgumentsData ] = usePartialUpdate({ definition: '', arguments: [] }); const [cstData, updateCstData] = usePartialUpdate({ cst_type: CstType.TERM, insert_after: null, alias: '', convention: '', definition_formal: '', definition_raw: '', term_raw: '', term_forms: [] }); const [ activeTab, setActiveTab ] = useState(TabID.TEMPLATE); const handleSubmit = () => onCreate(cstData); useLayoutEffect( () => { updateCstData({ alias: createAliasFor(cstData.cst_type, schema) }); }, [cstData.cst_type, updateCstData, schema]); useEffect( () => { setValidated(validateCstAlias(cstData.alias, cstData.cst_type, schema)); }, [cstData.alias, cstData.cst_type, schema]); useLayoutEffect( () => { if (!templateData.prototype) { updateCstData({ definition_raw: '', definition_formal: '', term_raw: '' }); updateArgumentsData({ definition: '', arguments: [] }); } else { updateCstData({ cst_type: templateData.prototype.cst_type, definition_raw: templateData.prototype.definition_raw, definition_formal: templateData.prototype.definition_formal, term_raw: templateData.prototype.term_raw }); updateArgumentsData({ definition: templateData.prototype.definition_formal, arguments: templateData.prototype.parse.args.map( arg => ({ alias: arg.alias, typification: arg.typification, value: '' }) ) }); } }, [templateData.prototype, updateCstData, updateArgumentsData]); return (
Шаблон Аргументы Конституента
); } export default DlgConstituentaTemplate;