Packages

phoenix_kit

1.3.1
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.html.heex
Raw

lib/phoenix_kit_web/live/modules.html.heex

<PhoenixKitWeb.Components.LayoutWrapper.app_layout
flash={@flash}
phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
page_title="{@project_title} Modules"
current_path={@url_path}
project_title={@project_title}
current_locale={@current_locale}
>
<div class="container flex flex-col mx-auto px-4 py-6">
<%!-- Header Section --%>
<header class="w-full relative mb-6">
<%!-- Back Button (Left aligned) --%>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/dashboard")}
class="btn btn-outline btn-primary btn-sm absolute left-0 top-0 -mb-12"
>
<.icon name="hero-arrow-left" class="w-4 h-4" /> Back to Dashboard
</.link>
<%!-- Title Section --%>
<div class="text-center">
<h1 class="text-4xl font-bold text-base-content mb-3">Modules</h1>
<p class="text-lg text-base-content">Manage modules</p>
</div>
</header>
<div class="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
<%!-- Referral Codes Module --%>
<PhoenixKitWeb.Components.Core.ModuleCard.module_card
title="Referral Codes"
description="Manage referral codes for user registration and monitoring"
icon="🎫"
enabled={@referral_codes_enabled}
toggle_event="toggle_referral_codes"
>
<:status_badges>
<span class={"badge #{if @referral_codes_enabled, do: "badge-success", else: "badge-neutral"}"}>
{if @referral_codes_enabled, do: "Enabled", else: "Disabled"}
</span>
<%= if @referral_codes_enabled do %>
<span class="badge badge-outline ml-2">
{if @referral_codes_required, do: "Required", else: "Optional"}
</span>
<% end %>
</:status_badges>
<:action_buttons>
<%= if @referral_codes_enabled do %>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings/referral-codes")}
class="btn btn-primary btn-sm"
>
<.icon name="hero-cog-6-tooth" class="w-4 h-4 mr-1" /> Configure
</.link>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/users/referral-codes")}
class="btn btn-outline btn-sm"
>
<.icon name="hero-users" class="w-4 h-4 mr-1" /> Manage Codes
</.link>
<% else %>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings/referral-codes")}
class="btn btn-outline btn-sm"
>
<.icon name="hero-cog-6-tooth" class="w-4 h-4 mr-1" /> Configure
</.link>
<% end %>
</:action_buttons>
<:stats>
<div class="grid grid-cols-2 gap-2 text-xs">
<div>
<span class="text-base-content/70">Max per user:</span>
<span class="font-medium">{@max_codes_per_user}</span>
</div>
<div>
<span class="text-base-content/70">Max uses:</span>
<span class="font-medium">{@max_uses_per_code}</span>
</div>
</div>
</:stats>
</PhoenixKitWeb.Components.Core.ModuleCard.module_card>
<%!-- Email Module --%>
<PhoenixKitWeb.Components.Core.ModuleCard.module_card
title="Emails"
description="Track and analyze all outgoing emails with delivery events"
icon="📧"
enabled={@email_enabled}
toggle_event="toggle_emails"
>
<:status_badges>
<span class={"badge #{if @email_enabled, do: "badge-success", else: "badge-neutral"}"}>
{if @email_enabled, do: "Enabled", else: "Disabled"}
</span>
<%= if @email_enabled do %>
<span class="badge badge-outline ml-2">
{if @email_save_body, do: "Body Saved", else: "Headers Only"}
</span>
<% end %>
</:status_badges>
<:action_buttons>
<div class="flex flex-col items-stretch space-y-2">
<%= if @email_enabled do %>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings/emails")}
class="btn btn-primary btn-sm"
>
<.icon name="hero-cog-6-tooth" class="w-4 h-4 mr-1" /> Configure
</.link>
<div class="flex gap-2">
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/emails")}
class="btn btn-outline btn-sm flex-1"
>
<.icon name="hero-envelope" class="w-4 h-4 mr-1" /> Emails
</.link>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/modules/emails/templates")}
class="btn btn-outline btn-sm flex-1"
>
<.icon name="hero-document-text" class="w-4 h-4 mr-1" /> Templates
</.link>
</div>
<% else %>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings/emails")}
class="btn btn-outline btn-sm"
>
<.icon name="hero-cog-6-tooth" class="w-4 h-4 mr-1" /> Configure
</.link>
<% end %>
</div>
</:action_buttons>
<:stats>
<div class="grid grid-cols-2 gap-2 text-xs">
<div>
<span class="text-base-content/70">SES Events:</span>
<span class="font-medium">
{if @email_ses_events, do: "On", else: "Off"}
</span>
</div>
<div>
<span class="text-base-content/70">Retention:</span>
<span class="font-medium">{@email_retention_days} days</span>
</div>
</div>
</:stats>
</PhoenixKitWeb.Components.Core.ModuleCard.module_card>
<%!-- Languages Module --%>
<PhoenixKitWeb.Components.Core.ModuleCard.module_card
title="Languages"
description="Manage language module and translations"
icon="🌐"
enabled={@languages_enabled}
toggle_event="toggle_languages"
>
<:status_badges>
<span class={"badge #{if @languages_enabled, do: "badge-success", else: "badge-neutral"}"}>
{if @languages_enabled, do: "Enabled", else: "Disabled"}
</span>
<%= if @languages_enabled do %>
<span class="badge badge-outline ml-2">
{if @languages_default,
do: @languages_default["name"],
else: "No Default"}
</span>
<% end %>
</:status_badges>
<:action_buttons>
<%= if @languages_enabled do %>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings/languages")}
class="btn btn-primary btn-sm"
>
<.icon name="hero-cog-6-tooth" class="w-4 h-4 mr-1" /> Configure
</.link>
<% else %>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings/languages")}
class="btn btn-outline btn-sm"
>
<.icon name="hero-cog-6-tooth" class="w-4 h-4 mr-1" /> Configure
</.link>
<% end %>
</:action_buttons>
<:stats>
<div class="grid grid-cols-2 gap-2 text-xs">
<div>
<span class="text-base-content/70">Total languages:</span>
<span class="font-medium">{@languages_count}</span>
</div>
<div>
<span class="text-base-content/70">Enabled:</span>
<span class="font-medium">{@languages_enabled_count}</span>
</div>
</div>
</:stats>
</PhoenixKitWeb.Components.Core.ModuleCard.module_card>
<%!-- Entities Module --%>
<PhoenixKitWeb.Components.Core.ModuleCard.module_card
title={gettext("Entities")}
description={gettext("Dynamic content types with custom fields (WordPress ACF)")}
icon="📦"
enabled={@entities_enabled}
toggle_event="toggle_entities"
>
<:status_badges>
<span class={"badge #{if @entities_enabled, do: "badge-success", else: "badge-neutral"}"}>
{if @entities_enabled, do: gettext("Enabled"), else: gettext("Disabled")}
</span>
</:status_badges>
<:action_buttons>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings/entities")}
class={"btn btn-sm #{if @entities_enabled, do: "btn-primary", else: "btn-outline"}"}
>
<.icon name="hero-cog-6-tooth" class="w-4 h-4 mr-1" />
{gettext("Configure")}
</.link>
</:action_buttons>
<:stats>
<div class="grid grid-cols-2 gap-2 text-xs">
<div>
<span class="text-base-content/70">{gettext("Total Entities:")}</span>
<span class="font-medium">{@entities_count}</span>
</div>
<div>
<span class="text-base-content/70">{gettext("Data Records:")}</span>
<span class="font-medium">{@entities_total_data}</span>
</div>
</div>
</:stats>
</PhoenixKitWeb.Components.Core.ModuleCard.module_card>
</div>
<%!-- Future Modules Section --%>
<div class="mt-8">
<div class="card bg-base-100 shadow-xl border-2 border-dashed border-base-300">
<div class="card-body text-center py-8">
<div class="text-4xl mb-4 opacity-50">📦</div>
<h3 class="text-xl font-semibold text-base-content/60 mb-2">
More Modules Coming Soon
</h3>
<p class="text-base-content/50">
Additional system modules and extensions will be available here as they're developed.
Each module will have its own dedicated configuration page for scalable management.
</p>
</div>
</div>
</div>
<%!-- Module Management Help --%>
<div class="alert alert-info mt-6">
<.icon name="hero-information-circle" class="w-5 h-5" />
<div>
<h3 class="font-bold">Module Management</h3>
<p class="text-sm">
Each module can be enabled or disabled using the toggle switches above.
Click "Configure" to access detailed settings for each module on dedicated pages.
</p>
</div>
</div>
</div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>