import { useShallow } from 'zustand/react/shallow'; import { useAiStore } from './store/ai-store'; import { CloseOutlined, HistoryOutlined, PlusOutlined } from '@ant-design/icons'; import { Button, Dropdown, Form, Input, message, Modal, Tooltip } from 'antd'; import { useEffect } from 'react'; import { TextArea } from '../container/components/TextArea'; import clsx from 'clsx'; import { query } from '@/modules'; import { nanoid } from 'nanoid'; import { ChatMessage } from './module/ChatMessage'; import { isObjectNull } from '@/utils/is-null'; import { useNavigate } from 'react-router'; const testId = '60aca66b-4be9-4266-9568-6001032c7e13'; type FormModalProps = { send?: any; }; const FormModal = (props: FormModalProps) => { const [form] = Form.useForm(); const aiStore = useAiStore( useShallow((state) => { return { showEdit: state.showEdit, setShowEdit: state.setShowEdit, formData: state.formData, setMessage: state.setMessage, }; }), ); useEffect(() => { const open = aiStore.showEdit; if (open) { const isNull = isObjectNull(aiStore.formData); if (isNull) { form.setFieldsValue({}); } else form.setFieldsValue(aiStore.formData); } }, [aiStore.showEdit]); const onFinish = async (values: any) => { props.send({ type: 'changeSession', data: { id: testId, }, }); aiStore.setMessage([]); }; const onClose = () => { aiStore.setShowEdit(false); form.resetFields(); }; const isEdit = aiStore.formData.id; return ( aiStore.setShowEdit(false)} destroyOnClose footer={false} width={800} onCancel={onClose}>
); }; export const useListenQuery = () => { const aiStore = useAiStore( useShallow((state) => { return { open: state.open, key: state.key, onMessage: state.onMessage, }; }), ); // TODO: Implement useEffect useEffect(() => { if (!aiStore.open) { return; } const open = aiStore.open; send({ type: 'subscribe', token: query.getToken(), data: { key: aiStore.key, }, }); const close = query.qws.onMessage(onMessage, { selector: (data) => { const requestId = data.requestId; return { requestId, ...data.data, }; }, }); return () => { send({ type: 'unsubscribe' }); close(); }; }, [aiStore.open, query]); const send = async (data: any) => { query.qws.send(data, { wrapper: (data) => ({ requestId: nanoid(16), type: 'chat', data: data, }), }); }; const onMessage = (data: any) => { type MessageData = { chatId: string; chatPromptId: string; role: string; root: boolean; show: boolean; data: { message: string; }; }; if (data.code === 200 && data.type === 'messages') { const messageData = data.data as MessageData; aiStore.onMessage(messageData); } }; return { send, }; }; export const AiMoudle = () => { const [form] = Form.useForm(); const navigate = useNavigate(); const aiStore = useAiStore( useShallow((state) => { return { open: state.open, setOpen: state.setOpen, formData: state.formData, setFormData: state.setFormData, messages: state.messages, setMessages: state.setMessage, key: state.key, root: state.root, setRoot: state.setRoot, title: state.title, setShowEdit: state.setShowEdit, list: state.list, getList: state.getList, }; }), ); useEffect(() => { if (!aiStore.open) { return; } const isNull = JSON.stringify(aiStore.formData) === '{}'; if (!isNull) { form.setFieldsValue(aiStore.formData); } else { form.setFieldsValue({ inputs: [] }); } }, [aiStore.open, aiStore.formData]); useEffect(() => { if (!aiStore.open) { aiStore.setMessages([]); } else { aiStore.getList(); } }, [aiStore.open]); const { send } = useListenQuery(); const onSend = () => { const data = form.getFieldsValue(); send({ type: 'messages', data: { ...data, root: true } }); }; const inputs = form.getFieldValue('inputs'); const isNotShow = inputs?.length === 0 || !inputs; const RootForm = (
在当前页面,我能帮助你什么吗?
{(fields, { add, remove }) => { return ( <> {fields.map((field, index) => { const key = form.getFieldValue(['inputs', index, 'key']); return (