@@ -250,6 +250,7 @@ defmodule LightningWeb.AiAssistant.Component do
250250 socket
251251 ) do
252252 cleared_params = Map . put ( params , "content" , nil )
253+ trimmed_content = if is_binary ( content ) , do: String . trim ( content ) , else: ""
253254
254255 cond do
255256 not socket . assigns . can_edit ->
@@ -263,6 +264,23 @@ defmodule LightningWeb.AiAssistant.Component do
263264 socket . assigns . ai_limit_result != :ok ->
264265 { :noreply , socket }
265266
267+ trimmed_content == "" ->
268+ changeset = socket . assigns . handler . validate_form ( % { "content" => "" } )
269+
270+ changeset =
271+ Ecto.Changeset . add_error (
272+ changeset ,
273+ :content ,
274+ "Please enter a message before sending"
275+ )
276+
277+ { :noreply ,
278+ socket
279+ |> assign (
280+ changeset: changeset ,
281+ alert: "Please enter a message before sending"
282+ ) }
283+
266284 true ->
267285 { :noreply ,
268286 socket
@@ -272,7 +290,7 @@ defmodule LightningWeb.AiAssistant.Component do
272290 :changeset ,
273291 socket . assigns . handler . validate_form ( cleared_params )
274292 )
275- |> save_message ( socket . assigns . action , content ) }
293+ |> save_message ( socket . assigns . action , trimmed_content ) }
276294 end
277295 end
278296
@@ -447,7 +465,9 @@ defmodule LightningWeb.AiAssistant.Component do
447465 end
448466
449467 defp handle_save_error ( socket , error ) do
450- assign ( socket , alert: socket . assigns . handler . error_message ( error ) )
468+ socket
469+ |> assign ( alert: socket . assigns . handler . error_message ( error ) )
470+ |> assign ( pending_message: AsyncResult . ok ( nil ) )
451471 end
452472
453473 defp redirect_url ( base_url , query_params ) do
@@ -679,11 +699,11 @@ defmodule LightningWeb.AiAssistant.Component do
679699 < . simple_button_with_tooltip
680700 id = { "ai-assistant-form-submit-btn-#{ @ id } " }
681701 type = "submit "
682- disabled = { @ disabled }
702+ disabled = { @ disabled || form_content_empty? ( @ form [ :content ] . value ) }
683703 form = { @ form_id }
684704 class = { [
685705 "p-1.5 rounded-full focus:outline-none focus:ring-2 focus:ring-offset-2 transition-all duration-200 flex items-center justify-center h-7 w-7" ,
686- if ( @ disabled ,
706+ if ( @ disabled || form_content_empty? ( @ form [ :content ] . value ) ,
687707 do:
688708 "text-gray-400 bg-gray-300 cursor-not-allowed focus:ring-gray-300" ,
689709 else:
@@ -933,6 +953,15 @@ defmodule LightningWeb.AiAssistant.Component do
933953 Timex . diff ( DateTime . utc_now ( ) , datetime , :hours ) < 1
934954 end
935955
956+ defp form_content_empty? ( value ) do
957+ case value do
958+ nil -> true
959+ "" -> true
960+ content when is_binary ( content ) -> String . trim ( content ) == ""
961+ _ -> false
962+ end
963+ end
964+
936965 defp render_onboarding ( assigns ) do
937966 assigns = assign ( assigns , ai_quote: Quotes . random_enabled ( ) )
938967
0 commit comments