Fix external consistency of grouping layers so they don't jump to the top of the hierarchy (#1627)

* Calculate insert_index when grouping multiple layers

* no message

* Fix wrong commits

* no message

* restore frontend/package-lock.json

* Fix formatting matches

* Code review to make it idiomatic

* remove wrong line

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
Mohamed Osama 2024-02-29 01:01:23 +02:00 committed by Keavon Chambers
parent 39401f0be0
commit 96e52c18eb
1 changed files with 15 additions and 3 deletions

View File

@ -468,12 +468,25 @@ impl MessageHandler<DocumentMessage, DocumentInputs<'_>> for DocumentMessageHand
responses.add(OverlaysMessage::Draw);
}
GroupSelectedLayers => {
// TODO: Add code that changes the insert index of the new folder based on the selected layer
let parent = self
.metadata()
.deepest_common_ancestor(self.selected_nodes.selected_layers(self.metadata()), true)
.unwrap_or(LayerNodeIdentifier::ROOT);
let calculated_insert_index = parent.children(&self.metadata()).enumerate().find_map(|(index, direct_child)| {
if self.selected_nodes.selected_layers(self.metadata()).any(|selected| selected == direct_child) {
return Some(index as isize);
}
for descendant in direct_child.decendants(&self.metadata()) {
if self.selected_nodes.selected_layers(self.metadata()).any(|selected| selected == descendant) {
return Some(index as isize);
}
}
None
});
let folder_id = NodeId(generate_uuid());
responses.add(PortfolioMessage::Copy { clipboard: Clipboard::Internal });
@ -483,14 +496,13 @@ impl MessageHandler<DocumentMessage, DocumentInputs<'_>> for DocumentMessageHand
id: folder_id,
nodes: HashMap::new(),
parent,
insert_index: -1,
insert_index: calculated_insert_index.unwrap_or(-1),
});
responses.add(PortfolioMessage::PasteIntoFolder {
clipboard: Clipboard::Internal,
parent: LayerNodeIdentifier::new_unchecked(folder_id),
insert_index: -1,
});
responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![folder_id] });
}
ImaginateGenerate => responses.add(PortfolioMessage::SubmitGraphRender { document_id }),