Skip to content

Commit

Permalink
refactor: add network & show
Browse files Browse the repository at this point in the history
  • Loading branch information
sorax committed Feb 4, 2024
1 parent d7a5b42 commit 1f83eb9
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 19 deletions.
53 changes: 51 additions & 2 deletions lib/radiator_web/live/admin_live/index.ex
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,34 @@ defmodule RadiatorWeb.AdminLive.Index do
end

@impl true
def handle_event("new", _params, socket) do
def handle_event("new_network", _params, socket) do
network = %Podcast.Network{}
changeset = Podcast.change_network(network)

socket
|> assign(:action, :new)
|> assign(:action, :new_network)
|> assign(:network, network)
|> assign(:form, to_form(changeset))
|> reply(:noreply)
end

def handle_event("new_show", params, socket) do
show = %Podcast.Show{}
changeset = Podcast.change_show(show, params)

socket
|> assign(:action, :new_show)
|> assign(:show, show)
|> assign(:form, to_form(changeset))
|> reply(:noreply)
end

def handle_event("cancel", _params, socket) do
socket
|> assign(:action, nil)
|> reply(:noreply)
end

def handle_event("validate", %{"network" => params}, socket) do
changeset =
socket.assigns.network
Expand All @@ -39,16 +56,47 @@ defmodule RadiatorWeb.AdminLive.Index do
|> reply(:noreply)
end

def handle_event("validate", %{"show" => params}, socket) do
changeset =
socket.assigns.show
|> Podcast.change_show(params)
|> Map.put(:action, :validate)

socket
|> assign(:form, to_form(changeset))
|> reply(:noreply)
end

def handle_event("save", %{"network" => params}, socket) do
case Podcast.create_network(params) do
{:ok, _network} ->
socket
|> assign(:action, nil)
|> assign(:networks, Podcast.list_networks(preload: :shows))
|> put_flash(:info, "Network created successfully")
|> reply(:noreply)

{:error, %Ecto.Changeset{} = changeset} ->
socket
|> assign(:form, to_form(changeset))
|> put_flash(:info, "Network could not be created")
|> reply(:noreply)
end
end

def handle_event("save", %{"show" => params}, socket) do
case Podcast.create_show(params) do
{:ok, _show} ->
socket
|> assign(:action, nil)
|> assign(:networks, Podcast.list_networks(preload: :shows))
|> put_flash(:info, "Show created successfully")
|> reply(:noreply)

{:error, %Ecto.Changeset{} = changeset} ->
socket
|> assign(:form, to_form(changeset))
|> put_flash(:info, "Show could not be created")
|> reply(:noreply)
end
end
Expand All @@ -58,6 +106,7 @@ defmodule RadiatorWeb.AdminLive.Index do
{:ok, _} = Podcast.delete_network(network)

socket
|> assign(:networks, Podcast.list_networks(preload: :shows))
# |> stream_delete(:networks, network)}
|> reply(:noreply)
end
Expand Down
60 changes: 43 additions & 17 deletions lib/radiator_web/live/admin_live/index.html.heex
Original file line number Diff line number Diff line change
Expand Up @@ -7,38 +7,64 @@
<.icon name="hero-x-circle" class="w-6 h-6" />
</button>
</h2>

<div class="grid grid-cols-3 gap-6 sm:grid-cols-6">
<.link
:for={{show, i} <- Enum.with_index(network.shows)}
href={~p"/admin/podcast/#{show}"}
class="bg-[#f0f4f4] aspect-square"
class="bg-[#f0f4f4] aspect-square rounded"
>
<img src={"/images/pic1#{i}.jpg"} alt="" />
<div class="p-2 text-center"><%= show.title %></div>
</.link>
<button
:if={@action != :new_show}
class="bg-[#df7366] text-white rounded"
phx-click="new_show"
phx-value-network_id={network.id}
>
<.icon name="hero-plus" class="block w-5 h-5 m-auto" /> Create Show
</button>
</div>
</div>
<button
:if={@action != :new}
:if={@action != :new_network}
class="my-4 rounded text-white bg-[#df7366] px-8 py-2"
phx-click="new"
phx-click="new_network"
>
Create Network
<.icon name="hero-plus" class="block w-5 h-5 m-auto" /> Create Network
</button>
<div :if={@action == :new_network} class="p-4 my-4 bg-[#f0f4f4]">
<h3 class="text-xl">Create Network</h3>
<.form :let={f} for={@form} id="network-form" phx-change="validate" phx-submit="save">
<.input field={f[:title]} type="text" label="Title" />
<div class="mt-2 flex items-center justify-between gap-6">
<div
class="phx-submit-loading:opacity-75 cursor-pointer rounded-lg border border-zinc-900 hover:border-zinc-700 py-2 px-3 text-sm font-semibold leading-6 text-zinc-900 active:text-zinc-900/80"
phx-click="cancel"
>
Cancel
</div>
<.button phx-disable-with="Saving...">Save Network</.button>
</div>
</.form>
</div>

<.simple_form
:if={@action == :new}
for={@form}
id="network-form"
phx-change="validate"
phx-submit="save"
>
<.input field={@form[:title]} type="text" label="Title" />
<:actions>
<.button phx-disable-with="Saving...">Save Network</.button>
</:actions>
</.simple_form>
<div :if={@action == :new_show} class="p-4 my-4 bg-[#f0f4f4]">
<h3 class="text-xl">Create Show</h3>
<.form :let={f} for={@form} id="show-form" phx-change="validate" phx-submit="save">
<.input field={f[:title]} type="text" label="Title" />
<.input field={f[:network_id]} type="hidden" />
<div class="mt-2 flex items-center justify-between gap-6">
<div
class="phx-submit-loading:opacity-75 cursor-pointer rounded-lg border border-zinc-900 hover:border-zinc-700 py-2 px-3 text-sm font-semibold leading-6 text-zinc-900 active:text-zinc-900/80"
phx-click="cancel"
>
Cancel
</div>
<.button phx-disable-with="Saving...">Save show</.button>
</div>
</.form>
</div>
</section>

<section class="my-12">
Expand Down

0 comments on commit 1f83eb9

Please sign in to comment.