fix(review): keep workflow messages compact

This commit is contained in:
Codex
2026-09-11 09:08:46 -07:00
parent 80f2588214
commit 3c9e6eeb64
13 changed files with 45 additions and 32 deletions
+1 -1
View File
@@ -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());
@@ -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(),
@@ -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),
@@ -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!(
@@ -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<Id>) {
let mut p = Project::empty();
+1 -1
View File
@@ -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;
@@ -226,7 +226,7 @@ impl<Message, R: renderer::Renderer> Widget<Message, Theme, R> 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::<Interaction>();
let visible = layout.bounds().intersection(viewport);
let hovered = visible.is_some_and(|bounds| cursor.is_over(bounds));
@@ -260,7 +260,7 @@ impl<Message, R: renderer::Renderer> Widget<Message, Theme, R> 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;
}
@@ -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,
});
@@ -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(
+1 -1
View File
@@ -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)))
}
@@ -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),
)));
}
@@ -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<String>,
+6 -1
View File
@@ -19,7 +19,7 @@ mod transition_tests;
#[derive(Debug, Clone)]
pub enum Event {
Semantic(crate::semantic_review::Event),
Semantic(Box<crate::semantic_review::Event>),
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<crate::semantic_review::State>),
Ports(Box<crate::port_workflow::State>),