Removed direct attribution on data on updateFlowPosition

This commit is contained in:
Lucas Oliveira 2024-01-31 10:52:36 +01:00
commit b3f5b25eba
2 changed files with 18 additions and 14 deletions

View file

@ -69,6 +69,7 @@ export default function NodeToolbarComponent({
const nodes = useFlowStore((state) => state.nodes); const nodes = useFlowStore((state) => state.nodes);
const edges = useFlowStore((state) => state.edges); const edges = useFlowStore((state) => state.edges);
const setNodes = useFlowStore((state) => state.setNodes); const setNodes = useFlowStore((state) => state.setNodes);
const setNode = useFlowStore((state) => state.setNode);
const setEdges = useFlowStore((state) => state.setEdges); const setEdges = useFlowStore((state) => state.setEdges);
const saveComponent = useFlowsManagerStore((state) => state.saveComponent); const saveComponent = useFlowsManagerStore((state) => state.saveComponent);
@ -124,8 +125,7 @@ export default function NodeToolbarComponent({
break; break;
case "ungroup": case "ungroup":
takeSnapshot(); takeSnapshot();
updateFlowPosition(position, data.node?.flow!); expandGroupNode(data.id, updateFlowPosition(position, data.node?.flow!), data.node!.template, nodes, edges, setNodes, setEdges);
expandGroupNode(data, nodes, edges, setNodes, setEdges);
break; break;
case "override": case "override":
setShowOverrideModal(true); setShowOverrideModal(true);

View file

@ -651,10 +651,13 @@ export function updateFlowPosition(NewPosition: XYPosition, flow: FlowType) {
x: NewPosition.x - middlePoint.x, x: NewPosition.x - middlePoint.x,
y: NewPosition.y - middlePoint.y, y: NewPosition.y - middlePoint.y,
}; };
flow.data!.nodes.forEach((node) => { return {...flow, data: {...flow.data!, nodes: flow.data!.nodes.map((node) => ({
node.position.x += deltaPosition.x; ...node,
node.position.y += deltaPosition.y; position: {
}); x: node.position.x + deltaPosition.x,
y: node.position.y + deltaPosition.y,
},
}))}};
} }
export function concatFlows( export function concatFlows(
@ -1018,13 +1021,14 @@ export function processFlowEdges(flow: FlowType) {
} }
export function expandGroupNode( export function expandGroupNode(
groupNode: NodeDataType, id: string,
flow: FlowType,
template: APITemplateType,
nodes: Node[], nodes: Node[],
edges: Edge[], edges: Edge[],
setNodes: (update: Node[] | ((oldState: Node[]) => Node[])) => void, setNodes: (update: Node[] | ((oldState: Node[]) => Node[])) => void,
setEdges: (update: Edge[] | ((oldState: Edge[]) => Edge[])) => void setEdges: (update: Edge[] | ((oldState: Edge[]) => Edge[])) => void,
) { ) {
const { template, flow } = _.cloneDeep(groupNode.node!);
const idsMap = updateIds(flow!.data!); const idsMap = updateIds(flow!.data!);
updateProxyIdsOnTemplate(template, idsMap); updateProxyIdsOnTemplate(template, idsMap);
let flowEdges = edges; let flowEdges = edges;
@ -1035,7 +1039,7 @@ export function expandGroupNode(
let updatedEdges: Edge[] = []; let updatedEdges: Edge[] = [];
flowEdges.forEach((edge) => { flowEdges.forEach((edge) => {
let newEdge = _.cloneDeep(edge); let newEdge = _.cloneDeep(edge);
if (newEdge.target === groupNode.id) { if (newEdge.target === id) {
const targetHandle: targetHandleType = newEdge.data.targetHandle; const targetHandle: targetHandleType = newEdge.data.targetHandle;
if (targetHandle.proxy) { if (targetHandle.proxy) {
let type = targetHandle.type; let type = targetHandle.type;
@ -1062,7 +1066,7 @@ export function expandGroupNode(
} }
} }
} }
if (newEdge.source === groupNode.id) { if (newEdge.source === id) {
const lastNode = _.cloneDeep(findLastNode(flow!.data!)); const lastNode = _.cloneDeep(findLastNode(flow!.data!));
newEdge.source = lastNode!.id; newEdge.source = lastNode!.id;
let newSourceHandle: sourceHandleType = scapeJSONParse( let newSourceHandle: sourceHandleType = scapeJSONParse(
@ -1072,7 +1076,7 @@ export function expandGroupNode(
newEdge.data.sourceHandle = newSourceHandle; newEdge.data.sourceHandle = newSourceHandle;
newEdge.sourceHandle = scapedJSONStringfy(newSourceHandle); newEdge.sourceHandle = scapedJSONStringfy(newSourceHandle);
} }
if (edge.target === groupNode.id || edge.source === groupNode.id) { if (edge.target === id || edge.source === id) {
updatedEdges.push(newEdge); updatedEdges.push(newEdge);
} }
}); });
@ -1109,12 +1113,12 @@ export function expandGroupNode(
}); });
const filteredNodes = [ const filteredNodes = [
...nodes.filter((n) => n.id !== groupNode.id), ...nodes.filter((n) => n.id !== id),
...gNodes, ...gNodes,
]; ];
const filteredEdges = [ const filteredEdges = [
...edges.filter( ...edges.filter(
(e) => e.target !== groupNode.id && e.source !== groupNode.id (e) => e.target !== id && e.source !== id
), ),
...gEdges, ...gEdges,
...updatedEdges, ...updatedEdges,