mirror of
https://github.com/storytold/figcraft.git
synced 2026-10-28 04:16:46 -06:00
M7: clear comment drafts for control-channel tool changes
This commit is contained in:
@@ -53,6 +53,23 @@ fn switching_from_comment_to_move_closes_the_unposted_composer() {
|
||||
assert!(comments(&u)["draft"].is_null());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn control_channel_tool_switch_closes_the_unposted_composer() {
|
||||
let mut u = Ui::new(Session::new());
|
||||
u.app.run("tool.set", json!({"tool": "comment"}));
|
||||
start_draft(&mut u.app, 100.0, 80.0);
|
||||
assert!(comments(&u)["draft"].is_array());
|
||||
|
||||
let invalid = json!({"command": "tool.set", "params": {"tool": "not-a-tool"}});
|
||||
assert!(crate::control::handle(&mut u.app, &egui::Context::default(), "engine.execute", &invalid).is_err());
|
||||
assert!(comments(&u)["draft"].is_array());
|
||||
|
||||
crate::control::handle(&mut u.app, &egui::Context::default(), "engine.execute", &json!({"command": "tool.set", "params": {"tool": "move"}}))
|
||||
.unwrap();
|
||||
u.frame(vec![]);
|
||||
assert!(comments(&u)["draft"].is_null());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mention_helpers() {
|
||||
// The `@query` before the cursor.
|
||||
|
||||
@@ -239,6 +239,7 @@ pub fn handle(app: &mut FigApp, ctx: &Context, method: &str, p: &Value) -> Resul
|
||||
let cmd = p.get("command").and_then(Value::as_str).ok_or("`command` required")?;
|
||||
let params = p.get("params").cloned().unwrap_or(json!({}));
|
||||
let r = app.session.execute(cmd, ¶ms).map_err(|e| e.to_string());
|
||||
app.clear_comment_draft_after_tool_set(cmd, r.is_ok());
|
||||
// Programmatic calls never open dialogs.
|
||||
app.session.ui_requests.retain(|u| !u.kind.starts_with("dialog."));
|
||||
app.handle_ui_requests();
|
||||
|
||||
@@ -831,12 +831,17 @@ impl FigApp {
|
||||
}
|
||||
}
|
||||
|
||||
/// Dismiss the composer after a successful switch away from the Comment tool.
|
||||
pub(crate) fn clear_comment_draft_after_tool_set(&mut self, id: &str, succeeded: bool) {
|
||||
if id == "tool.set" && succeeded && self.session.tool.tool != figcraft_engine::tools::ToolId::Comment {
|
||||
self.ui.comments.draft = None;
|
||||
}
|
||||
}
|
||||
|
||||
/// Run a command, surfacing errors as a toast. Returns the result.
|
||||
pub fn run(&mut self, id: &str, params: Value) -> Option<Value> {
|
||||
let r = self.session.execute(id, ¶ms);
|
||||
if id == "tool.set" && r.is_ok() && self.session.tool.tool != figcraft_engine::tools::ToolId::Comment {
|
||||
self.ui.comments.draft = None;
|
||||
}
|
||||
self.clear_comment_draft_after_tool_set(id, r.is_ok());
|
||||
self.handle_ui_requests();
|
||||
r.map_err(|e| self.failed(id, &e)).ok()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user