import { Panel, useReactFlow, useStore, useStoreApi } from '@xyflow/react'; import clsx from 'clsx'; import { useEffect, useState } from 'react'; import { debounce } from 'lodash-es'; import { Button, Form, Input, message, Tooltip } from 'antd'; import { Select } from '@/pages/container/module/Select'; import { MessageOutlined, SaveOutlined } from '@ant-design/icons'; import { emitter } from '@kevisual/container'; import { usePanelStore } from '../../store'; import { useShallow } from 'zustand/react/shallow'; import { useAiStore } from '@/pages/ai-chat'; export const NodeProperties = () => { const reactflow = useReactFlow(); const [open, setOpen] = useState(false); const [form] = Form.useForm(); const panelStore = usePanelStore((state) => { return { updateNodeData: state.updateNodeData, }; }); const aiStore = useAiStore( useShallow((state) => { return { setOpen: state.setOpen, setKey: state.setKey, }; }), ); const store = useStore((state) => { const setNode = (node: any) => { const newNodes = state.nodes.map((item) => { if (item.id === node.id) { // return { ...item, ...node }; return { ...node }; } return item; }); // console.log('newNodes', newNodes); // state.setNodes(newNodes); // 会丢失数据,因为最终没有调用context的setNodes方法 emitter.emit('setNodes', newNodes); }; return { nodesFocusable: state.nodesFocusable, selected: state.nodes.filter((node) => node.selected), setNode: setNode, }; }); const [nodeData] = store.selected as any[]; useEffect(() => { if (!nodeData) return; // console.log('nodeData', nodeData); const { data } = nodeData || {}; form.setFieldsValue({ cid: data.cid, title: data.title, }); }, [nodeData]); const onSave = () => { const values = form.getFieldsValue(); // console.log('values', values); const { cid, title } = values; if (!cid) { message.error('请选择容器'); return; } const { data, id, position, type } = nodeData || {}; // console.log('data', data, cid); const newNodeData = { id, position, selected: true, type, data: { ...data, cid, title, }, }; // console.log('newNodeData', newNodeData, nodeData); store.setNode(newNodeData); panelStore.updateNodeData(newNodeData); }; return (
0 ? '' : 'hidden')}>
{nodeData?.data?.label}
); };