From fd2eb5503cd734f1868f345419a8254ada1de824 Mon Sep 17 00:00:00 2001 From: Thelonius Kort Date: Thu, 12 Jan 2023 20:59:14 +0100 Subject: [PATCH] Add "Save and continue" button to Translation form --- .../live/translation_live/form_component.ex | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/lib/outlook_web/live/translation_live/form_component.ex b/lib/outlook_web/live/translation_live/form_component.ex index c6f8640..152a21a 100644 --- a/lib/outlook_web/live/translation_live/form_component.ex +++ b/lib/outlook_web/live/translation_live/form_component.ex @@ -33,7 +33,12 @@ defmodule OutlookWeb.TranslationLive.FormComponent do <.input field={{f, :unauthorized}} type="checkbox" label="unauthorized" /> <:actions> - <.button phx-disable-with="Saving...">Save Translation + <.button phx-click={JS.set_attribute({"value", "false"}, to: "#continue_edit")} + phx-disable-with="Saving...">Save Translation + + <.button phx-click={JS.set_attribute({"value", "true"}, to: "#continue_edit")} + phx-disable-with="Saving...">Save and Edit <.tunit_editor current_tunit={@current_tunit} target={@myself} /> @@ -92,12 +97,17 @@ defmodule OutlookWeb.TranslationLive.FormComponent do {:noreply, assign(socket, :changeset, changeset)} end - def handle_event("save", %{"translation" => translation_params}, socket) do + def handle_event("save", %{"translation" => translation_params} = params, socket) do socket = socket |> update_translation_with_current_tunit(socket.assigns.current_tunit.status) - translation_params = translation_params - |> Map.put("content", socket.assigns.translation_content) - save_translation(socket, socket.assigns.action, translation_params) + params = %{params | + "translation" => Map.put( + translation_params, + "content", + socket.assigns.translation_content + ) + } + save_translation(socket, socket.assigns.action, params) end def handle_event("tunit_status", %{"status" => status}, socket) do @@ -143,29 +153,36 @@ defmodule OutlookWeb.TranslationLive.FormComponent do |> Map.put(socket.assigns.current_tunit.nid, socket.assigns.current_tunit)) end - defp save_translation(socket, :edit, translation_params) do + defp save_translation(socket, :edit, %{"translation" => translation_params} = params) do case Translations.update_translation(socket.assigns.translation, translation_params) do {:ok, _translation} -> {:noreply, socket |> put_flash(:info, "Translation updated successfully") - |> push_navigate(to: socket.assigns.navigate)} + |> continue_edit(params)} {:error, %Ecto.Changeset{} = changeset} -> {:noreply, assign(socket, :changeset, changeset)} end end - defp save_translation(socket, :new, translation_params) do + defp save_translation(socket, :new, %{"translation" => translation_params} = params) do case Translations.create_translation(translation_params) do {:ok, _translation} -> {:noreply, socket |> put_flash(:info, "Translation created successfully") - |> push_navigate(to: socket.assigns.navigate)} + |> continue_edit(params)} {:error, %Ecto.Changeset{} = changeset} -> {:noreply, assign(socket, changeset: changeset)} end end + + defp continue_edit(socket, %{"continue_edit" => "true"}) do + socket + end + defp continue_edit(socket, %{"continue_edit" => "false"}) do + socket |> push_navigate(to: socket.assigns.navigate) + end end