No need to keep uploaded images in the socket

As images are only processed on save AFTER validation, we can avoid
keeping them in the socket, with the only downside of losing a little
resilience in case the save operation errors out (in which case the
upload would be lost).
This commit is contained in:
Claudio Ortolina
2024-09-30 13:50:07 +01:00
parent 1f1c69f738
commit 9cd24bad17
@@ -7,7 +7,6 @@ defmodule MusicLibraryWeb.RecordLive.FormComponent do
def mount(socket) do def mount(socket) do
{:ok, {:ok,
socket socket
|> assign(:uploaded_images, [])
|> allow_upload(:image_data, accept: ~w(.jpg .jpeg), max_entries: 1)} |> allow_upload(:image_data, accept: ~w(.jpg .jpeg), max_entries: 1)}
end end
@@ -74,14 +73,12 @@ defmodule MusicLibraryWeb.RecordLive.FormComponent do
{:ok, File.read!(path)} {:ok, File.read!(path)}
end) end)
socket save_record(socket, record_params, uploaded_images)
|> 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, record_params, uploaded_images) do
params = params =
case socket.assigns.uploaded_images do case uploaded_images do
[] -> record_params [] -> record_params
[image_path] -> Map.put(record_params, "image_data", image_path) [image_path] -> Map.put(record_params, "image_data", image_path)
end end
@@ -92,7 +89,6 @@ defmodule MusicLibraryWeb.RecordLive.FormComponent do
{: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)}