Packages

phoenix_kit

1.4.7
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 phoenix_kit_web live modules publishing settings.html.heex
Raw

lib/phoenix_kit_web/live/modules/publishing/settings.html.heex

<PhoenixKitWeb.Components.LayoutWrapper.app_layout
flash={@flash}
phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
page_title={@page_title}
current_path={@current_path}
project_title={@project_title}
current_locale={@current_locale}
>
<div class="container mx-auto px-4 py-6 space-y-6">
<div class="flex items-center justify-between">
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings", locale: @current_locale)}
class="btn btn-outline btn-sm"
>
<.icon name="hero-arrow-left" class="w-4 h-4 mr-1" />
{gettext("Back to Settings")}
</.link>
<div class="text-right">
<p class="text-sm text-base-content/70">{gettext("Project")}</p>
<p class="text-lg font-semibold">{@project_title}</p>
</div>
</div>
<header class="text-center space-y-2">
<p class="text-sm uppercase tracking-wide text-base-content/60">
{gettext("Publishing Module")}
</p>
<h1 class="text-4xl font-bold text-base-content">{gettext("Manage Types")}</h1>
<p class="text-base text-base-content/70 max-w-2xl mx-auto">
{gettext(
"Define the content types your team can publish. Each type appears as its own tab in the publishing workspace."
)}
</p>
</header>
<div class="grid gap-6 lg:grid-cols-3">
<div class="card bg-base-100 shadow-xl border border-base-200 lg:col-span-2">
<div class="card-body space-y-6">
<div class="space-y-2">
<h2 class="text-2xl font-semibold text-base-content">{gettext("Content Types")}</h2>
<p class="text-sm text-base-content/70">
{gettext(
"Create dedicated sections like Blogs, News, or Reviews. Each type stores its content in structured folders on disk."
)}
</p>
</div>
<form
phx-submit="add_type"
class="flex flex-col sm:flex-row gap-3 items-start sm:items-center"
>
<input
type="text"
name="new_type"
value={@new_type}
placeholder={gettext("e.g. News")}
class="input input-bordered flex-1 w-full sm:w-auto"
phx-change="update_new_type"
phx-debounce="300"
/>
<button type="submit" class="btn btn-primary btn-sm">
<.icon name="hero-plus-circle" class="w-4 h-4 mr-1" /> {gettext("Add Type")}
</button>
</form>
<%= if @types == [] do %>
<div class="alert alert-info">
<.icon name="hero-information-circle" class="w-5 h-5" />
<div>
<h3 class="font-bold">{gettext("No publishing types yet")}</h3>
<p class="text-sm">
{gettext("Create your first type to start publishing content.")}
</p>
</div>
</div>
<% else %>
<div class="space-y-4">
<%= for type <- @types do %>
<div class="border border-base-200 rounded-lg p-4 flex items-center justify-between">
<div>
<p class="text-base font-semibold text-base-content">{type["name"]}</p>
<p class="text-xs text-base-content/60">
{gettext("Slug")}: <code class="font-mono">{type["slug"]}</code>
</p>
</div>
<button
type="button"
phx-click="remove_type"
phx-value-slug={type["slug"]}
class="btn btn-ghost btn-sm text-error hover:bg-error hover:text-error-content"
>
<.icon name="hero-trash" class="w-4 h-4 mr-1" /> {gettext("Remove")}
</button>
</div>
<% end %>
</div>
<% end %>
</div>
</div>
<aside class="card bg-base-100 shadow-xl border border-base-200">
<div class="card-body space-y-4">
<h3 class="text-xl font-semibold text-base-content">{gettext("How it works")}</h3>
<ul class="text-sm text-base-content/70 space-y-3">
<li>{gettext("Each type becomes a dedicated publishing workspace.")}</li>
<li>
{gettext("Entries are organized by date & time with multi-language support.")}
</li>
<li>
{gettext(
"Files live under priv/static/publishing for easy versioning and deployment."
)}
</li>
<li>
{gettext(
"Language variants are automatically created based on enabled languages."
)}
</li>
</ul>
</div>
</aside>
</div>
</div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>