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
Current section
Files
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>
<PhoenixKitWeb.Components.Core.ModuleCard.module_card
title="Publishing"
description="Create date-based content like blogs and news articles with multi-language support"
icon="📰"
enabled={@publishing_enabled}
toggle_event="toggle_publishing"
>
<:status_badges>
<span class={[
"badge",
if(@publishing_enabled, do: "badge-success", else: "badge-neutral")
]}>
{if @publishing_enabled, do: gettext("Enabled"), else: gettext("Disabled")}
</span>
</:status_badges>
<:action_buttons>
<div class="flex flex-col gap-2 w-full">
<.link
navigate={
PhoenixKit.Utils.Routes.path("/admin/publishing", locale: @current_locale || "en")
}
class={"btn btn-sm #{if @publishing_enabled, do: "btn-primary", else: "btn-outline"}"}
>
<.icon name="hero-document-text" class="w-4 h-4 mr-1" /> {gettext("Open Publishing")}
</.link>
<.link
navigate={
PhoenixKit.Utils.Routes.path("/admin/settings/publishing",
locale: @current_locale || "en"
)
}
class="btn btn-sm btn-outline"
>
<.icon name="hero-cog-6-tooth" class="w-4 h-4 mr-1" /> {gettext("Configure Types")}
</.link>
</div>
</:action_buttons>
</PhoenixKitWeb.Components.Core.ModuleCard.module_card>
<%!-- Pages module remains disabled but code retained for future use --%>
<%!-- Under Construction (Maintenance Mode) Module --%>
<PhoenixKitWeb.Components.Core.ModuleCard.module_card
title="Maintenance Mode"
description="Show maintenance page to non-admin users while you work on the site"
icon="🚧"
enabled={@under_construction_module_enabled}
toggle_event="toggle_under_construction"
>
<:status_badges>
<span class={[
"badge",
if(@under_construction_module_enabled, do: "badge-success", else: "badge-neutral")
]}>
{if @under_construction_module_enabled, do: "Enabled", else: "Disabled"}
</span>
<%= if @under_construction_module_enabled do %>
<span class={[
"badge badge-outline ml-2",
if(@under_construction_enabled, do: "badge-warning", else: "badge-info")
]}>
{if @under_construction_enabled, do: "Maintenance Active", else: "Maintenance Off"}
</span>
<% end %>
</:status_badges>
<:action_buttons>
<div class="flex flex-col gap-2 w-full">
<%= if @under_construction_module_enabled do %>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings/maintenance")}
class="btn btn-sm btn-primary"
>
<.icon name="hero-cog-6-tooth" class="w-4 h-4 mr-1" /> Configure
</.link>
<div class="text-xs text-base-content/70 mt-2">
<strong>Header:</strong>
{@under_construction_header}
</div>
<div class="text-xs text-base-content/70">
<strong>Message:</strong>
{@under_construction_subtext}
</div>
<% else %>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings/maintenance")}
class="btn btn-sm btn-outline"
>
<.icon name="hero-cog-6-tooth" class="w-4 h-4 mr-1" /> Configure
</.link>
<% end %>
</div>
</:action_buttons>
<:stats>
<div class="text-xs text-base-content/70">
{if @under_construction_module_enabled,
do: "Activate maintenance mode in settings to block non-admin users",
else: "Enable module to access maintenance mode settings"}
</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>