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