Skip to content

Commit 06b76a2

Browse files
committed
Extract session loading logic into helper functions for better readability
1 parent 25d9bc7 commit 06b76a2

File tree

1 file changed

+32
-63
lines changed

1 file changed

+32
-63
lines changed

lib/lightning_web/live/ai_assistant/component.ex

Lines changed: 32 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)