Diffuser/lib/diffuser_web/live/prompt_request_live/show.ex

61 lines
1.4 KiB
Elixir

defmodule DiffuserWeb.PromptRequestLive.Show do
use DiffuserWeb, :live_view
alias Diffuser.Generator
alias Diffuser.Generator.PromptRequest
alias Diffuser.Repo
alias Phoenix.Socket.Broadcast
alias DiffuserWeb.Endpoint
@impl true
def mount(%{"id" => id}, _session, socket) do
Endpoint.subscribe("request:#{id}")
{:ok,
socket
|> assign(:prompt_request, Generator.get_prompt_request!(id))
|> assign(:prompt_request_progress, 0)}
end
@impl true
def handle_params(%{"id" => id}, _, socket) do
{:noreply,
socket
|> assign(:page_title, page_title(socket.assigns.live_action))
|> assign(:prompt_request, Generator.get_prompt_request!(id))}
end
defp page_title(:show), do: "Show Prompt request"
defp page_title(:edit), do: "Edit Prompt request"
@impl true
def handle_info(
%Broadcast{
topic: _,
event: "request",
payload: %{prompt_request: %PromptRequest{} = prompt_request}
},
socket
),
do:
{:noreply,
assign(socket, %{
prompt_request: prompt_request |> Repo.preload(:images)
})}
@impl true
def handle_info(
%Broadcast{
topic: _,
event: "progress",
payload: progress
},
socket
),
do:
{:noreply,
assign(socket, %{
prompt_request_progress: progress
})}
end