lib/exshome_player/web/live/playlist.ex

defmodule ExshomePlayer.Web.Live.Playlist do
  @moduledoc """
  Playlist page.
  """
  alias ExshomePlayer.Schemas.Track
  alias ExshomePlayer.Services.Playlist

  use ExshomeWeb.Live.AppPage,
    icon: "📃",
    dependencies: [{Playlist, :playlist}]

  @impl LiveView
  def handle_event("play", %{"id" => id}, %Socket{} = socket) do
    Playlist.play(id)
    {:noreply, socket}
  end

  @impl LiveView
  def handle_event("delete", %{"id" => id}, %Socket{} = socket) do
    id
    |> Track.get!()
    |> Track.delete!()

    {:noreply, socket}
  end

  def handle_event("edit", %{"id" => id}, %Socket{} = socket) do
    {:noreply, open_modal(socket, ExshomePlayer.Web.Live.EditLinkModal, %{"track_id" => id})}
  end

  @impl LiveView
  def handle_event("open_file_modal", _, %Socket{} = socket) do
    {:noreply, open_modal(socket, ExshomePlayer.Web.Live.UploadFileModal)}
  end

  @impl LiveView
  def handle_event("open_new_link_modal", _, %Socket{} = socket) do
    {:noreply, open_modal(socket, ExshomePlayer.Web.Live.EditLinkModal)}
  end
end