update position on node

This commit is contained in:
anovazzi1 2023-09-13 16:17:59 -03:00
commit a7b9cf2cc9
4 changed files with 16 additions and 12 deletions

View file

@ -17,12 +17,14 @@ import ParameterComponent from "./components/parameterComponent";
export default function GenericNode({ export default function GenericNode({
data: olddata, data: olddata,
position, xPos,
yPos,
selected, selected,
}: { }: {
data: NodeDataType; data: NodeDataType;
selected: boolean; selected: boolean;
position: XYPosition; xPos: number;
yPos: number;
}): JSX.Element { }): JSX.Element {
const [data, setData] = useState(olddata); const [data, setData] = useState(olddata);
const { updateFlow, flows, tabId } = useContext(TabsContext); const { updateFlow, flows, tabId } = useContext(TabsContext);
@ -69,6 +71,7 @@ export default function GenericNode({
<> <>
<NodeToolbar> <NodeToolbar>
<NodeToolbarComponent <NodeToolbarComponent
position={{ x: xPos, y: yPos }}
data={data} data={data}
setData={setData} setData={setData}
deleteNode={deleteNode} deleteNode={deleteNode}

View file

@ -6,7 +6,7 @@ import { TabsContext } from "../../../../contexts/tabsContext";
import EditNodeModal from "../../../../modals/EditNodeModal"; import EditNodeModal from "../../../../modals/EditNodeModal";
import { nodeToolbarPropsType } from "../../../../types/components"; import { nodeToolbarPropsType } from "../../../../types/components";
import { classNames } from "../../../../utils/utils"; import { classNames } from "../../../../utils/utils";
import { ungroupNode, updateFlowPosition } from "../../../../utils/reactflowUtils"; import { expandGroupNode, ungroupNode, updateFlowPosition } from "../../../../utils/reactflowUtils";
export default function NodeToolbarComponent({ export default function NodeToolbarComponent({
data, data,
@ -129,9 +129,7 @@ export default function NodeToolbarComponent({
onClick={(event) => { onClick={(event) => {
event.preventDefault(); event.preventDefault();
updateFlowPosition(position,data.node?.flow!) updateFlowPosition(position,data.node?.flow!)
ungroupNode(data, { edges: reactFlowInstance.getEdges(), expandGroupNode(data,reactFlowInstance)
nodes: reactFlowInstance.getNodes(),
viewport: reactFlowInstance.getViewport() })
}} }}
> >
<IconComponent name="Ungroup" className="h-4 w-4" /> <IconComponent name="Ungroup" className="h-4 w-4" />

View file

@ -49,4 +49,5 @@ export type targetHandleType = {
type: string; type: string;
fieldName: string; fieldName: string;
id: string; id: string;
proxy?:{field:string, id:string}
}; };

View file

@ -13,6 +13,7 @@ import { specialCharsRegex } from "../constants/constants";
import { APITemplateType, TemplateVariableType } from "../types/api"; import { APITemplateType, TemplateVariableType } from "../types/api";
import { import {
FlowType, FlowType,
NodeDataType,
NodeType, NodeType,
sourceHandleType, sourceHandleType,
targetHandleType, targetHandleType,
@ -783,17 +784,18 @@ export function expandGroupNode(
groupNode: NodeDataType, groupNode: NodeDataType,
ReactFlowInstance: ReactFlowInstance, ReactFlowInstance: ReactFlowInstance,
) { ) {
const {template} = groupNode.node const {template} = groupNode.node!
const {flow} = groupNode.node; const {flow} = groupNode.node!;
const gNodes = _.cloneDeep(flow.data.nodes); const gNodes = _.cloneDeep(flow!.data!.nodes);
const gEdges = flow.data.edges; const gEdges = flow!.data!.edges;
//redirect edges to correct proxy node //redirect edges to correct proxy node
let updatedEdges: Edge[] = []; let updatedEdges: Edge[] = [];
ReactFlowInstance.getEdges().forEach((edge) => { ReactFlowInstance.getEdges().forEach((edge) => {
let newEdge = _.cloneDeep(edge); let newEdge = _.cloneDeep(edge);
if (newEdge.target === groupNode.id) { if (newEdge.target === groupNode.id) {
if (newEdge.targetHandle.split("|").length > 3) { const targetHandle:targetHandleType = newEdge.data.targetHandle;
let type = newEdge.targetHandle.split("|")[0]; if (targetHandle.proxy) {
let type = targetHandle.type;
let field = newEdge.targetHandle.split("|")[4]; let field = newEdge.targetHandle.split("|")[4];
let proxy = newEdge.targetHandle.split("|")[3]; let proxy = newEdge.targetHandle.split("|")[3];
let node = gNodes.find((n) => n.id === proxy); let node = gNodes.find((n) => n.id === proxy);