diff --git a/src/commands/NodeActionCommands.tsx b/src/commands/NodeActionCommands.tsx index 5f7c5986..78567674 100644 --- a/src/commands/NodeActionCommands.tsx +++ b/src/commands/NodeActionCommands.tsx @@ -417,7 +417,15 @@ export function addNodeActionCommands( } newLink.setSourcePort(sourcePort); newLink.setTargetPort(targetPort); + + if (targetPort instanceof CustomDynaPortModel){ + const newPort = targetPort.spawnDynamicPort({ offset: 1 }); + newPort.previous = targetPort.getID(); + targetPort.next = newPort.getID(); + widget.xircuitsApp.getDiagramEngine().getModel().addNode(targetPort.getParent()); + } widget.xircuitsApp.getDiagramEngine().getModel().addLink(newLink); + widget.xircuitsApp.getDiagramEngine().repaintCanvas(); }, label: trans.__('Link node') }); diff --git a/src/components/XircuitsBodyWidget.tsx b/src/components/XircuitsBodyWidget.tsx index fa0894ea..3805ed08 100644 --- a/src/components/XircuitsBodyWidget.tsx +++ b/src/components/XircuitsBodyWidget.tsx @@ -866,6 +866,8 @@ export const BodyWidget: FC = ({ nodeType = boolValue === 'false' ? 'False' : 'True'; break; case 'any': + case 'dynalist': + case 'dynatuple': // When inPort is 'any' type, get the correct literal type based on the first character inputed let portAnyType = await getItsLiteralType(); if (portAnyType == undefined) return; diff --git a/src/components/port/CustomDynaPortModel.tsx b/src/components/port/CustomDynaPortModel.tsx index b89f7939..40dab54c 100644 --- a/src/components/port/CustomDynaPortModel.tsx +++ b/src/components/port/CustomDynaPortModel.tsx @@ -88,6 +88,8 @@ export class CustomDynaPortModel extends CustomPortModel { newDynamicPortName = `parameter-${port.dataType}-${port.varName}`; newDynamicPortLabel = `${port.varName}`; } else { + // strip compulsory notation [★] if not first dynaport + port.varName = port.varName.replace(/★/g, ''); newDynamicPortName = `parameter-${port.dataType}-${port.varName}-${newDynamicPortOrder}`; newDynamicPortLabel = `${port.varName}[${newDynamicPortOrder}]`; }