Integrate semantic review core source API and scalar desktop workflow

This commit is contained in:
2026-09-06 06:10:14 +03:00
68 changed files with 17761 additions and 190 deletions
+46
View File
@@ -317,6 +317,7 @@ pub enum Message {
SelectProject,
Search(String),
StartTransition,
StartSemanticReview(Id),
Workflow(crate::workflow::Event),
CollapseExplorer(Id),
ExplorerGroup(crate::explorer::Group),
@@ -1672,12 +1673,57 @@ impl App {
}
}
}
Message::StartSemanticReview(selected) => {
if self.apply() {
match crate::semantic_review::State::new(self.project(), selected) {
Ok(state) => {
self.workflow =
Some(crate::workflow::Workflow::Semantic(Box::new(state)))
}
Err(error) => self.status = error,
}
}
}
Message::Workflow(event) => {
if matches!(event, crate::workflow::Event::Cancel) {
self.workflow = None;
return Task::none();
}
if let Some(mut workflow) = self.workflow.take() {
if let crate::workflow::Workflow::Semantic(state) = &mut workflow {
match event {
crate::workflow::Event::Semantic(event) => {
state.update(self.project(), event)
}
crate::workflow::Event::Apply => {
let focus = state.target(self.project());
match state.command(self.project()) {
Ok(command) => {
if self.execute(command) {
if let Some(target) = focus {
self.selected = target;
if let Some(layer) = self.project().layer_of(target)
{
self.layer = layer;
}
self.refresh_draft();
}
self.status = "Semantic review applied · model, source and baseline form one undoable change".into();
return Task::none();
}
state.error = Some(self.status.clone());
}
Err(error) => {
self.status = error.clone();
state.error = Some(error);
}
}
}
_ => {}
}
self.workflow = Some(workflow);
return Task::none();
}
let stay_in_catalog = self.page == Page::Catalog
&& matches!(&workflow, crate::workflow::Workflow::Ports(_));
let transition_focus = match &workflow {