Using :eph from now on to store ephemeral data like :sibling_with. Additionally added cleaning up :eph before saving to db. And renamed InternalTree.Basic to InternalTree.RawInternalBasic to make clear that it contains function for an intermediary tree structure.
72 lines
2.2 KiB
Elixir
72 lines
2.2 KiB
Elixir
defmodule OutlookWeb.ArticleLive.New do
|
|
use OutlookWeb, :live_view
|
|
|
|
import OutlookWeb.ArticleLive.NewComponents
|
|
|
|
alias OutlookWeb.ArticleLive.FormComponent
|
|
alias Outlook.{Articles,Authors,HtmlPreparations,InternalTree}
|
|
alias Articles.{Article,RawHtmlInput}
|
|
|
|
require Logger
|
|
|
|
@impl true
|
|
def mount(_params, _session, socket) do
|
|
{:ok,
|
|
socket
|
|
|> assign(:page_title, "New Article")
|
|
|> assign(:raw_html_input, %RawHtmlInput{})
|
|
|> assign(:changeset, Articles.change_raw_html_input(%RawHtmlInput{}))
|
|
|> assign(:selected_els, [])
|
|
|> assign(:step, :import_raw_html)}
|
|
end
|
|
|
|
@impl true
|
|
def handle_params(%{"author_id" => author_id}, _, socket) do
|
|
author = Authors.get_author!(author_id)
|
|
article = %Article{author_id: author.id}
|
|
{:noreply,
|
|
socket
|
|
|> assign(:author, author)
|
|
|> assign(:article, article)}
|
|
end
|
|
|
|
@impl true
|
|
def handle_event("validate_raw_html_input", %{"raw_html_input" => raw_html_input_params}, socket) do
|
|
changeset = validate_raw_html_input(raw_html_input_params, socket)
|
|
{:noreply, assign(socket, :changeset, changeset)}
|
|
end
|
|
|
|
def handle_event("convert_raw_html_input", %{"raw_html_input" => raw_html_input_params}, socket) do
|
|
changeset = validate_raw_html_input(raw_html_input_params, socket)
|
|
case changeset.valid? do
|
|
true ->
|
|
{:noreply,
|
|
socket
|
|
|> assign(:raw_internal_tree,
|
|
HtmlPreparations.convert_raw_html_input(raw_html_input_params["content"]))
|
|
|> assign(:step, :review_raw_internaltree)}
|
|
false ->
|
|
{:noreply, assign(socket, :changeset, changeset)}
|
|
end
|
|
end
|
|
|
|
@impl true
|
|
def handle_event("approve_raw_internaltree", _, socket) do
|
|
socket = socket
|
|
|> assign(:raw_internal_tree,
|
|
InternalTree.partition_text(socket.assigns.raw_internal_tree))
|
|
{:noreply, socket |> assign(:step, :review_translation_units)}
|
|
end
|
|
|
|
@impl true
|
|
def handle_event("approve_translation_units", _, socket) do
|
|
{:noreply, socket |> assign(:step, :final_form)}
|
|
end
|
|
|
|
defp validate_raw_html_input(raw_html_input_params, socket) do
|
|
socket.assigns.raw_html_input
|
|
|> Articles.change_raw_html_input(raw_html_input_params)
|
|
|> Map.put(:action, :validate)
|
|
end
|
|
end
|