fix(flow-editor): 解决只读模式下节点状态显示问题

master
钟良源 1 week ago
parent ff801b928d
commit b49854feb6

@ -112,8 +112,6 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
} }
}; };
console.log('InstanceCanvas - 转换后的 flowData:', newFlowData);
// 只在数据真正变化时才更新 // 只在数据真正变化时才更新
if (!flowDataRef.current) { if (!flowDataRef.current) {
flowDataRef.current = newFlowData; flowDataRef.current = newFlowData;
@ -221,9 +219,6 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
return flowData; return flowData;
} }
console.log('InstanceCanvas - 注入状态前的 flowData:', flowData);
console.log('InstanceCanvas - 要注入的状态映射:', nodeStatusMap);
// 深拷贝 flowData 并注入节点状态 // 深拷贝 flowData 并注入节点状态
const componentsWithStatus = { ...flowData.components }; const componentsWithStatus = { ...flowData.components };
Object.keys(nodeStatusMap).forEach((nodeId) => { Object.keys(nodeStatusMap).forEach((nodeId) => {
@ -245,7 +240,6 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
} }
}; };
console.log('InstanceCanvas - 注入状态后的 flowData:', result);
return result; return result;
}, [flowData, nodeStatusMap]); }, [flowData, nodeStatusMap]);

@ -1534,6 +1534,9 @@ export const useFlowCallbacks = (
document.dispatchEvent(new CustomEvent('refreshAppList')); document.dispatchEvent(new CustomEvent('refreshAppList'));
} }
// 重置节点状态
dispatch(resetNodeStatus());
// 更新运行ID // 更新运行ID
dispatch(updateRuntimeId('')); dispatch(updateRuntimeId(''));

@ -6,7 +6,7 @@ import { updateCanvasDataMap } from '@/store/ideContainer';
import { Dispatch } from 'redux'; import { Dispatch } from 'redux';
export const useFlowEditorState = (initialData?: any) => { export const useFlowEditorState = (initialData?: any, readOnly?: boolean) => {
const [nodes, setNodes] = useState<Node[]>([]); const [nodes, setNodes] = useState<Node[]>([]);
const [edges, setEdges] = useState<Edge[]>([]); const [edges, setEdges] = useState<Edge[]>([]);
@ -63,22 +63,33 @@ export const useFlowEditorState = (initialData?: any) => {
setNodes(prevNodes =>{ setNodes(prevNodes =>{
return prevNodes.map(node => { return prevNodes.map(node => {
// 优先使用运行时状态,其次使用节点自身的状态(历史实例),最后默认为 waiting // 如果是只读模式(历史实例查看),优先使用节点自身的历史状态
const nodeStatus = currentNodeStatusMap[node.id] || node.data.status || 'waiting'; // 如果是正常运行模式,只使用运行时状态
let nodeStatus = 'waiting';
let showStatus = false;
if (readOnly) {
// 只读模式:使用历史状态
nodeStatus = node.data.status as string || 'waiting';
showStatus = hasInitialDataStatus as boolean || node.data.isStatusVisible as boolean || false;
} else {
// 正常模式:只使用运行时状态
nodeStatus = currentNodeStatusMap[node.id] || 'waiting';
showStatus = currentAppIsRunning;
}
return { return {
...node, ...node,
data: { data: {
...node.data, ...node.data,
status: nodeStatus, status: nodeStatus,
// 在运行时或有历史状态时显示状态指示器 isStatusVisible: showStatus
isStatusVisible: currentAppIsRunning || hasInitialDataStatus || node.data.isStatusVisible
} }
}; };
}); });
}); });
}, [appRuntimeData, currentAppKey, currentAppIsRunning, initialData?.id, initialData?.components, nodes.length]); }, [appRuntimeData, currentAppKey, currentAppIsRunning, initialData?.id, initialData?.components, nodes.length, readOnly]);
const updateCanvasDataMapDebounced = useRef( const updateCanvasDataMapDebounced = useRef(
debounce((dispatch: Dispatch<any>, canvasDataMap: any, id: string, nodes: Node[], edges: Edge[]) => { debounce((dispatch: Dispatch<any>, canvasDataMap: any, id: string, nodes: Node[], edges: Edge[]) => {

@ -63,7 +63,7 @@ const FlowEditor: React.FC<{ initialData?: any, useDefault?: boolean, readOnly?:
// Initial data // Initial data
initialData: stateInitialData initialData: stateInitialData
} = useFlowEditorState(initialData); } = useFlowEditorState(initialData, readOnly);
// 使用自定义Hook管理回调函数 // 使用自定义Hook管理回调函数
const { const {

@ -150,11 +150,9 @@ export const convertFlowData = (flowData: any, useDefault = true) => {
// 保留节点状态信息(用于历史实例查看) // 保留节点状态信息(用于历史实例查看)
if (nodeConfig.status) { if (nodeConfig.status) {
node.data.status = nodeConfig.status; node.data.status = nodeConfig.status;
console.log(`convertFlowData - 保留节点 ${nodeId} 的状态:`, nodeConfig.status);
} }
if (nodeConfig.isStatusVisible !== undefined) { if (nodeConfig.isStatusVisible !== undefined) {
node.data.isStatusVisible = nodeConfig.isStatusVisible; node.data.isStatusVisible = nodeConfig.isStatusVisible;
console.log(`convertFlowData - 保留节点 ${nodeId} 的状态可见性:`, nodeConfig.isStatusVisible);
} }
// 注册循环节点类型 // 注册循环节点类型

Loading…
Cancel
Save