/* * @Author: ZhaoYing * @Date: 2026-03-05 * @Last Modified by: ZhaoYing * @Last Modified time: 2026-04-13 15:13:36 */ import { forwardRef, useImperativeHandle, useState } from 'react'; import { Button, Form, Input, Flex, App } from 'antd'; import { useTranslation } from 'react-i18next'; import RbModal from '@/components/RbModal'; import type { FeaturesConfigForm } from '../../types' import type { Variable } from '../VariableList/types' import Tag from '@/components/Tag' import type { Application } from '@/views/ApplicationManagement/types'; import Editor from '@/views/Workflow/components/Editor'; export interface OpenStatementSettingModalRef { handleOpen: (values?: FeaturesConfigForm['opening_statement']) => void; handleClose: () => void; } interface OpenStatementSettingModalProps { onSave: (values: FeaturesConfigForm['opening_statement']) => void; chatVariables?: Variable[]; source?: Application['type']; } const OpenStatementSettingModal = forwardRef(({ onSave, chatVariables = [], source }, ref) => { const { t } = useTranslation(); const { modal } = App.useApp() const [visible, setVisible] = useState(false); const [form] = Form.useForm(); const handleClose = () => { setVisible(false); form.resetFields(); }; const handleOpen = (values?: FeaturesConfigForm['opening_statement']) => { setVisible(true); form.setFieldsValue(values || {}); }; const handleSave = async () => { form.validateFields().then(values => { const { suggested_questions, ...rest } = values const filterSuggestedQuestions = suggested_questions?.filter(vo => vo && vo.trim() !== '' && vo !== null) if (values?.enabled && values?.statement && values?.statement?.trim() !== '') { const usedVars = [...new Set([...values.statement?.matchAll(/\{\{(\w+)\}\}/g)].map(m => m[1]))] console.log('usedVars', usedVars, chatVariables) const validNames = new Set(chatVariables.map(v => v.name)) const invalid = usedVars.filter(v => !validNames.has(v)) if (invalid.length > 0) { modal.confirm({ title: t('application.invalidVariablesTitle'), content: invalid.map((vo, index) => {'{{'}{vo}{'}}'}), okText: t('common.confirm'), cancelText: t('common.cancel'), onOk: () => { onSave({ ...rest, suggested_questions: filterSuggestedQuestions }); handleClose(); }, }) } else { onSave({ ...rest, suggested_questions: filterSuggestedQuestions }); handleClose(); } } else { onSave({ ...rest, suggested_questions: filterSuggestedQuestions }); handleClose(); } }); }; useImperativeHandle(ref, () => ({ handleOpen, handleClose })); return (
); }); export default OpenStatementSettingModal;