Skip to main content

jellyflow_runtime/runtime/xyflow/changes/
node.rs

1use serde::{Deserialize, Serialize};
2
3use jellyflow_core::core::GroupId;
4use jellyflow_core::core::{
5    CanvasPoint, CanvasSize, Node, NodeExtent, NodeId, NodeKindKey, NodeOrigin, PortId,
6};
7
8/// Changes targeting nodes (graph-owned).
9#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(tag = "type", rename_all = "snake_case")]
11pub enum NodeChange {
12    Add {
13        id: NodeId,
14        node: Node,
15    },
16    Remove {
17        id: NodeId,
18    },
19
20    Position {
21        id: NodeId,
22        position: CanvasPoint,
23    },
24    Origin {
25        id: NodeId,
26        origin: Option<NodeOrigin>,
27    },
28    Kind {
29        id: NodeId,
30        kind: NodeKindKey,
31    },
32    KindVersion {
33        id: NodeId,
34        kind_version: u32,
35    },
36    Selectable {
37        id: NodeId,
38        selectable: Option<bool>,
39    },
40    Focusable {
41        id: NodeId,
42        focusable: Option<bool>,
43    },
44    Draggable {
45        id: NodeId,
46        draggable: Option<bool>,
47    },
48    Connectable {
49        id: NodeId,
50        connectable: Option<bool>,
51    },
52    Deletable {
53        id: NodeId,
54        deletable: Option<bool>,
55    },
56    Parent {
57        id: NodeId,
58        parent: Option<GroupId>,
59    },
60    Extent {
61        id: NodeId,
62        extent: Option<NodeExtent>,
63    },
64    ExpandParent {
65        id: NodeId,
66        expand_parent: Option<bool>,
67    },
68    Size {
69        id: NodeId,
70        size: Option<CanvasSize>,
71    },
72    Hidden {
73        id: NodeId,
74        hidden: bool,
75    },
76    Collapsed {
77        id: NodeId,
78        collapsed: bool,
79    },
80    Data {
81        id: NodeId,
82        data: serde_json::Value,
83    },
84    Ports {
85        id: NodeId,
86        ports: Vec<PortId>,
87    },
88}