Packages
phoenix_kit
1.7.19
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/blogging/web/edit.ex
defmodule PhoenixKit.Modules.Blogging.Web.Edit do
@moduledoc """
LiveView for editing blog metadata such as display name and slug.
"""
use PhoenixKitWeb, :live_view
use Gettext, backend: PhoenixKitWeb.Gettext
alias Phoenix.Component
alias PhoenixKit.Modules.Blogging
alias PhoenixKit.Modules.Blogging.PubSub, as: BloggingPubSub
alias PhoenixKit.Settings
alias PhoenixKit.Utils.Routes
def mount(%{"blog" => blog_slug} = _params, _session, socket) do
case find_blog(blog_slug) do
nil ->
{:ok,
socket
|> put_flash(:error, gettext("The requested blog could not be found."))
|> push_navigate(
to: Routes.path("/admin/settings/blogging", locale: socket.assigns.current_locale_base)
)}
blog ->
form =
Component.to_form(%{"name" => blog["name"], "slug" => blog["slug"]}, as: :blog)
{:ok,
socket
|> assign(:project_title, Settings.get_setting("project_title", "PhoenixKit"))
|> assign(:page_title, gettext("Edit Blog"))
|> assign(
:current_path,
Routes.path("/admin/settings/blogging/#{blog_slug}/edit",
locale: socket.assigns.current_locale_base
)
)
|> assign(:blog, blog)
|> assign(:form, form)}
end
end
def handle_params(_params, _uri, socket), do: {:noreply, socket}
def handle_event("validate", %{"blog" => params}, socket) do
{:noreply, assign(socket, :form, Component.to_form(params, as: :blog))}
end
def handle_event("save", %{"blog" => params}, socket) do
case Blogging.update_blog(socket.assigns.blog["slug"], params) do
{:ok, updated_blog} ->
# Broadcast blog updated for live dashboard updates
BloggingPubSub.broadcast_blog_updated(updated_blog)
updated_form =
Component.to_form(
%{"name" => updated_blog["name"], "slug" => updated_blog["slug"]},
as: :blog
)
{:noreply,
socket
|> assign(:blog, updated_blog)
|> assign(:form, updated_form)
|> put_flash(:info, gettext("Blog updated"))
|> push_navigate(
to: Routes.path("/admin/settings/blogging", locale: socket.assigns.current_locale_base)
)}
{:error, :already_exists} ->
{:noreply,
socket
|> put_flash(:error, gettext("Another blog already uses that slug."))
|> assign(:form, Component.to_form(params, as: :blog))}
{:error, :invalid_name} ->
{:noreply,
socket
|> put_flash(:error, gettext("Please provide a valid blog name."))
|> assign(:form, Component.to_form(params, as: :blog))}
{:error, :invalid_slug} ->
{:noreply,
socket
|> put_flash(
:error,
gettext(
"Invalid slug format. Please use only lowercase letters, numbers, and hyphens (e.g. my-blog-name)"
)
)
|> assign(:form, Component.to_form(params, as: :blog))}
{:error, :destination_exists} ->
{:noreply,
socket
|> put_flash(:error, gettext("A directory already exists for that slug."))
|> assign(:form, Component.to_form(params, as: :blog))}
{:error, reason} ->
{:noreply,
socket
|> put_flash(
:error,
gettext("Failed to update blog: %{reason}", reason: inspect(reason))
)
|> assign(:form, Component.to_form(params, as: :blog))}
end
end
def handle_event("cancel", _params, socket) do
{:noreply,
push_navigate(socket,
to: Routes.path("/admin/settings/blogging", locale: socket.assigns.current_locale_base)
)}
end
defp find_blog(slug) do
Blogging.list_blogs()
|> Enum.find(&(&1["slug"] == slug))
end
end