diff --git a/lib/music_library_web/live/record_live/form_component.ex b/lib/music_library_web/live/record_live/form_component.ex
index 1b2f5200..ea660e54 100644
--- a/lib/music_library_web/live/record_live/form_component.ex
+++ b/lib/music_library_web/live/record_live/form_component.ex
@@ -3,6 +3,14 @@ defmodule MusicLibraryWeb.RecordLive.FormComponent do
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
def render(assigns) do
~H"""
@@ -27,6 +35,15 @@ defmodule MusicLibraryWeb.RecordLive.FormComponent do
options={Ecto.Enum.values(MusicLibrary.Records.Record, :type)}
/>
<.input field={@form[:year]} type="number" label="Year" />
+
+ <.label for={@uploads.image_data.ref}>
+ Cover art
+
+ <.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}
+ />
+
<:actions>
<.button phx-disable-with="Saving...">Save Record
@@ -52,16 +69,30 @@ defmodule MusicLibraryWeb.RecordLive.FormComponent do
end
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
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} ->
notify_parent({:saved, record})
{:noreply,
socket
+ |> assign(:uploaded_images, [])
|> put_flash(:info, "Record updated successfully")
|> push_patch(to: socket.assigns.patch)}