Skip to content

Commit 5a84ff0

Browse files
moosama76Keavon
authored andcommitted
Internal consistency: Grouping layers preserve the order that they were sorted once those layers end up in the new group
1 parent 9f84661 commit 5a84ff0

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

editor/src/messages/portfolio/portfolio_message_handler.rs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,27 @@ impl MessageHandler<PortfolioMessage, (&InputPreprocessorMessageHandler, &Prefer
166166
};
167167

168168
let copy_val = |buffer: &mut Vec<CopyBufferEntry>| {
169-
for layer_path in active_document
169+
let binding = active_document
170170
.metadata()
171-
.shallowest_unique_layers(active_document.selected_nodes.selected_layers(active_document.metadata()))
172-
{
173-
let Some(layer) = layer_path.last().copied() else {
174-
continue;
175-
};
171+
.shallowest_unique_layers(active_document.selected_nodes.selected_layers(active_document.metadata()));
172+
173+
let mut get_last_elements: Vec<_> = binding.iter().map(|x| x.last().expect("empty path")).collect();
174+
175+
let selected_to_vector = active_document
176+
.selected_nodes
177+
.selected_layers(active_document.metadata())
178+
.filter(|_x| true)
179+
.map(|x| x.clone())
180+
.collect::<Vec<_>>();
181+
182+
// sort last elements by their appearance in selected vector
183+
get_last_elements.sort_by(|a, b| {
184+
let index_a = selected_to_vector.iter().position(|x| x == *a).unwrap_or(9999);
185+
let index_b = selected_to_vector.iter().position(|x| x == *b).unwrap_or(9999);
186+
index_a.cmp(&index_b)
187+
});
176188

189+
for layer in get_last_elements {
177190
let node = layer.to_node();
178191
let previous_alias = active_document.network().nodes.get(&node).map(|node| node.alias.clone()).unwrap_or_default();
179192

@@ -192,7 +205,7 @@ impl MessageHandler<PortfolioMessage, (&InputPreprocessorMessageHandler, &Prefer
192205
.collect(),
193206
)
194207
.collect(),
195-
selected: active_document.selected_nodes.selected_layers_contains(layer, active_document.metadata()),
208+
selected: active_document.selected_nodes.selected_layers_contains(*layer, active_document.metadata()),
196209
collapsed: false,
197210
alias: previous_alias,
198211
});

0 commit comments

Comments
 (0)