Allow uploading custom cover art

This commit is contained in:
Claudio Ortolina
2024-09-30 10:31:45 +01:00
parent b0b39671bc
commit 1f1c69f738
@@ -3,6 +3,14 @@ defmodule MusicLibraryWeb.RecordLive.FormComponent do
alias MusicLibrary.Records alias MusicLibrary.Records
@impl true
def mount(socket) do
{:ok,
socket
|> assign(:uploaded_images, [])
|> allow_upload(:image_data, accept: ~w(.jpg .jpeg), max_entries: 1)}
end
@impl true @impl true
def render(assigns) do def render(assigns) do
~H""" ~H"""
@@ -27,6 +35,15 @@ defmodule MusicLibraryWeb.RecordLive.FormComponent do
options={Ecto.Enum.values(MusicLibrary.Records.Record, :type)} options={Ecto.Enum.values(MusicLibrary.Records.Record, :type)}
/> />
<.input field={@form[:year]} type="number" label="Year" /> <.input field={@form[:year]} type="number" label="Year" />
<div>
<.label for={@uploads.image_data.ref}>
Cover art
</.label>
<.live_file_input
class="mt-2 block w-full rounded-lg text-zinc-900 focus:ring-0 sm:text-sm sm:leading-6"
upload={@uploads.image_data}
/>
</div>
<:actions> <:actions>
<.button phx-disable-with="Saving...">Save Record</.button> <.button phx-disable-with="Saving...">Save Record</.button>
</:actions> </:actions>
@@ -52,16 +69,30 @@ defmodule MusicLibraryWeb.RecordLive.FormComponent do
end end
def handle_event("save", %{"record" => record_params}, socket) do def handle_event("save", %{"record" => record_params}, socket) do
save_record(socket, socket.assigns.action, record_params) uploaded_images =
consume_uploaded_entries(socket, :image_data, fn %{path: path}, _entry ->
{:ok, File.read!(path)}
end)
socket
|> assign(:uploaded_images, uploaded_images)
|> save_record(socket.assigns.action, record_params)
end end
defp save_record(socket, :edit, record_params) do defp save_record(socket, :edit, record_params) do
case Records.update_record(socket.assigns.record, record_params) do params =
case socket.assigns.uploaded_images do
[] -> record_params
[image_path] -> Map.put(record_params, "image_data", image_path)
end
case Records.update_record(socket.assigns.record, params) do
{:ok, record} -> {:ok, record} ->
notify_parent({:saved, record}) notify_parent({:saved, record})
{:noreply, {:noreply,
socket socket
|> assign(:uploaded_images, [])
|> put_flash(:info, "Record updated successfully") |> put_flash(:info, "Record updated successfully")
|> push_patch(to: socket.assigns.patch)} |> push_patch(to: socket.assigns.patch)}