diff --git a/lib/music_library_web/components/notes_component.ex b/lib/music_library_web/components/notes_component.ex new file mode 100644 index 00000000..d501b9db --- /dev/null +++ b/lib/music_library_web/components/notes_component.ex @@ -0,0 +1,76 @@ +defmodule MusicLibraryWeb.NotesComponent do + use MusicLibraryWeb, :live_component + + alias MusicLibrary.Records + + def open(id), do: Fluxon.open_dialog(id) + + @impl true + def update(assigns, socket) do + changeset = + assigns.record + |> Records.change_record() + + {:ok, + socket + |> assign(assigns) + |> assign(:form, to_form(changeset))} + end + + @impl true + def render(assigns) do + ~H""" +
+ <.sheet + id={@sheet_id} + placement="right" + class="min-w-xs sm:min-w-sm" + > + <.simple_form + for={@form} + id="record-notes-form" + phx-target={@myself} + phx-change="validate" + phx-auto-recover="recover_form" + phx-submit="save" + > + <.textarea class="w-full h-96" field={@form[:notes]} label={gettext("Notes")} /> + <:actions> +
+ <.button + variant="solid" + class="w-full md:w-auto" + phx-disable-with={gettext("Saving...")} + > + {gettext("Save")} + +
+ + + +
+ """ + end + + @impl true + def handle_event("validate", %{"record" => record_params}, socket) do + changeset = Records.change_record(socket.assigns.record, record_params) + {:noreply, assign(socket, form: to_form(changeset, action: :validate))} + end + + def handle_event("save", %{"record" => record_params}, socket) do + case Records.update_record(socket.assigns.record, record_params) do + {:ok, _record} -> + {:noreply, + socket + |> put_toast(:info, gettext("Record updated successfully"))} + + {:error, %Ecto.Changeset{} = changeset} -> + {:noreply, assign(socket, form: to_form(changeset))} + end + end + + def handle_event("recover_form", params, socket) do + handle_event("validate", params, socket) + end +end diff --git a/lib/music_library_web/live/collection_live/show.html.heex b/lib/music_library_web/live/collection_live/show.html.heex index c8931084..e4fb14bf 100644 --- a/lib/music_library_web/live/collection_live/show.html.heex +++ b/lib/music_library_web/live/collection_live/show.html.heex @@ -25,6 +25,18 @@

+