assistant2: Disable the Submit button when missing requirements (#23598)

This PR disables the Assistant 2 Submit button when either there is no
message written in the editor or there's no model selected. To guide the
user, there will be a tooltip displayed on top of the button to indicate
what to do.

Release Notes:

- N/A
This commit is contained in:
Danilo Leal 2025-01-24 09:44:20 -03:00 committed by GitHub
parent 802d7421bc
commit ad63bdf65b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -13,7 +13,9 @@ use rope::Point;
use settings::Settings;
use std::time::Duration;
use theme::ThemeSettings;
use ui::{prelude::*, ButtonLike, KeyBinding, PopoverMenu, PopoverMenuHandle, Switch, TintColor};
use ui::{
prelude::*, ButtonLike, KeyBinding, PopoverMenu, PopoverMenuHandle, Switch, TintColor, Tooltip,
};
use workspace::Workspace;
use crate::assistant_model_selector::AssistantModelSelector;
@ -135,6 +137,16 @@ impl MessageEditor {
self.send_to_model(RequestKind::Chat, cx);
}
fn is_editor_empty(&self, cx: &AppContext) -> bool {
self.editor.read(cx).text(cx).is_empty()
}
fn is_model_selected(&self, cx: &AppContext) -> bool {
LanguageModelRegistry::read_global(cx)
.active_model()
.is_some()
}
fn send_to_model(&mut self, request_kind: RequestKind, cx: &mut ViewContext<Self>) {
let provider = LanguageModelRegistry::read_global(cx).active_provider();
if provider
@ -266,6 +278,13 @@ impl Render for MessageEditor {
let bg_color = cx.theme().colors().editor_background;
let is_streaming_completion = self.thread.read(cx).is_streaming();
let button_width = px(64.);
let is_model_selected = self.is_model_selected(cx);
let is_editor_empty = self.is_editor_empty(cx);
let submit_label_color = if is_editor_empty {
Color::Muted
} else {
Color::Default
};
v_flex()
.key_context("MessageEditor")
@ -384,11 +403,16 @@ impl Render for MessageEditor {
ButtonLike::new("submit-message")
.width(button_width.into())
.style(ButtonStyle::Filled)
.disabled(is_editor_empty || !is_model_selected)
.child(
h_flex()
.w_full()
.justify_between()
.child(Label::new("Submit").size(LabelSize::Small))
.child(
Label::new("Submit")
.size(LabelSize::Small)
.color(submit_label_color),
)
.children(
KeyBinding::for_action_in(
&Chat,
@ -401,6 +425,16 @@ impl Render for MessageEditor {
.on_click(move |_event, cx| {
focus_handle.dispatch_action(&Chat, cx);
})
.when(is_editor_empty, |button| {
button.tooltip(|cx| {
Tooltip::text("Type a message to submit", cx)
})
})
.when(!is_model_selected, |button| {
button.tooltip(|cx| {
Tooltip::text("Select a model to continue", cx)
})
})
},
)),
),