diff --git a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs index 8f82092bfe9..ebe67b8aacd 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs @@ -3410,7 +3410,8 @@ impl NodeGraphMessageHandler { .exports .iter() .any(|export| matches!(export, NodeInput::Node { node_id: export_node_id, .. } if *export_node_id == node_id)); - if selection_is_not_already_the_output && no_other_selections { + let has_outputs = network_interface.number_of_outputs(&node_id, breadcrumb_network_path) > 0; + if selection_is_not_already_the_output && no_other_selections && has_outputs { let button = TextButton::new("Preview") .icon("FrameAll") .tooltip_label("Preview") diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/characterization_tests.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/characterization_tests.rs index aed5c315d3d..d19aaf5d26e 100644 --- a/editor/src/messages/portfolio/document/utility_types/network_interface/characterization_tests.rs +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/characterization_tests.rs @@ -3534,3 +3534,18 @@ async fn a_session_preview_of_a_removed_node_is_dropped() { "The evaluated network should fall back to the document's own export" ); } + +#[tokio::test] +async fn cannot_preview_node_without_outputs() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + let custom_node = editor.create_node_by_name_at(DefinitionIdentifier::Network("Custom Node".to_string()), 0, 0).await; + let network_interface = &mut editor.active_document_mut().network_interface; + + assert_eq!(network_interface.number_of_outputs(&custom_node, &[]), 0); + + // Attempting to toggle preview on a node without outputs should not enable previewing + network_interface.toggle_preview(custom_node, &[]); + assert_eq!(network_interface.previewing(&[]), Previewing::No); +} diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/mutations.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/mutations.rs index 8afa13d2d02..ad000c7f85a 100644 --- a/editor/src/messages/portfolio/document/utility_types/network_interface/mutations.rs +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/mutations.rs @@ -1401,8 +1401,10 @@ impl NodeNetworkInterface { let primary_output = RootNode { node_id: toggle_id, output_index: 0 }; let previewing = if self.previewing(network_path).previews(toggle_id) || self.root_node(network_path) == Some(primary_output) { Previewing::No - } else { + } else if self.number_of_outputs(&toggle_id, network_path) > 0 { Previewing::Yes { previewed: primary_output } + } else { + return; }; self.set_previewing(previewing, network_path); }