61 lines
1.4 KiB
Elixir
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
|