Blazor-Diagrams / Blazor.Diagrams

A fully customizable and extensible all-purpose diagrams library for Blazor
https://blazor-diagrams.zhaytam.com
MIT License
919 stars 176 forks source link

NRE on Demo Page #361

Closed jchown closed 8 months ago

jchown commented 8 months ago

The demo page on https://blazor-diagrams.zhaytam.com/ throws an NRE when you drag an edge from a pin.

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
      Unhandled exception rendering component: Arg_NullReferenceException
System.NullReferenceException: Arg_NullReferenceException
   at Site.Components.Landing.LandingShowcaseDiagram.OnLinkRemoved(BaseLinkModel link)
   at Blazor.Diagrams.Core.BaseLayer`1.<>c__DisplayClass10_0[[Blazor.Diagrams.Core.Models.Base.BaseLinkModel, Blazor.Diagrams.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null]].<Remove>b__0()
   at Blazor.Diagrams.Core.Diagram.Batch(Action action)
   at Blazor.Diagrams.Core.BaseLayer`1[[Blazor.Diagrams.Core.Models.Base.BaseLinkModel, Blazor.Diagrams.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null]].Remove(BaseLinkModel item)
   at Blazor.Diagrams.Core.Behaviors.DragNewLinkBehavior.OnPointerUp(Model model, MouseEventArgs e)
   at Blazor.Diagrams.Core.Diagram.TriggerPointerUp(Model model, PointerEventArgs e)
   at Blazor.Diagrams.Components.DiagramCanvas.OnPointerUp(PointerEventArgs e)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object , BindingFlags , Binder , Object[] , CultureInfo )
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task , ComponentState )
K0369 commented 8 months ago

The reason for this seems to be that the "OnLinkRemoved" method expects the target of the link to be PortModel, although it is not guaranteed to be one:

if (link.Target != null) (link.Target.Model as PortModel)!.Parent.Refresh();

The "OnLinkRemoved"-Method is called when:

The current code throws a null pointer exception, if you draw a link and release it on anything that is not a port.