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>
76 lines
2 KiB
Elixir
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
|