import { useEffect, useLayoutEffect, useState } from 'react'; import Modal, { ModalProps } from '../../components/Common/Modal'; import SelectSingle from '../../components/Common/SelectSingle'; import TextArea from '../../components/Common/TextArea'; import TextInput from '../../components/Common/TextInput'; import RSInput from '../../components/RSInput'; import { CstType,ICstCreateData, IRSForm } from '../../models/rsform'; import { labelCstType } from '../../utils/labels'; import { createAliasFor, getCstTypePrefix } from '../../utils/misc'; import { SelectorCstType } from '../../utils/selectors'; interface DlgCreateCstProps extends Pick { initial?: ICstCreateData schema: IRSForm onCreate: (data: ICstCreateData) => void } function DlgCreateCst({ hideWindow, initial, schema, onCreate }: DlgCreateCstProps) { const [validated, setValidated] = useState(false); const [selectedType, setSelectedType] = useState(CstType.BASE); const [alias, setAlias] = useState(''); const [term, setTerm] = useState(''); const [textDefinition, setTextDefinition] = useState(''); const [expression, setExpression] = useState(''); const [convention, setConvention] = useState(''); function getData(): ICstCreateData { return { cst_type: selectedType, insert_after: initial?.insert_after ?? null, alias: alias, convention: convention, definition_formal: expression, definition_raw: textDefinition, term_raw: term }; } const handleSubmit = () => onCreate(getData()); useLayoutEffect(() => { if (initial) { setSelectedType(initial.cst_type); setTerm(initial.term_raw); setTextDefinition(initial.definition_raw); setExpression(initial.definition_formal); setConvention(initial.convention); setAlias(initial.alias); } }, [initial]); useLayoutEffect( () => { setAlias(createAliasFor(selectedType, schema)); }, [selectedType, schema]); useEffect( () => { if(alias.length < 2 || alias[0] !== getCstTypePrefix(selectedType)) { setValidated(false); } else { setValidated(!schema.items.find(cst => cst.alias === alias)) } }, [alias, selectedType, schema]); return (
setSelectedType(data?.value ?? CstType.BASE)} /> setAlias(event.target.value)} />