@@ -388,49 +388,10 @@ defmodule LightningWeb.AiAssistant.Component do
388388
389389 case action do
390390 :new ->
391- socket
392- |> delegate_to_handler ( :on_session_close )
393- |> assign ( :action , :new )
394- |> assign ( :session , nil )
395- |> assign_async ( [ :all_sessions , :pagination_meta ] , fn ->
396- case handler . list_sessions ( assigns , sort_direction ,
397- limit: @ default_page_size
398- ) do
399- % { sessions: sessions , pagination: pagination } ->
400- { :ok , % { all_sessions: sessions , pagination_meta: pagination } }
401- end
402- end )
391+ load_and_show_session_list ( socket , handler , assigns , sort_direction )
403392
404393 :show ->
405- try do
406- session = handler . get_session! ( assigns )
407-
408- message_loading =
409- Enum . any? ( session . messages , fn msg ->
410- msg . role == :user && msg . status in [ :pending , :processing ]
411- end )
412-
413- socket
414- |> assign ( :session , session )
415- |> assign ( :action , :show )
416- |> assign (
417- :pending_message ,
418- if message_loading do
419- AsyncResult . loading ( )
420- else
421- AsyncResult . ok ( nil )
422- end
423- )
424- |> delegate_to_handler ( :on_session_open , [ session ] )
425- rescue
426- Ecto.NoResultsError ->
427- # Session doesn't exist or doesn't belong to this job
428- # Fall back to showing the session list
429- socket
430- |> apply_action ( :new )
431- |> assign ( :action , :new )
432- |> assign ( :session , nil )
433- end
394+ load_and_show_session ( socket , handler , assigns )
434395 end
435396 end
436397
@@ -450,32 +411,40 @@ defmodule LightningWeb.AiAssistant.Component do
450411 end
451412
452413 defp load_and_show_session ( socket , handler , assigns ) do
453- session = handler . get_session! ( assigns )
414+ case fetch_session ( handler , assigns ) do
415+ { :ok , session } ->
416+ message_loading =
417+ Enum . any? ( session . messages , fn msg ->
418+ msg . role == :user && msg . status in [ :pending , :processing ]
419+ end )
454420
455- message_loading =
456- Enum . any? ( session . messages , fn msg ->
457- msg . role == :user && msg . status in [ :pending , :processing ]
458- end )
421+ socket
422+ |> assign ( :session , session )
423+ |> assign ( :action , :show )
424+ |> assign (
425+ :pending_message ,
426+ if message_loading do
427+ AsyncResult . loading ( )
428+ else
429+ AsyncResult . ok ( nil )
430+ end
431+ )
432+ |> delegate_to_handler ( :on_session_open , [ session ] )
459433
460- socket
461- |> assign ( :session , session )
462- |> assign ( :action , :show )
463- |> assign (
464- :pending_message ,
465- if message_loading do
466- AsyncResult . loading ( )
467- else
468- AsyncResult . ok ( nil )
469- end
470- )
471- |> delegate_to_handler ( :on_session_open , [ session ] )
434+ :error ->
435+ socket
436+ |> apply_action ( :new )
437+ |> assign ( :action , :new )
438+ |> assign ( :session , nil )
439+ end
440+ end
441+
442+ defp fetch_session ( handler , assigns ) do
443+ { :ok , handler . get_session! ( assigns ) }
472444 rescue
473- Ecto.NoResultsError ->
474- socket
475- |> apply_action ( :new )
476- |> assign ( :action , :new )
477- |> assign ( :session , nil )
445+ Ecto.NoResultsError -> :error
478446 end
447+
479448 defp save_message ( socket , action , content ) do
480449 result =
481450 case action do
0 commit comments