'use client'; import clsx from 'clsx'; import { useLayoutEffect, useState } from 'react'; import Modal, { ModalProps } from '@/components/Common/Modal'; import SelectSingle from '@/components/Common/SelectSingle'; import TextInput from '@/components/Common/TextInput'; import { useRSForm } from '@/context/RSFormContext'; import usePartialUpdate from '@/hooks/usePartialUpdate'; import { CstType, ICstRenameData } from '@/models/rsform'; import { labelCstType } from '@/utils/labels'; import { createAliasFor, validateCstAlias } from '@/utils/misc'; 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); const handleSubmit = () => onRename(cstData); useLayoutEffect(() => { if (schema && initial && cstData.cst_type !== initial.cst_type) { updateData({ alias: createAliasFor(cstData.cst_type, schema) }); } }, [initial, cstData.cst_type, updateData, schema]); useLayoutEffect(() => { setValidated( !!schema && cstData.alias !== initial.alias && validateCstAlias(cstData.alias, cstData.cst_type, schema) ); }, [cstData.cst_type, cstData.alias, initial, schema]); return ( updateData({ cst_type: data?.value ?? CstType.BASE })} /> updateData({ alias: event.target.value })} /> ); } export default DlgRenameCst;