feat(flow): 增加对复合组件的数据外壳处理逻辑

master
钟良源 3 months ago
parent 5a456d046f
commit 4b6e4b8556

@ -617,6 +617,7 @@ export const useFlowCallbacks = (
}, [nodes, edges]); }, [nodes, edges]);
// 在边上添加节点的具体实现 // 在边上添加节点的具体实现
const addNodeOnEdge = useCallback((nodeType: string, node: any) => { const addNodeOnEdge = useCallback((nodeType: string, node: any) => {
const { currentAppData, flowData } = store.getState().ideContainer;
if (!edgeForNodeAdd || !reactFlowInstance) return; if (!edgeForNodeAdd || !reactFlowInstance) return;
// 查找节点定义 // 查找节点定义
@ -801,6 +802,22 @@ export const useFlowCallbacks = (
}) })
}; };
} }
else if (nodeType === 'SUB') {
const flowMainData = flowData[currentAppData.id]?.main?.components;
const sameData: any = Object.values(flowMainData).filter((item: any) => {
if (item?.component?.compId === newNode.data.compId) return item;
});
if (sameData.length) {
newNode.data.component = {
...sameData[0].component
};
}
else {
newNode.data.component = {
type: nodeType
};
}
}
else if (nodeType === 'EVENTSEND' || nodeType === 'EVENTLISTENE') { else if (nodeType === 'EVENTSEND' || nodeType === 'EVENTLISTENE') {
const { eventList } = store.getState().ideContainer; const { eventList } = store.getState().ideContainer;
const emptyEvent = eventList.find(item => item.topic.includes('**empty**')); const emptyEvent = eventList.find(item => item.topic.includes('**empty**'));
@ -885,6 +902,7 @@ export const useFlowCallbacks = (
}, [edgeForNodeAdd, nodes, reactFlowInstance, edges, addLoopNodeWithStartEnd]); }, [edgeForNodeAdd, nodes, reactFlowInstance, edges, addLoopNodeWithStartEnd]);
// 在画布上添加节点 // 在画布上添加节点
const addNodeOnPane = useCallback((nodeType: string, position: { x: number; y: number }, node?: any) => { const addNodeOnPane = useCallback((nodeType: string, position: { x: number; y: number }, node?: any) => {
const { currentAppData, flowData } = store.getState().ideContainer;
if (!reactFlowInstance) return; if (!reactFlowInstance) return;
// 查找节点定义 // 查找节点定义
@ -919,6 +937,22 @@ export const useFlowCallbacks = (
}) })
}; };
} }
else if (nodeType === 'SUB') {
const flowMainData = flowData[currentAppData.id]?.main?.components;
const sameData: any = Object.values(flowMainData).filter((item: any) => {
if (item?.component?.compId === newNode.data.compId) return item;
});
if (sameData.length) {
newNode.data.component = {
...sameData[0].component
};
}
else {
newNode.data.component = {
type: nodeType
};
}
}
else if (nodeType === 'EVENTSEND' || nodeType === 'EVENTLISTENE') { else if (nodeType === 'EVENTSEND' || nodeType === 'EVENTLISTENE') {
const { eventList } = store.getState().ideContainer; const { eventList } = store.getState().ideContainer;
const emptyEvent = eventList.find(item => item.topic.includes('**empty**')); const emptyEvent = eventList.find(item => item.topic.includes('**empty**'));
@ -1023,16 +1057,21 @@ export const useFlowCallbacks = (
updateAppEvent(initialData.appId, params); updateAppEvent(initialData.appId, params);
} }
}; };
const upDatePublish = (revertedData) => { const upDatePublish = async (revertedData) => {
const { currentAppData } = store.getState().ideContainer; const { currentAppData } = store.getState().ideContainer;
const params = { const params = {
appId: currentAppData.id, appId: currentAppData.id,
publishAppId: [] publishAppId: []
}; };
revertedData.forEach(item => { revertedData.forEach(item => {
if (item?.component && item.component.type === 'SUB') params.publishAppId.push(item.component.compId); // 复合组件的这个compId实际上就是flowHousVO里面的id if (item?.component && item.component.type === 'SUB' && !item.component.customDef) params.publishAppId.push(item.component.compId); // 复合组件的这个compId实际上就是flowHousVO里面的id
}); });
if (params.publishAppId.length > 0) refPublish(params); if (params.publishAppId.length > 0) {
const res: any = await refPublish(params);
if (res.code === 200) return res.data;
else return {};
}
else return {};
}; };
const saveFlowDataToServer = useCallback(async () => { const saveFlowDataToServer = useCallback(async () => {
if (useDefault) { if (useDefault) {
@ -1050,19 +1089,18 @@ export const useFlowCallbacks = (
showValidationErrors(edgeValidation.errors); showValidationErrors(edgeValidation.errors);
return; return;
} }
// 转换会原始数据类型 // 转换会原始数据类型
const revertedData = revertFlowData(nodes, edges); const revertedData = revertFlowData(nodes, edges);
const newRevertedData = reverseConvertFlowData(nodes, edges); const upDatePublishCB = await upDatePublish(revertedData.nodeConfigs);
const newRevertedData = reverseConvertFlowData(nodes, edges, upDatePublishCB);
const { flowData, currentAppData } = store.getState().ideContainer; const { flowData, currentAppData } = store.getState().ideContainer;
// console.log('revertedData(中断):', revertedData); // console.log('revertedData:', revertedData);
// console.log('newRevertedData(中断):', newRevertedData); // console.log('newRevertedData:', newRevertedData);
const params = { const params = {
...flowData[currentAppData.id]?.main || {}, ...flowData[currentAppData.id]?.main || {},
components: newRevertedData components: newRevertedData
}; };
// return; // return;
upDatePublish(revertedData.nodeConfigs);
updateEvent(revertedData.nodeConfigs); updateEvent(revertedData.nodeConfigs);
// 旧版数据结构 // 旧版数据结构
// const res: any = await setMainFlow(revertedData, initialData.appId); // const res: any = await setMainFlow(revertedData, initialData.appId);

@ -471,9 +471,10 @@ export const revertFlowData = (nodes: any[], edges: any[]) => {
* React Flow nodes edges convertFlowData * React Flow nodes edges convertFlowData
* @param nodes - React Flow * @param nodes - React Flow
* @param edges - React Flow * @param edges - React Flow
* @param complexKV - 使id {IDsub_ID}
* @returns convertFlowData * @returns convertFlowData
*/ */
export const reverseConvertFlowData = (nodes: any[], edges: any[]) => { export const reverseConvertFlowData = (nodes: any[], edges: any[], complexKV: any) => {
// 初始化返回的数据结构 // 初始化返回的数据结构
const flowData: any = {}; const flowData: any = {};
@ -490,7 +491,19 @@ export const reverseConvertFlowData = (nodes: any[], edges: any[]) => {
}; };
// 处理 component 信息 // 处理 component 信息
if (node.data?.component) { if (node.type === 'SUB' && !node.customDef) {
nodeConfig.component = {
type: 'SUB',
compId: node.data.compId,
customDef: JSON.stringify({
dataIns: node.data.parameters.dataIns,
dataOuts: node.data.parameters.dataOuts,
subflowId: complexKV[node.data.compId],
name: node.data.title
})
};
}
else if (node.data?.component) {
nodeConfig.component = { ...node.data.component }; nodeConfig.component = { ...node.data.component };
} }
else { else {

Loading…
Cancel
Save