Add "Unite with next" button

This commit is contained in:
Thelonius Kort
2023-05-02 22:09:04 +02:00
parent 4a8f1c3c80
commit 7990b74bf0
8 changed files with 91 additions and 16 deletions

View File

@ -17,6 +17,7 @@ defmodule OutlookWeb.ArticleLive.New do
|> assign(:raw_html_input, %RawHtmlInput{})
|> assign(:changeset, Articles.change_raw_html_input(%RawHtmlInput{}))
|> assign(:selected_els, [])
|> assign(:selected_tunits, [])
|> assign(:step, :import_raw_html)}
end
@ -26,6 +27,7 @@ defmodule OutlookWeb.ArticleLive.New do
article = %Article{author_id: author.id}
{:noreply,
socket
|> assign(:menu_entries, InternalTree.tunit_modifiers()) # REMOVE ME!
|> assign(:author, author)
|> assign(:article, article)}
end
@ -43,7 +45,9 @@ defmodule OutlookWeb.ArticleLive.New do
{:noreply,
socket
|> assign(:raw_internal_tree,
HtmlPreparations.convert_raw_html_input(raw_html_input_params["content"]))
HtmlPreparations.convert_raw_html_input(raw_html_input_params["content"])
|> InternalTree.garnish(%{})
)
|> assign(:step, :review_raw_internaltree)}
false ->
{:noreply, assign(socket, :changeset, changeset)}
@ -54,10 +58,42 @@ defmodule OutlookWeb.ArticleLive.New do
def handle_event("approve_raw_internaltree", _, socket) do
socket = socket
|> assign(:raw_internal_tree,
InternalTree.partition_text(socket.assigns.raw_internal_tree))
InternalTree.partition_text(socket.assigns.raw_internal_tree)
|> InternalTree.garnish(%{tunits: %{class: :tunit}})
|> InternalTree.add_phx_click_event(
nodes: :tunits,
click: "toggle_selected_tunit")
)
|> assign(:menu_entries, InternalTree.tunit_modifiers())
{:noreply, socket |> assign(:step, :review_translation_units)}
end
@impl true
def handle_event("toggle_selected_tunit", %{"nid" => tunit_id}, socket) do
{:noreply, toggle_selected_tunit(socket, tunit_id)}
end
defp toggle_selected_tunit(socket, tunit_id) do
before = socket.assigns.selected_tunits
selected_tunits = case Enum.member?(before, tunit_id) do
false -> List.insert_at(before, -1, tunit_id)
true -> List.delete(before, tunit_id)
end
fun = fn n -> n.nid in selected_tunits && "yes" || "no" end
socket
|> assign(:raw_internal_tree, InternalTree.garnish(socket.assigns.raw_internal_tree, %{tunits: %{selected: fun}}))
|> assign(:selected_tunits, selected_tunits)
end
@impl true
def handle_event("modify_tunits", %{"modifier" => modifier}, socket) do
{:noreply,
socket
|> assign(:raw_internal_tree,
InternalTree.modify_tunits(socket.assigns.raw_internal_tree, modifier, socket.assigns.selected_tunits)
)}
end
@impl true
def handle_event("approve_translation_units", _, socket) do
{:noreply, socket |> assign(:step, :final_form)}