agent_ui: Remove duplicated function from agent panel (#52179)

Bennet Bo Fenner created

Release Notes:

- N/A

Change summary

crates/agent_ui/src/agent_panel.rs | 36 ++++++++++---------------------
crates/sidebar/src/sidebar.rs      |  8 +++---
2 files changed, 16 insertions(+), 28 deletions(-)

Detailed changes

crates/agent_ui/src/agent_panel.rs 🔗

@@ -222,7 +222,7 @@ pub fn init(cx: &mut App) {
                 .register_action(|workspace, _: &OpenAgentDiff, window, cx| {
                     let thread = workspace
                         .panel::<AgentPanel>(cx)
-                        .and_then(|panel| panel.read(cx).active_conversation().cloned())
+                        .and_then(|panel| panel.read(cx).active_conversation_view().cloned())
                         .and_then(|conversation| {
                             conversation
                                 .read(cx)
@@ -1188,18 +1188,6 @@ impl AgentPanel {
             .unwrap_or(false)
     }
 
-    pub fn active_conversation(&self) -> Option<&Entity<ConversationView>> {
-        match &self.active_view {
-            ActiveView::AgentThread {
-                conversation_view, ..
-            } => Some(conversation_view),
-            ActiveView::Uninitialized
-            | ActiveView::TextThread { .. }
-            | ActiveView::History { .. }
-            | ActiveView::Configuration => None,
-        }
-    }
-
     pub fn new_thread(&mut self, _action: &NewThread, window: &mut Window, cx: &mut Context<Self>) {
         self.new_agent_thread(AgentType::NativeAgent, window, cx);
     }
@@ -1411,7 +1399,7 @@ impl AgentPanel {
     }
 
     fn expand_message_editor(&mut self, window: &mut Window, cx: &mut Context<Self>) {
-        let Some(conversation_view) = self.active_conversation() else {
+        let Some(conversation_view) = self.active_conversation_view() else {
             return;
         };
 
@@ -1737,7 +1725,7 @@ impl AgentPanel {
         cx: &mut Context<Self>,
     ) {
         if let Some(workspace) = self.workspace.upgrade()
-            && let Some(conversation_view) = self.active_conversation()
+            && let Some(conversation_view) = self.active_conversation_view()
             && let Some(active_thread) = conversation_view.read(cx).active_thread().cloned()
         {
             active_thread.update(cx, |thread, cx| {
@@ -2542,7 +2530,7 @@ impl AgentPanel {
     }
 
     pub fn active_thread_is_draft(&self, cx: &App) -> bool {
-        self.active_conversation().is_some() && !self.active_thread_has_messages(cx)
+        self.active_conversation_view().is_some() && !self.active_thread_has_messages(cx)
     }
 
     fn handle_first_send_requested(
@@ -3936,7 +3924,7 @@ impl AgentPanel {
         };
 
         let is_thread_loading = self
-            .active_conversation()
+            .active_conversation_view()
             .map(|thread| thread.read(cx).is_loading())
             .unwrap_or(false);
 
@@ -4601,7 +4589,7 @@ impl Render for AgentPanel {
             .on_action(cx.listener(Self::reset_font_size))
             .on_action(cx.listener(Self::toggle_zoom))
             .on_action(cx.listener(|this, _: &ReauthenticateAgent, window, cx| {
-                if let Some(conversation_view) = this.active_conversation() {
+                if let Some(conversation_view) = this.active_conversation_view() {
                     conversation_view.update(cx, |conversation_view, cx| {
                         conversation_view.reauthenticate(window, cx)
                     })
@@ -4797,7 +4785,7 @@ impl AgentPanelDelegate for ConcreteAssistantPanelDelegate {
             // Wait to create a new context until the workspace is no longer
             // being updated.
             cx.defer_in(window, move |panel, window, cx| {
-                if let Some(conversation_view) = panel.active_conversation() {
+                if let Some(conversation_view) = panel.active_conversation_view() {
                     conversation_view.update(cx, |conversation_view, cx| {
                         conversation_view.insert_selections(window, cx);
                     });
@@ -4835,7 +4823,7 @@ impl AgentPanelDelegate for ConcreteAssistantPanelDelegate {
             // Wait to create a new context until the workspace is no longer
             // being updated.
             cx.defer_in(window, move |panel, window, cx| {
-                if let Some(conversation_view) = panel.active_conversation() {
+                if let Some(conversation_view) = panel.active_conversation_view() {
                     conversation_view.update(cx, |conversation_view, cx| {
                         conversation_view.insert_terminal_text(text, window, cx);
                     });
@@ -4901,7 +4889,7 @@ impl AgentPanel {
     /// This is a test-only accessor that exposes the private `active_thread_view()`
     /// method for test assertions. Not compiled into production builds.
     pub fn active_thread_view_for_tests(&self) -> Option<&Entity<ConversationView>> {
-        self.active_conversation()
+        self.active_conversation_view()
     }
 
     /// Sets the start_thread_in value directly, bypassing validation.
@@ -5091,7 +5079,7 @@ mod tests {
                 "workspace A agent type should be restored"
             );
             assert!(
-                panel.active_conversation().is_some(),
+                panel.active_conversation_view().is_some(),
                 "workspace A should have its active thread restored"
             );
         });
@@ -5111,7 +5099,7 @@ mod tests {
                 "workspace B agent type should be restored"
             );
             assert!(
-                panel.active_conversation().is_none(),
+                panel.active_conversation_view().is_none(),
                 "workspace B should have no active thread"
             );
         });
@@ -5563,7 +5551,7 @@ mod tests {
         send_message(&panel, &mut cx);
 
         let weak_view_a = panel.read_with(&cx, |panel, _cx| {
-            panel.active_conversation().unwrap().downgrade()
+            panel.active_conversation_view().unwrap().downgrade()
         });
         let session_id_a = active_session_id(&panel, &cx);
 

crates/sidebar/src/sidebar.rs 🔗

@@ -432,7 +432,7 @@ impl Sidebar {
                 AgentPanelEvent::ActiveViewChanged => {
                     let is_new_draft = agent_panel
                         .read(cx)
-                        .active_conversation()
+                        .active_conversation_view()
                         .is_some_and(|cv| cv.read(cx).parent_id(cx).is_none());
                     if is_new_draft {
                         this.focused_thread = None;
@@ -483,7 +483,7 @@ impl Sidebar {
                 ws.read(cx).panel::<AgentPanel>(cx)
             })
             .and_then(|panel| {
-                let cv = panel.read(cx).active_conversation()?;
+                let cv = panel.read(cx).active_conversation_view()?;
                 let tv = cv.read(cx).active_thread()?;
                 Some(tv.read(cx).message_editor.clone())
             })
@@ -498,7 +498,7 @@ impl Sidebar {
         let mw = self.multi_workspace.upgrade()?;
         let workspace = mw.read(cx).workspace();
         let panel = workspace.read(cx).panel::<AgentPanel>(cx)?;
-        let conversation_view = panel.read(cx).active_conversation()?;
+        let conversation_view = panel.read(cx).active_conversation_view()?;
         let thread_view = conversation_view.read(cx).active_thread()?;
         let raw = thread_view.read(cx).message_editor.read(cx).text(cx);
         let cleaned = Self::clean_mention_links(&raw);
@@ -629,7 +629,7 @@ impl Sidebar {
             .and_then(|panel| {
                 panel
                     .read(cx)
-                    .active_conversation()
+                    .active_conversation_view()
                     .and_then(|cv| cv.read(cx).parent_id(cx))
             });
         if panel_focused.is_some() && !self.active_thread_is_draft {