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 - --%> +