From 01b57b10e7e02f136d54c2c26035fdc623f01621 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Wed, 22 Jan 2025 18:00:43 -0500 Subject: [PATCH] assistant2: Only show thread context in picker when we have a `ThreadStore` (#23501) This PR fixes an issue with the context picker where it would show thread context as an option even if there was no `ThreadStore` available. Release Notes: - N/A --- crates/assistant2/src/context.rs | 9 -------- crates/assistant2/src/context_picker.rs | 29 +++++++++++++++---------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/crates/assistant2/src/context.rs b/crates/assistant2/src/context.rs index e4957b7591..09462d246a 100644 --- a/crates/assistant2/src/context.rs +++ b/crates/assistant2/src/context.rs @@ -43,15 +43,6 @@ pub enum ContextKind { } impl ContextKind { - pub fn all() -> &'static [ContextKind] { - &[ - ContextKind::File, - ContextKind::Directory, - ContextKind::FetchedUrl, - ContextKind::Thread, - ] - } - pub fn label(&self) -> &'static str { match self { ContextKind::File => "File", diff --git a/crates/assistant2/src/context_picker.rs b/crates/assistant2/src/context_picker.rs index 9631fdd737..01e7e2dd33 100644 --- a/crates/assistant2/src/context_picker.rs +++ b/crates/assistant2/src/context_picker.rs @@ -77,16 +77,6 @@ impl ContextPicker { let context_picker = cx.view().clone(); let menu = ContextMenu::build(cx, move |menu, cx| { - let kind_entry = |kind: &'static ContextKind| { - let context_picker = context_picker.clone(); - - ContextMenuEntry::new(kind.label()) - .icon(kind.icon()) - .handler(move |cx| { - context_picker.update(cx, |this, cx| this.select_kind(*kind, cx)) - }) - }; - let recent = self.recent_entries(cx); let has_recent = !recent.is_empty(); let recent_entries = recent @@ -94,6 +84,15 @@ impl ContextPicker { .enumerate() .map(|(ix, entry)| self.recent_menu_item(context_picker.clone(), ix, entry)); + let mut context_kinds = vec![ + ContextKind::File, + ContextKind::Directory, + ContextKind::FetchedUrl, + ]; + if self.thread_store.is_some() { + context_kinds.push(ContextKind::Thread); + } + let menu = menu .when(has_recent, |menu| { menu.custom_row(|_| { @@ -109,7 +108,15 @@ impl ContextPicker { }) .extend(recent_entries) .when(has_recent, |menu| menu.separator()) - .extend(ContextKind::all().into_iter().map(kind_entry)); + .extend(context_kinds.into_iter().map(|kind| { + let context_picker = context_picker.clone(); + + ContextMenuEntry::new(kind.label()) + .icon(kind.icon()) + .handler(move |cx| { + context_picker.update(cx, |this, cx| this.select_kind(kind, cx)) + }) + })); match self.confirm_behavior { ConfirmBehavior::KeepOpen => menu.keep_open_on_confirm(),