diff --git a/crates/oa-desktop/src/app.rs b/crates/oa-desktop/src/app.rs index d0115409..6545df64 100644 --- a/crates/oa-desktop/src/app.rs +++ b/crates/oa-desktop/src/app.rs @@ -2143,7 +2143,7 @@ impl App { if let crate::workflow::Workflow::Semantic(state) = &mut workflow { match event { crate::workflow::Event::Semantic(event) => { - state.update(self.project(), event) + state.update(self.project(), *event) } crate::workflow::Event::Apply => { let focus = state.target(self.project()); diff --git a/crates/oa-desktop/src/app/reference_authoring.rs b/crates/oa-desktop/src/app/reference_authoring.rs index 3ccd1f45..47942c5a 100644 --- a/crates/oa-desktop/src/app/reference_authoring.rs +++ b/crates/oa-desktop/src/app/reference_authoring.rs @@ -26,7 +26,7 @@ impl Host { match self { Self::Inspector => Message::FieldReferenceEvent(event), Self::Review { address, facet } => { - Message::Workflow(workflow::Event::Semantic(semantic_review::Event::Row { + Message::Workflow(workflow::Event::semantic(semantic_review::Event::Row { address: *address, facet: Some(facet.clone()), event: RowEvent::ReferenceEvent(event), @@ -206,11 +206,15 @@ impl App { Message::FieldReferenceEvent(event) => { Some(self.reference_event(Host::Inspector, event.clone())) } - Message::Workflow(workflow::Event::Semantic(semantic_review::Event::Row { - address, - facet: Some(facet), - event, - })) => { + Message::Workflow(workflow::Event::Semantic(review_event)) => { + let semantic_review::Event::Row { + address, + facet: Some(facet), + event, + } = review_event.as_ref() + else { + return None; + }; let host = Host::Review { address: *address, facet: facet.clone(), diff --git a/crates/oa-desktop/src/app/reference_authoring/tests.rs b/crates/oa-desktop/src/app/reference_authoring/tests.rs index 12153549..ce275df7 100644 --- a/crates/oa-desktop/src/app/reference_authoring/tests.rs +++ b/crates/oa-desktop/src/app/reference_authoring/tests.rs @@ -74,7 +74,7 @@ fn open(app: &mut App, host: &Host, path: &str) { let message = match host { Host::Inspector => Message::FieldReferenceOpen(request), Host::Review { address, facet } => { - Message::Workflow(workflow::Event::Semantic(semantic_review::Event::Row { + Message::Workflow(workflow::Event::semantic(semantic_review::Event::Row { address: *address, facet: Some(facet.clone()), event: RowEvent::ReferenceOpen(request), @@ -125,7 +125,7 @@ fn review(app: &App) -> &semantic_review::State { } fn send_review(app: &mut App, event: RowEvent) { let addressed = review(app).address_event(event); - let _ = app.update(Message::Workflow(workflow::Event::Semantic(addressed))); + let _ = app.update(Message::Workflow(workflow::Event::semantic(addressed))); } fn review_host(app: &App) -> Host { let semantic_review::Event::Row { @@ -563,7 +563,7 @@ fn review_reference_cannot_reopen_or_write_a_banked_row_after_another_row_takes_ }), semantic_review::Event::OpenTrace, ] { - let _ = app.update(Message::Workflow(workflow::Event::Semantic(event))); + let _ = app.update(Message::Workflow(workflow::Event::semantic(event))); } assert_eq!(review(&app).target(app.project()), Some(Id::from_u128(111))); let expected = review(&app).recovery_snapshot().unwrap(); @@ -572,7 +572,7 @@ fn review_reference_cannot_reopen_or_write_a_banked_row_after_another_row_takes_ let Host::Review { address, facet } = host else { unreachable!() }; - let _ = app.update(Message::Workflow(workflow::Event::Semantic( + let _ = app.update(Message::Workflow(workflow::Event::semantic( semantic_review::Event::Row { address, facet: Some(facet), diff --git a/crates/oa-desktop/src/app/reference_authoring/tests/mounted.rs b/crates/oa-desktop/src/app/reference_authoring/tests/mounted.rs index e8a40656..0c536c35 100644 --- a/crates/oa-desktop/src/app/reference_authoring/tests/mounted.rs +++ b/crates/oa-desktop/src/app/reference_authoring/tests/mounted.rs @@ -109,7 +109,7 @@ fn view( text_input("Required engineering rationale", raw) .id("review-rationale") .on_input(|raw| { - Message::Workflow(workflow::Event::Semantic( + Message::Workflow(workflow::Event::semantic( state.address_event(RowEvent::OperationRationale(raw)), )) }), @@ -119,7 +119,7 @@ fn view( adapter::field(draft, app.project(), "/parent").map(|message| { match message { Message::FieldReferenceOpen(request) => { - Message::Workflow(workflow::Event::Semantic( + Message::Workflow(workflow::Event::semantic( state.address_event(RowEvent::ReferenceOpen(request)), )) } @@ -128,7 +128,7 @@ fn view( }), draft.reference_session(), )); - opaque(container(trigger::modal(content)).width(300).height(180)).into() + opaque(container(trigger::modal(content)).width(300).height(180)) } None => Space::new().into(), } @@ -724,7 +724,7 @@ async fn mounted_review_pointer_open_and_outside_dismissal_keep_background_input let messages = mount.click(&app, Point::new(359., 319.)); assert!(matches!( messages.as_slice(), - [Message::Workflow(workflow::Event::Semantic( + [Message::Workflow(workflow::Event::Semantic(event))] if matches!(event.as_ref(), semantic_review::Event::Row { event: RowEvent::ReferenceEvent(chooser::Event { action: Action::Close(Close::Outside), @@ -732,7 +732,7 @@ async fn mounted_review_pointer_open_and_outside_dismissal_keep_background_input }), .. } - ))] + ) )); for message in messages { let task = app.update(message); @@ -833,7 +833,7 @@ async fn mounted_reverse_review_required_rationale_remains_editable_beside_candi let source = app.document.bundle().clone(); let inspector_raw = raw(&app); let _ = app.update(Message::StartSemanticReview(trace_id)); - let _ = app.update(Message::Workflow(workflow::Event::Semantic( + let _ = app.update(Message::Workflow(workflow::Event::semantic( semantic_review::Event::Direction(TransitionDirection::SaToOa), ))); let facet = FacetSelector::Header(HeaderFacet::Parent); @@ -877,10 +877,10 @@ async fn mounted_reverse_review_required_rationale_remains_editable_beside_candi ); assert!(messages.iter().all(|message| matches!( message, - Message::Workflow(workflow::Event::Semantic(semantic_review::Event::Row { + Message::Workflow(workflow::Event::Semantic(event)) if matches!(event.as_ref(), semantic_review::Event::Row { event: RowEvent::OperationRationale(_), .. - })) + }) ))); mount.dispatch(&mut app, messages).await; assert_eq!( diff --git a/crates/oa-desktop/src/app/review_navigation_tests.rs b/crates/oa-desktop/src/app/review_navigation_tests.rs index 741d1b36..6c985bfb 100644 --- a/crates/oa-desktop/src/app/review_navigation_tests.rs +++ b/crates/oa-desktop/src/app/review_navigation_tests.rs @@ -16,7 +16,7 @@ fn state(app: &App) -> &State { } fn row_event(app: &mut App, event: RowEvent) { let event = state(app).address_event(event); - send(app, Message::Workflow(Event::Semantic(event))); + send(app, Message::Workflow(Event::semantic(event))); } fn fixture(reverse: bool, destination_view: bool) -> (App, Id, Id, Id, Option) { let mut p = Project::empty(); diff --git a/crates/oa-desktop/src/forms/data_fields.rs b/crates/oa-desktop/src/forms/data_fields.rs index 61a9c62f..de251cab 100644 --- a/crates/oa-desktop/src/forms/data_fields.rs +++ b/crates/oa-desktop/src/forms/data_fields.rs @@ -670,7 +670,7 @@ mod tests { } fn semantic_send(app: &mut crate::app::App, event: crate::semantic_review::RowEvent) { let event = semantic_state(app).address_event(event); - let _ = app.update(Message::Workflow(crate::workflow::Event::Semantic(event))); + let _ = app.update(Message::Workflow(crate::workflow::Event::semantic(event))); } fn semantic_decide(app: &mut crate::app::App, facet: FieldFacet, decision: SemanticDecision) { use crate::semantic_review::RowEvent as Event; diff --git a/crates/oa-desktop/src/forms/reference_chooser/trigger.rs b/crates/oa-desktop/src/forms/reference_chooser/trigger.rs index f8229cdb..68e0b314 100644 --- a/crates/oa-desktop/src/forms/reference_chooser/trigger.rs +++ b/crates/oa-desktop/src/forms/reference_chooser/trigger.rs @@ -226,7 +226,7 @@ impl Widget for Field<'_, Mes shell: &mut Shell<'_, Message>, viewport: &Rectangle, ) { - if self.on_open.is_some() { + if let Some(on_open) = &self.on_open { let state = tree.state.downcast_mut::(); let visible = layout.bounds().intersection(viewport); let hovered = visible.is_some_and(|bounds| cursor.is_over(bounds)); @@ -260,7 +260,7 @@ impl Widget for Field<'_, Mes _ => false, }; if activate && let Some(bounds) = state.anchor { - shell.publish(self.on_open.as_ref().unwrap()(bounds)); + shell.publish(on_open(bounds)); shell.capture_event(); return; } diff --git a/crates/oa-desktop/src/semantic_review/batch.rs b/crates/oa-desktop/src/semantic_review/batch.rs index cd22b0b8..c68fb48e 100644 --- a/crates/oa-desktop/src/semantic_review/batch.rs +++ b/crates/oa-desktop/src/semantic_review/batch.rs @@ -694,7 +694,7 @@ impl State { Fill, widget::{button, checkbox, column, pick_list, row, text}, }; - let message = |event| Message::Workflow(crate::workflow::Event::Semantic(event)); + let message = |event| Message::Workflow(crate::workflow::Event::semantic(event)); let mut available: Vec<_> = self .base .traces @@ -821,8 +821,12 @@ impl State { .active .view(&self.base, header.into(), self.can_apply()) .map(move |message| match message { - Message::Workflow(crate::workflow::Event::Semantic(Event::Editor(event))) => { - Message::Workflow(crate::workflow::Event::Semantic(self.address_event(event))) + Message::Workflow(crate::workflow::Event::Semantic(event)) => { + let event = match *event { + Event::Editor(event) => self.address_event(event), + other => other, + }; + Message::Workflow(crate::workflow::Event::semantic(event)) } other => other, }); diff --git a/crates/oa-desktop/src/semantic_review/batch_tests.rs b/crates/oa-desktop/src/semantic_review/batch_tests.rs index 3cee5d5a..235ec6b9 100644 --- a/crates/oa-desktop/src/semantic_review/batch_tests.rs +++ b/crates/oa-desktop/src/semantic_review/batch_tests.rs @@ -522,10 +522,10 @@ fn batch_apply_is_one_exact_source_and_history_undo_redo_roundtrip() { &mut app, RowEvent::Input(path(f.direction, "minimum"), "120".into()), ); - let _ = app.update(Message::Workflow(crate::workflow::Event::Semantic( + let _ = app.update(Message::Workflow(crate::workflow::Event::semantic( Event::ChooseTrace(view::choice(&f.project, f.traces[1])), ))); - let _ = app.update(Message::Workflow(crate::workflow::Event::Semantic( + let _ = app.update(Message::Workflow(crate::workflow::Event::semantic( Event::OpenTrace, ))); tests::decide( diff --git a/crates/oa-desktop/src/semantic_review/row.rs b/crates/oa-desktop/src/semantic_review/row.rs index e05f9bc1..a29d22b3 100644 --- a/crates/oa-desktop/src/semantic_review/row.rs +++ b/crates/oa-desktop/src/semantic_review/row.rs @@ -926,5 +926,5 @@ pub fn form_event(message: Message) -> Message { Message::FieldReferenceEvent(event) => RowEvent::ReferenceEvent(event), _ => RowEvent::Preview, }; - Message::Workflow(crate::workflow::Event::Semantic(Event::Editor(event))) + Message::Workflow(crate::workflow::Event::semantic(Event::Editor(event))) } diff --git a/crates/oa-desktop/src/semantic_review/tests.rs b/crates/oa-desktop/src/semantic_review/tests.rs index 7439376e..0202a21c 100644 --- a/crates/oa-desktop/src/semantic_review/tests.rs +++ b/crates/oa-desktop/src/semantic_review/tests.rs @@ -3,7 +3,7 @@ use crate::{app::App, document::Document, workflow::Workflow}; use serde_json::json; pub(super) fn send(app: &mut App, event: RowEvent) { - let _ = app.update(Message::Workflow(crate::workflow::Event::Semantic( + let _ = app.update(Message::Workflow(crate::workflow::Event::semantic( state(app).address_event(event), ))); } diff --git a/crates/oa-desktop/src/semantic_review/view.rs b/crates/oa-desktop/src/semantic_review/view.rs index d5bb9b2d..85856886 100644 --- a/crates/oa-desktop/src/semantic_review/view.rs +++ b/crates/oa-desktop/src/semantic_review/view.rs @@ -13,7 +13,7 @@ use iced::{ mod reserved_artifact_tests; fn event(event: RowEvent) -> Message { - Message::Workflow(crate::workflow::Event::Semantic(Event::Editor(event))) + Message::Workflow(crate::workflow::Event::semantic(Event::Editor(event))) } fn action<'a>( label: impl Into, diff --git a/crates/oa-desktop/src/workflow.rs b/crates/oa-desktop/src/workflow.rs index e4f7626f..3f9de83f 100644 --- a/crates/oa-desktop/src/workflow.rs +++ b/crates/oa-desktop/src/workflow.rs @@ -19,7 +19,7 @@ mod transition_tests; #[derive(Debug, Clone)] pub enum Event { - Semantic(crate::semantic_review::Event), + Semantic(Box), Port(crate::port_workflow::Event), ExchangeItem(Id, bool), Endpoint(bool, EndpointChoice), @@ -41,6 +41,11 @@ pub enum Event { Resolve(Id, TransitionField, FieldDecision), Preview, } +impl Event { + pub fn semantic(event: crate::semantic_review::Event) -> Self { + Self::Semantic(Box::new(event)) + } +} pub enum Workflow { Semantic(Box), Ports(Box),