dotfiles/app/lib/prymn_web/live/app_index_live.ex
Nikos Papadakis 818b20f775 add functionality that creates wordpress sites
Reviewed-on: https://git.nikos.gg/prymn/prymn/pulls/9
Co-authored-by: Nikos Papadakis <nikos@papadakis.xyz>
Co-committed-by: Nikos Papadakis <nikos@papadakis.xyz>
2023-12-14 12:27:05 +00:00

76 lines
2 KiB
Elixir

defmodule PrymnWeb.AppIndexLive do
use PrymnWeb, :live_view
alias Prymn.Apps
@impl true
def mount(_, _, socket) do
apps = Apps.list_apps()
for %Apps.App{} = app <- apps do
Phoenix.PubSub.subscribe(Prymn.PubSub, "app:#{app.id}")
end
{:ok, assign(socket, :apps, apps)}
end
@impl true
def render(assigns) do
~H"""
<%= cond do %>
<% assigns.live_action == :new -> %>
<.back navigate={~p"/apps"}>Go back</.back>
<.live_component id={:new} module={PrymnWeb.CreateApp} app_type={assigns[:app_type]} />
<% assigns.apps == [] -> %>
<.onboarding />
<% true -> %>
<div class="mx-auto max-w-2xl">
<.header>
Live Apps
<:subtitle>
All of your apps accross all projects.
</:subtitle>
<:actions>
<Button.primary patch={~p"/apps/new"}>Create app</Button.primary>
</:actions>
</.header>
<div :for={app <- @apps} class="mt-5 bg-violet-100 p-5">
<p>App: <%= app.name %></p>
<p>Server: <%= app.server.name %></p>
</div>
</div>
<% end %>
"""
end
@impl true
def handle_info(msg, socket) do
dbg(msg, label: "Incoming message from pubsub")
{:noreply, socket}
end
@impl true
def handle_params(%{"app_type" => app_type}, _, socket) do
{:noreply, assign(socket, app_type: app_type)}
end
def handle_params(_, _, socket) do
{:noreply,
socket
|> assign(:page_title, (socket.assigns.live_action == :new && "New App") || "Apps")}
end
defp onboarding(assigns) do
~H"""
<div class="grid h-screen items-center">
<div class="pb-64 text-center">
<h1 class="text-3xl font-medium">You have no Apps.</h1>
<h2 class="text-xl">Create your first App here!</h2>
<Button.primary class="mt-10" size="lg" patch={~p"/apps/new"}>
Create a new App
</Button.primary>
</div>
</div>
"""
end
end