import React, { useState, useMemo } from 'react';
import { Button, Collapse, Select, Col, Form, Input } from 'antd';
import { useCallback } from 'react';
import './index.css';
import { useEffect } from 'react';
import { FormProps } from 'antd/lib/form/Form'
const { TextArea } = Input;
const { Panel } = Collapse;
interface IPageProps extends FormProps {
canvasData?: any
onFormValueChange?: any
onEventValueChange?: any
}
const Page = ({
onEventValueChange,
canvasData
}) => {
const [form] = Form.useForm()
const [eventData, setEventData] = useState(canvasData.node.events);
useEffect(() => {
setEventData(canvasData.node.events);
}, [canvasData])
/**
* 新增事件
*/
const onHandleAddEventListener = () => {
const arr = [...eventData];
arr.push({ type: '0', action: '0' });
setEventData(arr);
};
const onHandleEventTypeChange = (e, idx) => {
const data = [...eventData];
data[idx].type = e;
// resetFields();
setEventData(data);
};
const onHandleSelectEvent = (e, idx) => {
const data = [...eventData];
data[idx].action = e;
// resetFields();
setEventData(data);
};
/**
* 渲染自定义事件表单入口
*/
// eslint-disable-next-line react-hooks/exhaustive-deps
const renderFontForm = (item, idx) => {
return (
{renderFormByEventType(item, idx)}
);
};
/**
* 根据事件类型渲染事件行为表单
*/
const renderFormByEventType = (item, idx) => {
const renderCommonForm = () => {
return (
{renderFormByEvent(item, idx)}
);
};
switch (item.type) {
case '0':
case '1':
return renderCommonForm();
case '2':
return (
{
}
{renderCommonForm()}
);
case '3':
return (
{renderCommonForm()}
);
default:
break;
}
};
/**
* 根据事件行为生成不同的表单
*/
const renderFormByEvent = (item, idx) => {
switch (item.action) {
case '0':
return (
onHandleCodeChange(e, idx)}
/>
);
case '2':
return (
);
default:
break;
}
};
/**
* value值的变化, 通知canvas更新画布的数据
*/
const onHandleCodeChange = (e, idx) => {
// validateFields((err, value) => {
// if (err) return;
// eventData[idx] = {
// type: null,
// action: null,
// value: null
// };
// eventData[idx].type = +value[`eventType${idx}`];
// eventData[idx].action = +value[`event${idx}`];
// eventData[idx].value = e.target.value;
// eventData[idx].params = value[`params${idx}`] || '';
// onEventValueChange(eventData);
// });
};
/**
* 删除自定义事件
*/
const onHandleDeleteItem = useCallback(
(idx) => {
const data = [...eventData];
delete data[idx];
// resetFields();
setEventData(data.filter(Boolean));
},
[eventData]
);
/**
* 渲染事件列表
*/
const renderPanel = useMemo(() => {
if (eventData.length < 1) return;
return (
{eventData
.map((item) => ({ ...item, action: String(item.action), type: String(item.type) }))
.map((item, index) => (
{`自定义事件${index + 1}`}{' '}
onHandleDeleteItem(index)} >delete
}
key={index}
>
{renderFontForm(item, index)}
))}
);
}, [eventData, renderFontForm, onHandleDeleteItem]);
return (
{renderPanel}
);
};
export default Page;