Skip to content

Commit 6efbb10

Browse files
committed
Internal consistency: Grouping layers preserve the order that they were sorted once those layers end up in the new group
1 parent 9090a0e commit 6efbb10

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
@@ -171,14 +171,27 @@ impl MessageHandler<PortfolioMessage, (&InputPreprocessorMessageHandler, &Prefer
171171
};
172172

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

194+
for layer in get_last_elements {
182195
let node = layer.to_node();
183196
let previous_alias = active_document.network().nodes.get(&node).map(|node| node.alias.clone()).unwrap_or_default();
184197

@@ -197,7 +210,7 @@ impl MessageHandler<PortfolioMessage, (&InputPreprocessorMessageHandler, &Prefer
197210
.collect(),
198211
)
199212
.collect(),
200-
selected: active_document.selected_nodes.selected_layers_contains(layer, active_document.metadata()),
213+
selected: active_document.selected_nodes.selected_layers_contains(*layer, active_document.metadata()),
201214
collapsed: false,
202215
alias: previous_alias,
203216
});

0 commit comments

Comments
 (0)