'use client'; import clsx from 'clsx'; import { useCallback, useLayoutEffect, useMemo, useState } from 'react'; import BadgeHelp from '@/components/info/BadgeHelp'; import RSInput from '@/components/RSInput'; import SelectSingle from '@/components/ui/SelectSingle'; import TextArea from '@/components/ui/TextArea'; import TextInput from '@/components/ui/TextInput'; import { HelpTopic } from '@/models/miscellaneous'; import { CstType, ICstCreateData, IRSForm } from '@/models/rsform'; import { generateAlias, isBaseSet, isBasicConcept, isFunctional, validateNewAlias } from '@/models/rsformAPI'; import { PARAMETER } from '@/utils/constants'; import { labelCstType } from '@/utils/labels'; import { SelectorCstType } from '@/utils/selectors'; interface FormCreateCstProps { schema: IRSForm; state: ICstCreateData; partialUpdate: React.Dispatch>; setValidated?: React.Dispatch>; } function FormCreateCst({ schema, state, partialUpdate, setValidated }: FormCreateCstProps) { const [forceComment, setForceComment] = useState(false); const isBasic = useMemo(() => isBasicConcept(state.cst_type), [state]); const isElementary = useMemo(() => isBaseSet(state.cst_type), [state]); const showConvention = useMemo(() => !!state.convention || forceComment || isBasic, [state, forceComment, isBasic]); useLayoutEffect(() => { setForceComment(false); }, [state.cst_type, partialUpdate, schema]); useLayoutEffect(() => { if (setValidated) { setValidated(validateNewAlias(state.alias, state.cst_type, schema)); } }, [state.alias, state.cst_type, schema, setValidated]); const handleTypeChange = useCallback( (target: CstType) => partialUpdate({ cst_type: target, alias: generateAlias(target, schema) }), [partialUpdate, schema] ); return ( <>
handleTypeChange(data?.value ?? CstType.BASE)} /> partialUpdate({ alias: event.target.value })} />