From 24f32596e9ca39c963c19af4a8b14fbcd04e3a78 Mon Sep 17 00:00:00 2001 From: Diego Imbert <70353967+diegoimbert@users.noreply.github.com> Date: Tue, 16 Jun 2026 00:48:27 +0200 Subject: [PATCH] fix(apps): prevent decision tree graph editor crash on missing graph context (#9602) NodeWrapper destructured `moveManager` from `getGraphContext()` unconditionally, but FlowGraphContext is only set by the flow graph. The app decision-tree editor reuses NodeWrapper without setting that context, so opening its Graph Editor threw "Cannot destructure property 'moveManager' of getGraphContext(...) as it is undefined". Guard the context with `?? {}` since `moveManager` is already used optionally. Co-authored-by: Claude Opus 4.8 (1M context) --- .../graph/renderers/nodes/NodeWrapper.svelte | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/frontend/src/lib/components/graph/renderers/nodes/NodeWrapper.svelte b/frontend/src/lib/components/graph/renderers/nodes/NodeWrapper.svelte index 97c9429a63..fecf82ee23 100644 --- a/frontend/src/lib/components/graph/renderers/nodes/NodeWrapper.svelte +++ b/frontend/src/lib/components/graph/renderers/nodes/NodeWrapper.svelte @@ -30,7 +30,9 @@ let resolvedContextMenuItems: ContextMenuItem[] | undefined = $derived( contextMenuItems ?? menuItems?.flatMap((item) => [ - ...(item.separatorTop ? [{ id: `${item.displayName}-divider`, label: '', divider: true }] : []), + ...(item.separatorTop + ? [{ id: `${item.displayName}-divider`, label: '', divider: true }] + : []), { id: item.displayName, label: item.displayName, @@ -43,11 +45,11 @@ ]) ) - const { moveManager } = getGraphContext() + // NodeWrapper is reused outside the flow graph (e.g. the app decision-tree + // editor) where FlowGraphContext is never set, so guard against undefined. + const { moveManager } = getGraphContext() ?? {} - let faded = $derived( - nodeId != null && (moveManager?.draggedNodeIds?.has(nodeId) ?? false) - ) + let faded = $derived(nodeId != null && (moveManager?.draggedNodeIds?.has(nodeId) ?? false)) let darkMode: boolean = $state(false) @@ -72,18 +74,10 @@ {#snippet handles()} {#if enableSourceHandle} - + {/if} {#if enableTargetHandle} - + {/if} {/snippet}