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
phoenix_kit lib modules blogging web edit.ex
Raw

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