jellyflow-runtime 0.2.0

Headless store, rules, schema, profile, and change pipeline for Jellyflow.
Documentation
use crate::io::NodeGraphViewState;
use jellyflow_core::core::Graph;

use super::types::{SelectionBoxOptions, SelectionBoxResult};

pub(super) fn apply_additive_selection(
    mut result: SelectionBoxResult,
    graph: &Graph,
    view_state: &NodeGraphViewState,
    options: SelectionBoxOptions,
) -> SelectionBoxResult {
    if !options.modifier.additive() {
        return result;
    }

    result.nodes.extend(
        view_state
            .selected_nodes
            .iter()
            .copied()
            .filter(|node| graph.nodes.contains_key(node)),
    );
    result.edges.extend(
        view_state
            .selected_edges
            .iter()
            .copied()
            .filter(|edge| graph.edges.contains_key(edge)),
    );
    result.groups.extend(
        view_state
            .selected_groups
            .iter()
            .copied()
            .filter(|group| graph.groups.contains_key(group)),
    );

    result.nodes.sort();
    result.nodes.dedup();
    result.edges.sort();
    result.edges.dedup();
    result.groups.sort();
    result.groups.dedup();
    result
}