/* * @Author: ZhaoYing * @Date: 2025-12-30 13:59:36 * @Last Modified by: ZhaoYing * @Last Modified time: 2026-02-28 16:19:26 */ /** * ChatVariableModal Component * * This component provides a modal for adding or editing chat variables in workflows. * It supports various variable types and provides appropriate input fields based on the selected type. */ import { forwardRef, useImperativeHandle, useState } from 'react'; import { Form, Input, Select, InputNumber } from 'antd'; import { useTranslation } from 'react-i18next'; import type { ChatVariableModalRef } from './types' import type { ChatVariable } from '../../types'; import RbModal from '@/components/RbModal' const FormItem = Form.Item; /** * Props for ChatVariableModal component */ interface ChatVariableModalProps { /** * Callback function to refresh variable list * @param {ChatVariable} value - The variable data * @param {number} [editIndex] - Optional index for editing existing variable */ refresh: (value: ChatVariable, editIndex?: number) => void; } /** * Supported variable types */ const types = [ 'string', // String type 'number', // Number type 'boolean', // Boolean type 'object', // Object type 'array[string]', // Array of strings 'array[number]', // Array of numbers 'array[boolean]', // Array of booleans 'array[object]', // Array of objects ] /** * ChatVariableModal component */ const ChatVariableModal = forwardRef(({ refresh }, ref) => { const { t } = useTranslation(); // State management const [visible, setVisible] = useState(false); // Modal visibility const [form] = Form.useForm(); // Form instance const [loading, setLoading] = useState(false); // Loading state const [editIndex, setEditIndex] = useState(undefined); // Index of variable being edited const type = Form.useWatch('type', form); // Current selected type /** * Handle modal close */ const handleClose = () => { setVisible(false); form.resetFields(); setLoading(false); setEditIndex(undefined); }; /** * Handle modal open */ const handleOpen = (variable?: ChatVariable, index?: number) => { setVisible(true); if (variable) { // Exclude 'default' property and set form values const { default: _, ...rest } = variable; form.setFieldsValue({ ...rest }); setEditIndex(index); } else { // Reset form for new variable form.resetFields(); setEditIndex(undefined); } }; /** * Handle save/submit action */ const handleSave = () => { form.validateFields().then((values) => { // Create variable with 'default' property mapped from 'defaultValue' refresh({ ...values, default: values.defaultValue }, editIndex); handleClose(); }); }; // Expose handleOpen method to parent component via ref useImperativeHandle(ref, () => ({ handleOpen })); return (
{/* Variable name field */} {/* Variable type field */} : } {/* Variable description field */}
); }); export default ChatVariableModal;