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.
This commit is contained in:
Marshall Bowers 2024-02-23 21:53:14 -05:00 committed by GitHub
parent 2e616f8388
commit c59aab5090
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 54 additions and 28 deletions

View file

@ -52,6 +52,20 @@ pub enum ExtensionStatus {
Removing, 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 { pub struct ExtensionStore {
manifest: Arc<RwLock<Manifest>>, manifest: Arc<RwLock<Manifest>>,
fs: Arc<dyn Fs>, fs: Arc<dyn Fs>,

View file

@ -181,36 +181,48 @@ impl ExtensionsPage {
}; };
let install_or_uninstall_button = match status { let install_or_uninstall_button = match status {
ExtensionStatus::NotInstalled | ExtensionStatus::Installing => { ExtensionStatus::NotInstalled | ExtensionStatus::Installing => Button::new(
Button::new(SharedString::from(extension.id.clone()), "Install") SharedString::from(extension.id.clone()),
.on_click(cx.listener({ if status.is_installing() {
let extension_id = extension.id.clone(); "Installing..."
let version = extension.version.clone(); } else {
move |this, _, cx| { "Install"
this.telemetry },
.report_app_event("extensions: install extension".to_string()); )
this.install_extension(extension_id.clone(), version.clone(), cx); .on_click(cx.listener({
} let extension_id = extension.id.clone();
})) let version = extension.version.clone();
.disabled(matches!(status, ExtensionStatus::Installing)) 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::Installed(_)
| ExtensionStatus::Upgrading | ExtensionStatus::Upgrading
| ExtensionStatus::Removing => { | ExtensionStatus::Removing => Button::new(
Button::new(SharedString::from(extension.id.clone()), "Uninstall") SharedString::from(extension.id.clone()),
.on_click(cx.listener({ if status.is_upgrading() {
let extension_id = extension.id.clone(); "Upgrading..."
move |this, _, cx| { } else if status.is_removing() {
this.telemetry "Removing..."
.report_app_event("extensions: uninstall extension".to_string()); } else {
this.uninstall_extension(extension_id.clone(), cx); "Uninstall"
} },
})) )
.disabled(matches!( .on_click(cx.listener({
status, let extension_id = extension.id.clone();
ExtensionStatus::Upgrading | ExtensionStatus::Removing 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); .color(Color::Accent);