|
import { Flex, Form, Input } from 'antd'; |
|
import classNames from 'classnames'; |
|
import { NodeProps, NodeResizeControl } from 'reactflow'; |
|
import { NodeData } from '../../interface'; |
|
import NodeDropdown from './dropdown'; |
|
|
|
import SvgIcon from '@/components/svg-icon'; |
|
import { memo, useEffect } from 'react'; |
|
import { useTranslation } from 'react-i18next'; |
|
import { |
|
useHandleFormValuesChange, |
|
useHandleNodeNameChange, |
|
} from '../../hooks'; |
|
import styles from './index.less'; |
|
|
|
const { TextArea } = Input; |
|
|
|
const controlStyle = { |
|
background: 'transparent', |
|
border: 'none', |
|
}; |
|
|
|
function NoteNode({ data, id }: NodeProps<NodeData>) { |
|
const { t } = useTranslation(); |
|
const [form] = Form.useForm(); |
|
|
|
const { name, handleNameBlur, handleNameChange } = useHandleNodeNameChange({ |
|
id, |
|
data, |
|
}); |
|
const { handleValuesChange } = useHandleFormValuesChange(id); |
|
|
|
useEffect(() => { |
|
form.setFieldsValue(data?.form); |
|
}, [form, data?.form]); |
|
|
|
return ( |
|
<> |
|
<NodeResizeControl style={controlStyle} minWidth={190} minHeight={128}> |
|
<SvgIcon |
|
name="resize" |
|
width={12} |
|
style={{ |
|
position: 'absolute', |
|
right: 5, |
|
bottom: 5, |
|
cursor: 'nwse-resize', |
|
}} |
|
></SvgIcon> |
|
</NodeResizeControl> |
|
<section className={styles.noteNode}> |
|
<Flex |
|
justify={'space-between'} |
|
className={classNames(styles.noteTitle, 'note-drag-handle')} |
|
align="center" |
|
gap={6} |
|
> |
|
<SvgIcon name="note" width={14}></SvgIcon> |
|
<Input |
|
value={name ?? t('flow.note')} |
|
onBlur={handleNameBlur} |
|
onChange={handleNameChange} |
|
className={styles.noteName} |
|
></Input> |
|
<NodeDropdown id={id} label={data.label}></NodeDropdown> |
|
</Flex> |
|
<Form |
|
onValuesChange={handleValuesChange} |
|
form={form} |
|
className={styles.noteForm} |
|
> |
|
<Form.Item name="text" noStyle> |
|
<TextArea |
|
rows={3} |
|
placeholder={t('flow.notePlaceholder')} |
|
className={styles.noteTextarea} |
|
/> |
|
</Form.Item> |
|
</Form> |
|
</section> |
|
</> |
|
); |
|
} |
|
|
|
export default memo(NoteNode); |
|
|