Fixed new object request node and allowed multiple classes with dot notation
All checks were successful
Build / build (push) Successful in 39s

This commit is contained in:
Ankitkumar Satapara
2026-04-29 11:50:20 +05:30
parent 77cd472f73
commit a235558db1
7 changed files with 270 additions and 184 deletions

View File

@@ -97,6 +97,7 @@ namespace Nodify.Calculator.NodeHandlers
TakeOperationViewModel => _handlers.OfType<TakeHandler>().FirstOrDefault(),
ForEachOperationViewModel => _handlers.OfType<ForEachHandler>().FirstOrDefault(),
AssertOperationViewModel => _handlers.OfType<AssertHandler>().FirstOrDefault(),
NewObjectOperationViewModel => _handlers.OfType<NewObjectHandler>().FirstOrDefault(),
APIOperationViewModel => _handlers.OfType<ApiHandler>().FirstOrDefault(),
ExpandoOperationViewModel => _handlers.OfType<ExpandoHandler>().FirstOrDefault(),
CalculatorOperationViewModel => _handlers.OfType<NormalHandler>().FirstOrDefault(),

View File

@@ -82,40 +82,41 @@ namespace Nodify.Calculator.NodeHandlers
public OperationViewModel Create(OperationInfoViewModel info)
{
var op = new SystemOperationViewModel
{
Title = info.Title ?? "New Object",
SystemOperationType = SystemOperations.NEW_OBJECT
};
var op = new NewObjectOperationViewModel();
op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Triangle });
op.Output.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Triangle, IsInput = false });
op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Square, ConnectorColor = Color.MediumPurple });
op.Output.Add(new ConnectorViewModel { Title = "Object", IsInput = false, Shape = ConnectorShape.Square, ConnectorColor = Color.MediumPurple, DataType = "object" });
return op;
}
public OperationViewModel Restore(NodeData data)
{
var op = (SystemOperationViewModel)Create(new OperationInfoViewModel { Title = data.Title, Type = OperationType.System, sysOp = SystemOperations.NEW_OBJECT });
var op = new NewObjectOperationViewModel();
op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Triangle });
op.Output.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Triangle, IsInput = false });
op.Output.Add(new ConnectorViewModel { Title = "Object", IsInput = false, Shape = ConnectorShape.Square, ConnectorColor = Color.MediumPurple, DataType = "object" });
// Restore dynamic property inputs (keep triangle + square, replace the rest)
var dynamicInputs = op.Input.Where(i => i.Shape != ConnectorShape.Triangle && i.Shape != ConnectorShape.Square).ToList();
foreach (var d in dynamicInputs) op.Input.Remove(d);
foreach (var ic in data.InputConnectors)
// Restore selected model (triggers RebuildInputs via property setter)
if (!string.IsNullOrEmpty(data.ClassName))
{
if (ic.Shape == "Triangle" || ic.Shape == "Square") continue;
op.Input.Add(NodeHandlerRegistry.DeserializeConnector(ic, true));
op.RefreshAvailableModels();
op.SelectedModel = data.ClassName;
}
// Restore output connector metadata (Square model output)
var savedModelOutput = data.OutputConnectors.FirstOrDefault(o => o.Shape == "Square");
var modelOutput = op.Output.FirstOrDefault(o => o.Shape == ConnectorShape.Square);
if (savedModelOutput != null && modelOutput != null)
else
{
modelOutput.Title = savedModelOutput.Title;
modelOutput.DataType = savedModelOutput.DataType;
modelOutput.ConnectorColor = Color.FromArgb(savedModelOutput.ColorArgb);
// Legacy: restore from saved input connectors
var dynamicInputs = data.InputConnectors.Where(ic => ic.Shape != "Triangle").ToList();
foreach (var ic in dynamicInputs)
op.Input.Add(NodeHandlerRegistry.DeserializeConnector(ic, true));
var savedModelOutput = data.OutputConnectors.FirstOrDefault(o => o.Shape == "Square");
var modelOutput = op.Output.FirstOrDefault(o => o.Shape == ConnectorShape.Square);
if (savedModelOutput != null && modelOutput != null)
{
modelOutput.Title = savedModelOutput.Title;
modelOutput.DataType = savedModelOutput.DataType;
modelOutput.ConnectorColor = Color.FromArgb(savedModelOutput.ColorArgb);
}
}
op.Title = data.Title;
@@ -126,6 +127,10 @@ namespace Nodify.Calculator.NodeHandlers
{
data.NodeType = "System";
data.SystemOp = nameof(SystemOperations.NEW_OBJECT);
if (vm is NewObjectOperationViewModel newObjVm)
{
data.ClassName = newObjVm.SelectedModel ?? "";
}
}
}