diff --git a/editor/src/messages/layout/layout_message_handler.rs b/editor/src/messages/layout/layout_message_handler.rs index 6dc225d0d8..a1e395374f 100644 --- a/editor/src/messages/layout/layout_message_handler.rs +++ b/editor/src/messages/layout/layout_message_handler.rs @@ -1,5 +1,6 @@ use crate::messages::input_mapper::utility_types::input_keyboard::KeysGroup; use crate::messages::layout::utility_types::widget_prelude::*; +use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier; use crate::messages::prelude::*; use graphene_std::color::SRGBA8; use graphene_std::vector::style::FillChoiceUI; @@ -291,7 +292,11 @@ impl LayoutMessageHandler { responses.add(callback_message); } WidgetValueAction::Update => { - let callback_message = (node_type_input.on_update.callback)(&value.into()); + let Value::String(ref node_type) = value else { + error!("NodeCatalog update was not of type: String, found {value:?}"); + return; + }; + let callback_message = (node_type_input.on_update.callback)(&DefinitionIdentifier::from_serialized(node_type)); responses.add(callback_message); } }, diff --git a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs index fd7d530d37..489b605b51 100644 --- a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs +++ b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs @@ -22,7 +22,6 @@ use graphene_std::raster_types::{CPU, Raster}; use graphene_std::transform::Footprint; use graphene_std::vector::Vector; use graphene_std::*; -use serde_json::Value; use std::collections::{HashMap, VecDeque}; pub struct NodePropertiesContext<'a> { @@ -88,12 +87,8 @@ impl DefinitionIdentifier { DefinitionIdentifier::Network(data) => format!("NETWORK:{}", data), } } -} - -impl From for DefinitionIdentifier { - fn from(value: Value) -> Self { - let s = value.as_str().expect("DefinitionIdentifier value must be a string"); + pub fn from_serialized(s: &str) -> Self { match s.split_once(':') { Some(("PROTONODE", data)) => DefinitionIdentifier::ProtoNode(ProtoNodeIdentifier::with_owned_string(data.to_string())), Some(("NETWORK", data)) => DefinitionIdentifier::Network(data.to_string()), diff --git a/frontend/wrapper/src/editor_commands.rs b/frontend/wrapper/src/editor_commands.rs index 34b85a8b3a..ad923e7594 100644 --- a/frontend/wrapper/src/editor_commands.rs +++ b/frontend/wrapper/src/editor_commands.rs @@ -17,6 +17,7 @@ mod editor_commands { use editor::messages::clipboard::utility_types::ClipboardContentRaw; use editor::messages::input_mapper::utility_types::input_keyboard::ModifierKeys; use editor::messages::input_mapper::utility_types::input_mouse::{EditorMouseState, ScrollDelta}; + use editor::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier; use editor::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use editor::messages::portfolio::document::utility_types::network_interface::ImportOrExport; use editor::messages::portfolio::utility_types::PanelGroupId; @@ -515,11 +516,11 @@ mod editor_commands { } /// Creates a new document node in the node graph - fn create_node(node_type: Any, x: i32, y: i32) -> Message { + fn create_node(node_type: String, x: i32, y: i32) -> Message { let id = NodeId::new(); NodeGraphMessage::CreateNodeFromContextMenu { node_id: Some(id), - node_type: node_type.cast(), + node_type: DefinitionIdentifier::from_serialized(&node_type), xy: Some((x / 24, y / 24)), add_transaction: true, }