Integrate semantic review core source API and scalar desktop workflow
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user