From c59aab5090b7ee084b67e7ce0ca3e6f160a3c1c8 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 23 Feb 2024 21:53:14 -0500 Subject: [PATCH] Adjust labels of buttons in extension list based on status (#8319) This PR makes the labels of the buttons in the extension list adapt to reflect the current status. Release Notes: - Changed the button labels in the extension list to reflect the current status. --- crates/extension/src/extension_store.rs | 14 +++++ crates/extensions_ui/src/extensions_ui.rs | 68 +++++++++++++---------- 2 files changed, 54 insertions(+), 28 deletions(-) diff --git a/crates/extension/src/extension_store.rs b/crates/extension/src/extension_store.rs index 7bd3768a87..c87a38d695 100644 --- a/crates/extension/src/extension_store.rs +++ b/crates/extension/src/extension_store.rs @@ -52,6 +52,20 @@ pub enum ExtensionStatus { Removing, } +impl ExtensionStatus { + pub fn is_installing(&self) -> bool { + matches!(self, Self::Installing) + } + + pub fn is_upgrading(&self) -> bool { + matches!(self, Self::Upgrading) + } + + pub fn is_removing(&self) -> bool { + matches!(self, Self::Removing) + } +} + pub struct ExtensionStore { manifest: Arc>, fs: Arc, diff --git a/crates/extensions_ui/src/extensions_ui.rs b/crates/extensions_ui/src/extensions_ui.rs index d971e200eb..8a4a533e19 100644 --- a/crates/extensions_ui/src/extensions_ui.rs +++ b/crates/extensions_ui/src/extensions_ui.rs @@ -181,36 +181,48 @@ impl ExtensionsPage { }; let install_or_uninstall_button = match status { - ExtensionStatus::NotInstalled | ExtensionStatus::Installing => { - Button::new(SharedString::from(extension.id.clone()), "Install") - .on_click(cx.listener({ - let extension_id = extension.id.clone(); - let version = extension.version.clone(); - move |this, _, cx| { - this.telemetry - .report_app_event("extensions: install extension".to_string()); - this.install_extension(extension_id.clone(), version.clone(), cx); - } - })) - .disabled(matches!(status, ExtensionStatus::Installing)) - } + ExtensionStatus::NotInstalled | ExtensionStatus::Installing => Button::new( + SharedString::from(extension.id.clone()), + if status.is_installing() { + "Installing..." + } else { + "Install" + }, + ) + .on_click(cx.listener({ + let extension_id = extension.id.clone(); + let version = extension.version.clone(); + move |this, _, cx| { + this.telemetry + .report_app_event("extensions: install extension".to_string()); + this.install_extension(extension_id.clone(), version.clone(), cx); + } + })) + .disabled(status.is_installing()), ExtensionStatus::Installed(_) | ExtensionStatus::Upgrading - | ExtensionStatus::Removing => { - Button::new(SharedString::from(extension.id.clone()), "Uninstall") - .on_click(cx.listener({ - let extension_id = extension.id.clone(); - move |this, _, cx| { - this.telemetry - .report_app_event("extensions: uninstall extension".to_string()); - this.uninstall_extension(extension_id.clone(), cx); - } - })) - .disabled(matches!( - status, - ExtensionStatus::Upgrading | ExtensionStatus::Removing - )) - } + | ExtensionStatus::Removing => Button::new( + SharedString::from(extension.id.clone()), + if status.is_upgrading() { + "Upgrading..." + } else if status.is_removing() { + "Removing..." + } else { + "Uninstall" + }, + ) + .on_click(cx.listener({ + let extension_id = extension.id.clone(); + move |this, _, cx| { + this.telemetry + .report_app_event("extensions: uninstall extension".to_string()); + this.uninstall_extension(extension_id.clone(), cx); + } + })) + .disabled(matches!( + status, + ExtensionStatus::Upgrading | ExtensionStatus::Removing + )), } .color(Color::Accent);