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