Packages
phoenix_kit
1.7.53
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
Current section
Files
lib/modules/publishing/web/post_show.ex
defmodule PhoenixKit.Modules.Publishing.Web.PostShow do
@moduledoc """
Post overview page showing metadata, versions, languages, and actions.
Accessible at `/admin/publishing/:group/:post_uuid`.
"""
use PhoenixKitWeb, :live_view
use Gettext, backend: PhoenixKitWeb.Gettext
alias PhoenixKit.Modules.Publishing
alias PhoenixKit.Modules.Publishing.PubSub, as: PublishingPubSub
alias PhoenixKit.Modules.Publishing.Storage
alias PhoenixKit.Settings
alias PhoenixKit.Utils.Date, as: UtilsDate
alias PhoenixKit.Utils.Routes
@impl true
def mount(params, _session, socket) do
group_slug = params["group"]
post_uuid = params["post_uuid"]
if connected?(socket) && group_slug do
PublishingPubSub.subscribe_to_posts(group_slug)
end
date_time_settings =
Settings.get_settings_cached(
["date_format", "time_format", "time_zone"],
%{
"date_format" => "Y-m-d",
"time_format" => "H:i",
"time_zone" => "0"
}
)
socket =
socket
|> assign(:group_slug, group_slug)
|> assign(:post_uuid, post_uuid)
|> assign(:post, nil)
|> assign(:group_name, Publishing.group_name(group_slug) || group_slug)
|> assign(:date_time_settings, date_time_settings)
|> assign(:enabled_languages, Storage.enabled_language_codes())
|> assign(:page_title, gettext("Post Overview"))
{:ok, socket}
end
@impl true
def handle_params(%{"post_uuid" => post_uuid}, _uri, socket) do
group_slug = socket.assigns.group_slug
case Publishing.read_post_by_uuid(post_uuid) do
{:ok, post} ->
socket =
socket
|> assign(:post, post)
|> assign(:post_uuid, post_uuid)
|> assign(:page_title, post.metadata.title || gettext("Post Overview"))
{:noreply, socket}
{:error, _} ->
{: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}
end
# PubSub handlers for live updates
@impl true
def handle_info({:post_updated, _group_slug, _post_slug}, socket) do
# Reload post data
case Publishing.read_post_by_uuid(socket.assigns.post_uuid) do
{:ok, post} -> {:noreply, assign(socket, :post, post)}
{:error, _} -> {:noreply, socket}
end
end
def handle_info(_msg, socket), do: {:noreply, socket}
# Helper functions available to template
def format_datetime(post) do
case {post[:date], post[:time]} do
{%Date{} = date, %Time{} = time} ->
{:ok, dt} = DateTime.new(date, time, "Etc/UTC")
UtilsDate.format_datetime_with_user_format(dt)
{%Date{} = date, _} ->
UtilsDate.format_date_with_user_format(date)
_ ->
""
end
end
def version_status_badge_class("published"), do: "badge-success"
def version_status_badge_class("draft"), do: "badge-warning"
def version_status_badge_class("archived"), do: "badge-ghost"
def version_status_badge_class(_), do: "badge-ghost"
def language_status_color("published"), do: "bg-success"
def language_status_color("draft"), do: "bg-warning"
def language_status_color("archived"), do: "bg-base-content/20"
def language_status_color(_), do: "bg-base-content/20"
end