Packages

phoenix_kit

1.7.74
1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib modules publishing web preview.ex
Raw

lib/modules/publishing/web/preview.ex

defmodule PhoenixKit.Modules.Publishing.Web.Preview do
@moduledoc """
Preview rendering for publishing posts.
"""
use PhoenixKitWeb, :live_view
use Gettext, backend: PhoenixKitWeb.Gettext
require Logger
alias PhoenixKit.Modules.Publishing
# alias PhoenixKit.Modules.Publishing.PageBuilder # COMMENTED OUT: Component system
alias PhoenixKit.Modules.Publishing.Renderer
alias PhoenixKit.Modules.Publishing.Web.Editor.Helpers
alias PhoenixKit.Settings
alias PhoenixKit.Utils.Routes
@impl true
def mount(params, _session, socket) do
group_slug = params["group"] || params["category"] || params["type"]
socket =
socket
|> assign(:project_title, Settings.get_project_title())
|> assign(:page_title, "Preview")
|> assign(:group_slug, group_slug)
|> assign(:group_name, Publishing.group_name(group_slug) || group_slug)
|> assign(
:current_path,
Routes.path("/admin/publishing/#{group_slug}/preview")
)
|> assign(:rendered_content, nil)
|> assign(:error, nil)
{:ok, socket}
end
@impl true
def handle_params(%{"post_uuid" => post_uuid} = params, _uri, socket) do
group_slug = socket.assigns.group_slug
language = params["lang"]
version = params["v"]
case Publishing.read_post_by_uuid(post_uuid, language, version) do
{:ok, post} ->
case render_markdown_content(post.content) do
{:ok, rendered_html} ->
{:noreply,
socket
|> assign(:post, Map.put(post, :uuid, post_uuid))
|> assign(:group_slug, post.group)
|> assign(:group_name, Publishing.group_name(post.group) || post.group)
|> assign(:rendered_content, rendered_html)
|> assign(:error, nil)}
{:error, error_message} ->
{:noreply,
socket
|> assign(:post, Map.put(post, :uuid, post_uuid))
|> assign(:group_slug, post.group)
|> assign(:group_name, Publishing.group_name(post.group) || post.group)
|> assign(:rendered_content, nil)
|> assign(:error, error_message)}
end
{:error, reason} ->
Logger.warning("[Publishing.Preview] Preview failed for #{post_uuid}: #{inspect(reason)}")
{:noreply,
socket
|> put_flash(:error, gettext("Post not found"))
|> push_navigate(to: Routes.path("/admin/publishing/#{group_slug}"))}
end
end
def handle_params(_params, _uri, socket) do
{:noreply,
socket
|> put_flash(:error, gettext("No post specified"))
|> push_navigate(to: Routes.path("/admin/publishing/#{socket.assigns.group_slug}"))}
end
@impl true
def handle_event("back_to_editor", _params, socket) do
post = socket.assigns[:post]
group_slug = socket.assigns.group_slug
destination =
if post && post[:uuid] do
Helpers.build_edit_url(group_slug, post,
lang: post[:language],
version: post[:version]
)
else
Routes.path("/admin/publishing/#{group_slug}")
end
{:noreply, push_navigate(socket, to: destination)}
end
defp render_markdown_content(content) when is_binary(content) do
content
|> Renderer.render_markdown()
|> then(&{:ok, &1})
rescue
error ->
Logger.error("[Publishing.Preview] Markdown rendering failed: #{inspect(error)}")
{:error, gettext("Failed to render preview.")}
end
end