agent panel: Bring back search within text threads (#29934)
Release Notes: - N/A
This commit is contained in:
parent
76c0eded0d
commit
7164124512
3 changed files with 62 additions and 6 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -106,6 +106,7 @@ dependencies = [
|
||||||
"rope",
|
"rope",
|
||||||
"rules_library",
|
"rules_library",
|
||||||
"schemars",
|
"schemars",
|
||||||
|
"search",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"serde_json_lenient",
|
"serde_json_lenient",
|
||||||
|
|
|
@ -64,13 +64,14 @@ paths.workspace = true
|
||||||
picker.workspace = true
|
picker.workspace = true
|
||||||
postage.workspace = true
|
postage.workspace = true
|
||||||
project.workspace = true
|
project.workspace = true
|
||||||
rules_library.workspace = true
|
|
||||||
prompt_store.workspace = true
|
prompt_store.workspace = true
|
||||||
proto.workspace = true
|
proto.workspace = true
|
||||||
ref-cast.workspace = true
|
ref-cast.workspace = true
|
||||||
release_channel.workspace = true
|
release_channel.workspace = true
|
||||||
rope.workspace = true
|
rope.workspace = true
|
||||||
|
rules_library.workspace = true
|
||||||
schemars.workspace = true
|
schemars.workspace = true
|
||||||
|
search.workspace = true
|
||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
serde_json.workspace = true
|
serde_json.workspace = true
|
||||||
serde_json_lenient.workspace = true
|
serde_json_lenient.workspace = true
|
||||||
|
|
|
@ -31,6 +31,7 @@ use project::Project;
|
||||||
use prompt_store::{PromptBuilder, PromptStore, UserPromptId};
|
use prompt_store::{PromptBuilder, PromptStore, UserPromptId};
|
||||||
use proto::Plan;
|
use proto::Plan;
|
||||||
use rules_library::{RulesLibrary, open_rules_library};
|
use rules_library::{RulesLibrary, open_rules_library};
|
||||||
|
use search::{BufferSearchBar, buffer_search::DivRegistrar};
|
||||||
use settings::{Settings, update_settings_file};
|
use settings::{Settings, update_settings_file};
|
||||||
use time::UtcOffset;
|
use time::UtcOffset;
|
||||||
use ui::{
|
use ui::{
|
||||||
|
@ -39,7 +40,7 @@ use ui::{
|
||||||
};
|
};
|
||||||
use util::ResultExt as _;
|
use util::ResultExt as _;
|
||||||
use workspace::dock::{DockPosition, Panel, PanelEvent};
|
use workspace::dock::{DockPosition, Panel, PanelEvent};
|
||||||
use workspace::{CollaboratorId, Workspace};
|
use workspace::{CollaboratorId, ToolbarItemView, Workspace};
|
||||||
use zed_actions::agent::OpenConfiguration;
|
use zed_actions::agent::OpenConfiguration;
|
||||||
use zed_actions::assistant::{OpenRulesLibrary, ToggleFocus};
|
use zed_actions::assistant::{OpenRulesLibrary, ToggleFocus};
|
||||||
use zed_llm_client::UsageLimit;
|
use zed_llm_client::UsageLimit;
|
||||||
|
@ -151,6 +152,7 @@ enum ActiveView {
|
||||||
PromptEditor {
|
PromptEditor {
|
||||||
context_editor: Entity<ContextEditor>,
|
context_editor: Entity<ContextEditor>,
|
||||||
title_editor: Entity<Editor>,
|
title_editor: Entity<Editor>,
|
||||||
|
buffer_search_bar: Entity<BufferSearchBar>,
|
||||||
_subscriptions: Vec<gpui::Subscription>,
|
_subscriptions: Vec<gpui::Subscription>,
|
||||||
},
|
},
|
||||||
History,
|
History,
|
||||||
|
@ -216,6 +218,7 @@ impl ActiveView {
|
||||||
|
|
||||||
pub fn prompt_editor(
|
pub fn prompt_editor(
|
||||||
context_editor: Entity<ContextEditor>,
|
context_editor: Entity<ContextEditor>,
|
||||||
|
language_registry: Arc<LanguageRegistry>,
|
||||||
window: &mut Window,
|
window: &mut Window,
|
||||||
cx: &mut App,
|
cx: &mut App,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
|
@ -284,9 +287,16 @@ impl ActiveView {
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
let buffer_search_bar =
|
||||||
|
cx.new(|cx| BufferSearchBar::new(Some(language_registry), window, cx));
|
||||||
|
buffer_search_bar.update(cx, |buffer_search_bar, cx| {
|
||||||
|
buffer_search_bar.set_active_pane_item(Some(&context_editor), window, cx)
|
||||||
|
});
|
||||||
|
|
||||||
Self::PromptEditor {
|
Self::PromptEditor {
|
||||||
context_editor,
|
context_editor,
|
||||||
title_editor: editor,
|
title_editor: editor,
|
||||||
|
buffer_search_bar,
|
||||||
_subscriptions: subscriptions,
|
_subscriptions: subscriptions,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -785,7 +795,12 @@ impl AssistantPanel {
|
||||||
});
|
});
|
||||||
|
|
||||||
self.set_active_view(
|
self.set_active_view(
|
||||||
ActiveView::prompt_editor(context_editor.clone(), window, cx),
|
ActiveView::prompt_editor(
|
||||||
|
context_editor.clone(),
|
||||||
|
self.language_registry.clone(),
|
||||||
|
window,
|
||||||
|
cx,
|
||||||
|
),
|
||||||
window,
|
window,
|
||||||
cx,
|
cx,
|
||||||
);
|
);
|
||||||
|
@ -861,7 +876,12 @@ impl AssistantPanel {
|
||||||
});
|
});
|
||||||
|
|
||||||
this.set_active_view(
|
this.set_active_view(
|
||||||
ActiveView::prompt_editor(editor.clone(), window, cx),
|
ActiveView::prompt_editor(
|
||||||
|
editor.clone(),
|
||||||
|
this.language_registry.clone(),
|
||||||
|
window,
|
||||||
|
cx,
|
||||||
|
),
|
||||||
window,
|
window,
|
||||||
cx,
|
cx,
|
||||||
);
|
);
|
||||||
|
@ -2314,8 +2334,42 @@ impl Render for AssistantPanel {
|
||||||
.child(h_flex().child(self.message_editor.clone()))
|
.child(h_flex().child(self.message_editor.clone()))
|
||||||
.children(self.render_last_error(cx)),
|
.children(self.render_last_error(cx)),
|
||||||
ActiveView::History => parent.child(self.history.clone()),
|
ActiveView::History => parent.child(self.history.clone()),
|
||||||
ActiveView::PromptEditor { context_editor, .. } => {
|
ActiveView::PromptEditor {
|
||||||
parent.child(context_editor.clone())
|
context_editor,
|
||||||
|
buffer_search_bar,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
let mut registrar = DivRegistrar::new(
|
||||||
|
|this, _, _cx| match &this.active_view {
|
||||||
|
ActiveView::PromptEditor {
|
||||||
|
buffer_search_bar, ..
|
||||||
|
} => Some(buffer_search_bar.clone()),
|
||||||
|
_ => None,
|
||||||
|
},
|
||||||
|
cx,
|
||||||
|
);
|
||||||
|
BufferSearchBar::register(&mut registrar);
|
||||||
|
parent.child(
|
||||||
|
registrar
|
||||||
|
.into_div()
|
||||||
|
.size_full()
|
||||||
|
.map(|parent| {
|
||||||
|
buffer_search_bar.update(cx, |buffer_search_bar, cx| {
|
||||||
|
if buffer_search_bar.is_dismissed() {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
parent.child(
|
||||||
|
div()
|
||||||
|
.p(DynamicSpacing::Base08.rems(cx))
|
||||||
|
.border_b_1()
|
||||||
|
.border_color(cx.theme().colors().border_variant)
|
||||||
|
.bg(cx.theme().colors().editor_background)
|
||||||
|
.child(buffer_search_bar.render(window, cx)),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.child(context_editor.clone()),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
ActiveView::Configuration => parent.children(self.configuration.clone()),
|
ActiveView::Configuration => parent.children(self.configuration.clone()),
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue