From cd5ef65d3d90cf12e9f3b5b045ee3202db10f1c2 Mon Sep 17 00:00:00 2001 From: Christoffer Martinsson Date: Wed, 19 Nov 2025 18:01:10 +0100 Subject: [PATCH] Fix service selection for services with sub-services - Fix get_selected_service to always return parent service names - Prevent selection of container sub-items when managing docker services - Ensure service commands operate on correct systemd service names - Simplify service selection logic to only consider parent services - Update version to 0.1.92 --- Cargo.lock | 6 +++--- agent/Cargo.toml | 2 +- dashboard/Cargo.toml | 2 +- dashboard/src/ui/widgets/services.rs | 29 +++------------------------- shared/Cargo.toml | 2 +- 5 files changed, 9 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fe723ae..c1357e4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -279,7 +279,7 @@ checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "cm-dashboard" -version = "0.1.91" +version = "0.1.92" dependencies = [ "anyhow", "chrono", @@ -301,7 +301,7 @@ dependencies = [ [[package]] name = "cm-dashboard-agent" -version = "0.1.91" +version = "0.1.92" dependencies = [ "anyhow", "async-trait", @@ -324,7 +324,7 @@ dependencies = [ [[package]] name = "cm-dashboard-shared" -version = "0.1.91" +version = "0.1.92" dependencies = [ "chrono", "serde", diff --git a/agent/Cargo.toml b/agent/Cargo.toml index 8b50469..ef426fe 100644 --- a/agent/Cargo.toml +++ b/agent/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cm-dashboard-agent" -version = "0.1.91" +version = "0.1.92" edition = "2021" [dependencies] diff --git a/dashboard/Cargo.toml b/dashboard/Cargo.toml index 06e2a59..18ba33b 100644 --- a/dashboard/Cargo.toml +++ b/dashboard/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cm-dashboard" -version = "0.1.91" +version = "0.1.92" edition = "2021" [dependencies] diff --git a/dashboard/src/ui/widgets/services.rs b/dashboard/src/ui/widgets/services.rs index 3bab658..9c2fa63 100644 --- a/dashboard/src/ui/widgets/services.rs +++ b/dashboard/src/ui/widgets/services.rs @@ -209,36 +209,13 @@ impl ServicesWidget { } /// Get currently selected service name (for actions) + /// Only returns parent service names since only parent services can be selected pub fn get_selected_service(&self) -> Option { - // Build the same display list to find the selected service - let mut display_lines: Vec<(String, Status, bool, Option<(ServiceInfo, bool)>, String)> = Vec::new(); - + // Only parent services can be selected, so just get the parent service at selected_index let mut parent_services: Vec<_> = self.parent_services.iter().collect(); parent_services.sort_by(|(a, _), (b, _)| a.cmp(b)); - - for (parent_name, parent_info) in parent_services { - let parent_line = self.format_parent_service_line(parent_name, parent_info); - display_lines.push((parent_line, parent_info.widget_status, false, None, parent_name.clone())); - - if let Some(sub_list) = self.sub_services.get(parent_name) { - let mut sorted_subs = sub_list.clone(); - sorted_subs.sort_by(|(a, _), (b, _)| a.cmp(b)); - - for (i, (sub_name, sub_info)) in sorted_subs.iter().enumerate() { - let is_last_sub = i == sorted_subs.len() - 1; - let full_sub_name = format!("{}_{}", parent_name, sub_name); - display_lines.push(( - sub_name.clone(), - sub_info.widget_status, - true, - Some((sub_info.clone(), is_last_sub)), - full_sub_name, - )); - } - } - } - display_lines.get(self.selected_index).map(|(_, _, _, _, raw_name)| raw_name.clone()) + parent_services.get(self.selected_index).map(|(name, _)| name.to_string()) } /// Get total count of selectable services (parent services only, not sub-services) diff --git a/shared/Cargo.toml b/shared/Cargo.toml index 1d36eb1..c035f71 100644 --- a/shared/Cargo.toml +++ b/shared/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cm-dashboard-shared" -version = "0.1.91" +version = "0.1.92" edition = "2021" [dependencies]