From cb77ee04ec8f5a534fbe49414a558fa3f31f8570 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 9 Jan 2025 14:38:16 -0500 Subject: [PATCH] extensions_ui: Show an error toast when a dev extension fails to install (#22914) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR adds an error toast that will be displayed when installing a dev extension fails. Here's what it looks like: Screenshot 2025-01-09 at 11 56 42 AM Screenshot 2025-01-09 at 12 10 30 PM I did have to touch the workspace `ErrorMessagePrompt` component to make it scroll for long messages. I don't anticipate this being a problem for other classes of errors (if anything, I suspect other long errors will become more usable now). Closes #21237. Release Notes: - Added an error toast that is shown when a dev extension fails to install. --- crates/extensions_ui/src/extensions_ui.rs | 21 +++++++++++++++++---- crates/workspace/src/notifications.rs | 3 +++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/crates/extensions_ui/src/extensions_ui.rs b/crates/extensions_ui/src/extensions_ui.rs index 0ed79c250b..09c7d69f2c 100644 --- a/crates/extensions_ui/src/extensions_ui.rs +++ b/crates/extensions_ui/src/extensions_ui.rs @@ -82,13 +82,26 @@ pub fn init(cx: &mut AppContext) { } }; - store + let install_task = store .update(&mut cx, |store, cx| { - store - .install_dev_extension(extension_path, cx) - .detach_and_log_err(cx) + store.install_dev_extension(extension_path, cx) }) .ok()?; + + match install_task.await { + Ok(_) => {} + Err(err) => { + workspace_handle + .update(&mut cx, |workspace, cx| { + workspace.show_error( + &err.context("failed to install dev extension"), + cx, + ); + }) + .ok(); + } + } + Some(()) }) .detach(); diff --git a/crates/workspace/src/notifications.rs b/crates/workspace/src/notifications.rs index fd989554e9..7f92b3be80 100644 --- a/crates/workspace/src/notifications.rs +++ b/crates/workspace/src/notifications.rs @@ -392,7 +392,10 @@ impl Render for ErrorMessagePrompt { ) .child( div() + .id("error_message") .max_w_80() + .max_h_40() + .overflow_y_scroll() .child(Label::new(self.message.clone()).size(LabelSize::Small)), ) .when_some(self.label_and_url_button.clone(), |elm, (label, url)| {