jerosoler / Drawflow

Simple flow library 🖥️🖱️
https://jerosoler.github.io/Drawflow/
MIT License
4.41k stars 713 forks source link

How can i make only single input and single output for all node. #844

Open parthsavaliya1 opened 3 months ago

parthsavaliya1 commented 3 months ago

I want to make only single input and single output in all node. like for node A is main node then A is only connected with node B And for Node B only one input from A and only one output is connected to Node C

jerosoler commented 3 months ago

View to restric connections:

parthsavaliya1 commented 3 months ago

@jerosoler I want to restrict when already one connection from node A to node B and when user try to connect node A to node C at that time node should not be connected. and when user try to add node D after node A then connection should be auto connect like node A to node D and node D to node B .

jerosoler commented 3 months ago

With the previous example you can detect when a connection is created and delete it.

In that case you can use the function to delete or create the connections you want.

Use the functions: removeSingleConnection and addConnection

parthsavaliya1 commented 3 months ago

@jerosoler using this solution i can able to do this. but when i start connection from last node(the node is not connected to other node) then this solution is not working:

editor.on('connectionStart', (e) => { connectionStartObj =editor.getNodeFromId(e?.output_id); console.log('connn',connectionStartObj) })

    editor.on('connectionCreated', (info) => {
        console.log('datata',connectionStartObj)
        console.log('info',info)

        if(connectionStartObj?.outputs?.output_1?.connections?.length > 0) {
            const nodeInfo = editor.getNodeFromId(info.input_id);
      const connections = nodeInfo.inputs[info.input_class].connections;
      console.log(connections,nodeInfo)

      if (connections.length > 1) {
        const lastConnectionIndex = connections.length - 1;
        const lastConnection = connections[lastConnectionIndex];
        editor.removeSingleConnection(lastConnection.node, info.input_id, lastConnection.input, info.input_class);
        connectionStartObj = null;
      }
        }
    })
jerosoler commented 3 months ago

In the same way.

With getNodeFromId the node can know what connections it has to other nodes.

You can get the information of the two nodes.

Here you have to use your logic. It could also detect loops...

parthsavaliya1 commented 3 months ago

Is there any way to detect node where we try to connect.

Ex: Like i have 3 node. Node A , Node B , Node C and i want to try node C to node B then how can i get node B . using connectionStart event i can detect Node C but if i want to get Node B id then??????...

jerosoler commented 3 months ago

connectionCreated return { output_id, input_id, output_class, input_class }