feat(flow): 实现事件监听与发送编辑器的数据刷新功能

production
钟良源 6 months ago
parent d43d84143f
commit dcd1a00059

@ -1,11 +1,23 @@
import React, { useState } from 'react'; import React, { useEffect, useState } from 'react';
import { NodeEditorProps } from '@/components/FlowEditor/nodeEditors'; import { NodeEditorProps } from '@/components/FlowEditor/nodeEditors';
import { Typography } from '@arco-design/web-react'; import { Typography } from '@arco-design/web-react';
import { IconUnorderedList } from '@arco-design/web-react/icon'; import { IconUnorderedList } from '@arco-design/web-react/icon';
import EventSelect from './EventSelect'; import EventSelect from './EventSelect';
import { useDispatch, useSelector } from 'react-redux';
import { queryEventItemBySceneId } from '@/api/event';
const EventListenEditor: React.FC<NodeEditorProps> = ({ nodeData, updateNodeData }) => { const EventListenEditor: React.FC<NodeEditorProps> = ({ nodeData, updateNodeData }) => {
const [eventList, setEventList] = useState<any[]>(); const [eventList, setEventList] = useState<any[]>();
const { currentAppData } = useSelector(state => state.ideContainer);
const getEventList = async () => {
const res = await queryEventItemBySceneId(currentAppData.sceneId);
setEventList(res.data);
};
useEffect(() => {
getEventList();
}, []);
return ( return (
<> <>
@ -13,6 +25,7 @@ const EventListenEditor: React.FC<NodeEditorProps> = ({ nodeData, updateNodeData
<EventSelect <EventSelect
eventList={eventList} eventList={eventList}
type="send" type="send"
onRefresh={getEventList}
onUpdateData={(data) => { onUpdateData={(data) => {
updateNodeData('component', { updateNodeData('component', {
...data ...data

@ -1,6 +1,9 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { Select, Divider, Modal, Button, Form, Input } from '@arco-design/web-react'; import { Select, Divider, Modal, Button, Form, Input, Message } from '@arco-design/web-react';
import { IconPlus } from '@arco-design/web-react/icon'; import { IconPlus } from '@arco-design/web-react/icon';
import { useDispatch, useSelector } from 'react-redux';
import { addEventItem } from '@/api/event';
import { AddEventParams } from '@/api/interface';
const FormItem = Form.Item; const FormItem = Form.Item;
const TextArea = Input.TextArea; const TextArea = Input.TextArea;
@ -9,6 +12,7 @@ const Option = Select.Option;
interface EventSelectProps { interface EventSelectProps {
eventList: any[]; eventList: any[];
type: 'send' | 'listen'; type: 'send' | 'listen';
onRefresh: () => void;
onUpdateData: (data) => void; onUpdateData: (data) => void;
} }
@ -17,10 +21,11 @@ const typeMap = {
listen: 'EVENTLISTENE' listen: 'EVENTLISTENE'
}; };
const EventSelect: React.FC<EventSelectProps> = ({ eventList, type, onUpdateData }) => { const EventSelect: React.FC<EventSelectProps> = ({ eventList, type, onRefresh, onUpdateData }) => {
const [options, setOptions] = useState<any[]>([]); const [options, setOptions] = useState<any[]>([]);
const [form] = Form.useForm(); const [form] = Form.useForm();
const [showModal, setShowModal] = useState(false); const [showModal, setShowModal] = useState(false);
const { currentAppData } = useSelector(state => state.ideContainer);
useEffect(() => { useEffect(() => {
eventList && setOptions(eventList); eventList && setOptions(eventList);
@ -32,9 +37,22 @@ const EventSelect: React.FC<EventSelectProps> = ({ eventList, type, onUpdateData
const saveForm = async () => { const saveForm = async () => {
try { try {
// TODO 需要对接事件新增的接口
await form.validate(); await form.validate();
console.log('form:', form.getFields()); const formData = form.getFields();
const params = {
...formData,
sceneId: currentAppData.sceneId,
topic: formData.topic += `/${currentAppData.identify}`
};
const res: any = await addEventItem(params as AddEventParams);
if (res && res.code === 200) {
Message.success('添加成功');
onRefresh();
}
else {
Message.error(res.message);
}
setShowModal(false); setShowModal(false);
} catch (e) { } catch (e) {
} }
@ -140,6 +158,18 @@ const EventSelect: React.FC<EventSelectProps> = ({ eventList, type, onUpdateData
<FormItem <FormItem
label="事件描述" label="事件描述"
field="description" field="description"
required
rules={[
{
validator(value, cb) {
if (!value) {
return cb('请填写事件描述');
}
return cb();
}
}
]}
> >
<TextArea placeholder="请输入事件描述" /> <TextArea placeholder="请输入事件描述" />
</FormItem> </FormItem>

@ -1,17 +1,31 @@
import React, { useState } from 'react'; import React, { useEffect, useState } from 'react';
import { NodeEditorProps } from '@/components/FlowEditor/nodeEditors'; import { NodeEditorProps } from '@/components/FlowEditor/nodeEditors';
import { Typography } from '@arco-design/web-react'; import { Typography } from '@arco-design/web-react';
import { IconUnorderedList } from '@arco-design/web-react/icon'; import { IconUnorderedList } from '@arco-design/web-react/icon';
import { useDispatch, useSelector } from 'react-redux';
import EventSelect from '@/components/FlowEditor/nodeEditors/components/EventSelect'; import EventSelect from '@/components/FlowEditor/nodeEditors/components/EventSelect';
import { queryEventItemBySceneId } from '@/api/event';
const EventSendEditor: React.FC<NodeEditorProps> = ({ nodeData, updateNodeData }) => { const EventSendEditor: React.FC<NodeEditorProps> = ({ nodeData, updateNodeData }) => {
const [eventList, setEventList] = useState<any[]>(); const [eventList, setEventList] = useState<any[]>();
const { currentAppData } = useSelector(state => state.ideContainer);
const getEventList = async () => {
const res = await queryEventItemBySceneId(currentAppData.sceneId);
setEventList(res.data);
};
useEffect(() => {
getEventList();
}, []);
return ( return (
<> <>
<Typography.Title heading={5}><IconUnorderedList style={{ marginRight: 5 }} /></Typography.Title> <Typography.Title heading={5}><IconUnorderedList style={{ marginRight: 5 }} /></Typography.Title>
<EventSelect <EventSelect
eventList={eventList} eventList={eventList}
type="send" type="send"
onRefresh={getEventList}
onUpdateData={(data) => { onUpdateData={(data) => {
updateNodeData('component', { updateNodeData('component', {
...data ...data

Loading…
Cancel
Save