From faf2bb0e2ea8da385515c411d3eff786e8e441fb Mon Sep 17 00:00:00 2001 From: Thelonius Kort Date: Tue, 14 Feb 2023 21:02:48 +0100 Subject: [PATCH] Improve logic and add working "delete" links --- .../components/public_components.ex | 6 +---- .../controllers/artikel_controller.ex | 11 +++++--- lib/outlook_web/live/article_live/show.ex | 25 +++++++++++++------ .../live/article_live/show.html.heex | 11 ++++---- lib/outlook_web/live/author_live/show.ex | 11 +++++++- .../live/author_live/show.html.heex | 2 +- .../live/translation_live/index.html.heex | 16 ------------ .../live/translation_live/show.html.heex | 2 +- 8 files changed, 45 insertions(+), 39 deletions(-) diff --git a/lib/outlook_web/components/public_components.ex b/lib/outlook_web/components/public_components.ex index 9866381..5a467db 100644 --- a/lib/outlook_web/components/public_components.ex +++ b/lib/outlook_web/components/public_components.ex @@ -5,11 +5,7 @@ defmodule OutlookWeb.PublicComponents do use Phoenix.Component import OutlookWeb.ViewHelpers - use Phoenix.VerifiedRoutes, - endpoint: OutlookWeb.Endpoint, - router: OutlookWeb.Router, - statics: OutlookWeb.static_paths() - import Phoenix.HTML + use OutlookWeb, :verified_routes alias Phoenix.LiveView.JS diff --git a/lib/outlook_web/controllers/artikel_controller.ex b/lib/outlook_web/controllers/artikel_controller.ex index 9245597..7fba3a5 100644 --- a/lib/outlook_web/controllers/artikel_controller.ex +++ b/lib/outlook_web/controllers/artikel_controller.ex @@ -8,8 +8,13 @@ defmodule OutlookWeb.ArtikelController do render(conn, :index, artikel: artikel, page_title: "Artikel") end - def show(conn, %{"id" => id}) do - artikel = Artikel.get_artikel!(id) - render(conn, :show, artikel: artikel, page_title: artikel.title) + def show(conn, %{"tid" => tid} = params) do + case Artikel.get_artikel_by_tid(tid) do + {:ok, artikel} -> render(conn, :show, artikel: artikel, page_title: artikel.title) + {:error, message} -> conn + |> put_status(404) + |> render(OutlookWeb.ErrorHTML, "404.html") + |> halt() + end end end diff --git a/lib/outlook_web/live/article_live/show.ex b/lib/outlook_web/live/article_live/show.ex index 256d396..fd1a4d2 100644 --- a/lib/outlook_web/live/article_live/show.ex +++ b/lib/outlook_web/live/article_live/show.ex @@ -1,8 +1,7 @@ defmodule OutlookWeb.ArticleLive.Show do use OutlookWeb, :live_view - alias Outlook.Articles - alias Outlook.InternalTree + alias Outlook.{Articles,InternalTree,Translations} @impl true def mount(_params, _session, socket) do @@ -11,12 +10,24 @@ defmodule OutlookWeb.ArticleLive.Show do @impl true def handle_params(%{"id" => id}, _, socket) do + {:noreply, socket + |> assign(:page_title, page_title(socket.assigns.live_action)) + |> get_and_assign_article(id)} + end + + @impl true + def handle_event("delete_translation", %{"id" => id}, socket) do + translation = Translations.get_translation!(id) + {:ok, _} = Translations.delete_translation(translation) + + {:noreply, socket |> get_and_assign_article(socket.assigns.article.id)} + end + + defp get_and_assign_article(socket, id) do article = Articles.get_article_with_translations!(id) - {:noreply, - socket - |> assign(:page_title, page_title(socket.assigns.live_action)) - |> assign(:article_content, InternalTree.garnish(article.content, %{tunits: %{class: "tunit"}})) - |> assign(:article, article)} + socket + |> assign(:article_content, InternalTree.garnish(article.content, %{tunits: %{class: "tunit"}})) + |> assign(:article, article) end defp page_title(:show), do: "Show Article" diff --git a/lib/outlook_web/live/article_live/show.html.heex b/lib/outlook_web/live/article_live/show.html.heex index 4c3e0a7..e694cfe 100644 --- a/lib/outlook_web/live/article_live/show.html.heex +++ b/lib/outlook_web/live/article_live/show.html.heex @@ -28,11 +28,11 @@ <.link navigate={~p"/translations/#{translation.id}/edit"}>Edit - <%!-- <:action :let={translation}> - <.link phx-click={JS.push("delete", value: %{id: translation.id})} data-confirm="Are you sure?"> + <:action :let={translation}> + <.link phx-click={JS.push("delete_translation", value: %{id: translation.id})} data-confirm="Are you sure?"> Delete - --%> +
@@ -40,10 +40,11 @@ hide boundaries <.render_doc tree={@article_content} />
+
-<.link navigate={~p"/translations/new?article_id=#{@article.id}"}>New Translation +<.link class="text-sm font-semibold" navigate={~p"/translations/new?article_id=#{@article.id}"}>New Translation -<.back navigate={~p"/articles"}>Back to articles +<.back navigate={~p"/authors/#{@article.author}"}>Back to author <.modal :if={@live_action == :edit} id="article-modal" show on_cancel={JS.patch(~p"/articles/#{@article}")}> <.live_component diff --git a/lib/outlook_web/live/author_live/show.ex b/lib/outlook_web/live/author_live/show.ex index 73e59a7..2d14e76 100644 --- a/lib/outlook_web/live/author_live/show.ex +++ b/lib/outlook_web/live/author_live/show.ex @@ -1,7 +1,7 @@ defmodule OutlookWeb.AuthorLive.Show do use OutlookWeb, :live_view - alias Outlook.Authors + alias Outlook.{Authors,Articles} @impl true def mount(_params, _session, socket) do @@ -16,6 +16,15 @@ defmodule OutlookWeb.AuthorLive.Show do |> assign(:author, Authors.get_author_with_articles!(id))} end + @impl true + def handle_event("delete_article", %{"id" => id}, socket) do + article = Articles.get_article!(id) + {:ok, _} = Articles.delete_article(article) + + {:noreply, socket + |> assign(:author, Authors.get_author_with_articles!(socket.assigns.author.id))} + end + defp page_title(:show), do: "Show Author" defp page_title(:edit), do: "Edit Author" end diff --git a/lib/outlook_web/live/author_live/show.html.heex b/lib/outlook_web/live/author_live/show.html.heex index abca2c1..b87e673 100644 --- a/lib/outlook_web/live/author_live/show.html.heex +++ b/lib/outlook_web/live/author_live/show.html.heex @@ -31,7 +31,7 @@ <.link patch={~p"/articles/#{article}/edit"}>Edit <:action :let={article}> - <.link phx-click={JS.push("delete", value: %{id: article.id})} data-confirm="Are you sure?"> + <.link phx-click={JS.push("delete_article", value: %{id: article.id})} data-confirm="Are you sure?"> Delete diff --git a/lib/outlook_web/live/translation_live/index.html.heex b/lib/outlook_web/live/translation_live/index.html.heex index d890132..4d4537b 100644 --- a/lib/outlook_web/live/translation_live/index.html.heex +++ b/lib/outlook_web/live/translation_live/index.html.heex @@ -22,19 +22,3 @@ - -<.modal - :if={@live_action in [:new, :edit]} - id="translation-modal" - show - on_cancel={JS.navigate(~p"/translations")} -> - <.live_component - module={OutlookWeb.TranslationLive.FormComponent} - id={@translation.id || :new} - title={@page_title} - action={@live_action} - translation={@translation} - navigate={~p"/translations"} - /> - diff --git a/lib/outlook_web/live/translation_live/show.html.heex b/lib/outlook_web/live/translation_live/show.html.heex index 8da189e..16f6f92 100644 --- a/lib/outlook_web/live/translation_live/show.html.heex +++ b/lib/outlook_web/live/translation_live/show.html.heex @@ -22,4 +22,4 @@ <.render_doc tree={InternalTree.render_translation(@translation.article.content, @translation.content)} />
-<.back navigate={~p"/translations"}>Back to translations +<.back navigate={~p"/articles/#{@translation.article}"}>Back to