import React, { useState, useImperativeHandle, forwardRef, useRef } from 'react'; import { Button, Input, Space, Typography, Tooltip, message, List } from 'antd'; import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons'; import { useTranslation } from 'react-i18next'; import type { ChatVariable, AddChatVariableRef } from '../../types'; import type { ChatVariableModalRef } from './types' import RbDrawer from '@/components/RbDrawer'; import Empty from '@/components/Empty'; import ChatVariableModal from './ChatVariableModal'; interface AddChatVariableProps { variables?: ChatVariable[]; onChange?: (variables: ChatVariable[]) => void; disabled?: boolean; maxVariables?: number; } const AddChatVariable = forwardRef(({ variables = [], onChange, }, ref) => { const { t } = useTranslation(); const [open, setOpen] = useState(false); const chatVariableRef = useRef(null); const handleAddVariable = () => { chatVariableRef.current?.handleOpen() }; const handleEdit = (index: number) => { chatVariableRef.current?.handleOpen(variables[index], index) } const handleDelete = (index: number) => { const list = [...variables] list.splice(index, 1) onChange && onChange(list) } const handleOpen = () => { setOpen(true) } const handleSave = (value: ChatVariable, index?: number) => { const list = [...variables] if (index && index > -1) { list[index] = value } else { list.push(value) } onChange && onChange(list) } // 暴露给父组件的方法 useImperativeHandle(ref, () => ({ handleOpen, })); return ( setOpen(false)} >
{variables.length === 0 ? : (
{item.name} ({t(`workflow.config.parameter-extractor.${item.type}`)})
{item.required ? t('workflow.config.parameter-extractor.required') : ''}
{item.description}
handleEdit(index)} >
handleDelete(index)} >
)} /> }
); }); export default AddChatVariable;