'use client'; import clsx from 'clsx'; import { useLayoutEffect, useState } from 'react'; import BadgeHelp from '@/components/info/BadgeHelp'; import Modal, { ModalProps } from '@/components/ui/Modal'; import SelectSingle from '@/components/ui/SelectSingle'; import TextInput from '@/components/ui/TextInput'; import { useRSForm } from '@/context/RSFormContext'; import usePartialUpdate from '@/hooks/usePartialUpdate'; import { HelpTopic } from '@/models/miscellaneous'; import { CstType, ICstRenameData } from '@/models/rsform'; import { generateAlias, validateNewAlias } from '@/models/rsformAPI'; import { PARAMETER } from '@/utils/constants'; import { labelCstType } from '@/utils/labels'; import { SelectorCstType } from '@/utils/selectors'; interface DlgRenameCstProps extends Pick { initial: ICstRenameData; onRename: (data: ICstRenameData) => void; } function DlgRenameCst({ hideWindow, initial, onRename }: DlgRenameCstProps) { const { schema } = useRSForm(); const [validated, setValidated] = useState(false); const [cstData, updateData] = usePartialUpdate(initial); useLayoutEffect(() => { if (schema && initial && cstData.cst_type !== initial.cst_type) { updateData({ alias: generateAlias(cstData.cst_type, schema) }); } }, [initial, cstData.cst_type, updateData, schema]); useLayoutEffect(() => { setValidated( !!schema && cstData.alias !== initial.alias && validateNewAlias(cstData.alias, cstData.cst_type, schema) ); }, [cstData.cst_type, cstData.alias, initial, schema]); return ( onRename(cstData)} className={clsx('w-[30rem]', 'py-6 pr-3 pl-6 flex justify-center items-center')} > updateData({ cst_type: data?.value ?? CstType.BASE })} /> updateData({ alias: event.target.value })} /> ); } export default DlgRenameCst;