Packages

phoenix_kit

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

lib/phoenix_kit_web/live/modules_live.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={@current_path}
project_title={@project_title}
>
<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"
>
<PhoenixKitWeb.Components.Core.Icons.icon_arrow_left />
Back to Dashboard
</.link>
<%!-- Title Section --%>
<div class="text-center">
<h1 class="text-4xl font-bold text-base-content mb-3">Modules Management</h1>
<p class="text-lg text-base-content">Manage system modules and extensions</p>
</div>
</header>
<div class="card bg-base-100 shadow-xl">
<div class="card-body">
<h2 class="card-title text-xl mb-6">Available Modules</h2>
<%!-- Referral Codes Module --%>
<div class="border border-base-300 rounded-lg p-6 mb-4">
<div class="flex items-center justify-between mb-4">
<div class="flex items-center">
<div class="text-2xl mr-3">🎫</div>
<div>
<h3 class="text-lg font-semibold text-base-content">Referral Codes System</h3>
<p class="text-sm text-base-content/70">
Manage referral codes for user registration and tracking
</p>
</div>
</div>
<div class="form-control">
<label class="label cursor-pointer">
<input
type="checkbox"
class="toggle toggle-primary"
checked={@referral_codes_enabled}
phx-click="toggle_referral_codes"
phx-value-enabled="toggle"
/>
</label>
</div>
</div>
<%!-- Module Settings (shown when enabled) --%>
<%= if @referral_codes_enabled do %>
<div class="bg-base-200 rounded-lg p-4 mt-4">
<h4 class="font-medium text-base-content mb-3">Module Settings</h4>
<div class="flex items-center justify-between mb-4">
<div>
<span class="text-sm font-medium text-base-content">
Required for Registration
</span>
<p class="text-xs text-base-content/70">
When enabled, users must provide a valid referral code to register
</p>
</div>
<div class="form-control">
<label class="label cursor-pointer">
<input
type="checkbox"
class="toggle toggle-secondary toggle-sm"
checked={@referral_codes_required}
phx-click="toggle_referral_codes_required"
phx-value-required="toggle"
/>
</label>
</div>
</div>
<%!-- Max Codes Per User Setting --%>
<div class="flex items-center justify-between mb-4">
<div>
<span class="text-sm font-medium text-base-content">
Max Codes Per User
</span>
<p class="text-xs text-base-content/70">
Maximum number of referral codes each user can create
</p>
</div>
<div class="form-control">
<form phx-change="update_max_codes_per_user">
<input
type="number"
name="max_codes_per_user"
class="input input-bordered input-sm w-20 text-center"
value={@max_codes_per_user}
min="1"
max="1000"
phx-debounce="1000"
/>
</form>
</div>
</div>
<%!-- Max Uses Per Code Setting --%>
<div class="flex items-center justify-between mb-4">
<div>
<span class="text-sm font-medium text-base-content">
Max Uses Per Code
</span>
<p class="text-xs text-base-content/70">
Maximum number of times any single referral code can be used
</p>
</div>
<div class="form-control">
<form phx-change="update_max_uses_per_code">
<input
type="number"
name="max_uses_per_code"
class="input input-bordered input-sm w-20 text-center"
value={@max_uses_per_code}
min="1"
max="10000"
phx-debounce="1000"
/>
</form>
</div>
</div>
<div class="flex justify-between items-center mt-4">
<div class="text-xs text-base-content/60">
Status:
<span class="font-medium">
{if @referral_codes_required, do: "Required", else: "Optional"}
</span>
</div>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/referral-codes")}
class="btn btn-outline btn-primary btn-sm"
>
<svg class="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"
/>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"
/>
</svg>
Manage Codes
</.link>
</div>
</div>
<% end %>
</div>
<%!-- Email Module --%>
<div class="border border-base-300 rounded-lg p-6 mb-4">
<div class="flex items-center justify-between mb-4">
<div class="flex items-center">
<div class="text-2xl mr-3">📧</div>
<div>
<h3 class="text-lg font-semibold text-base-content">Email System</h3>
<p class="text-sm text-base-content/70">
Track and analyze all outgoing emails with delivery events
</p>
</div>
</div>
<div class="form-control">
<label class="label cursor-pointer">
<input
type="checkbox"
class="toggle toggle-primary"
checked={@email_tracking_enabled}
phx-click="toggle_email_tracking"
/>
</label>
</div>
</div>
<%!-- Module Settings (shown when enabled) --%>
<%= if @email_tracking_enabled do %>
<div class="bg-base-200 rounded-lg p-4 mt-4">
<h4 class="font-medium text-base-content mb-3">Module Settings</h4>
<%!-- Save Email Body Setting --%>
<div class="flex items-center justify-between mb-4">
<div>
<span class="text-sm font-medium text-base-content">
Save Full Email Body
</span>
<p class="text-xs text-base-content/70">
Store complete email content for debugging (uses more storage)
</p>
</div>
<div class="form-control">
<label class="label cursor-pointer">
<input
type="checkbox"
class="toggle toggle-secondary toggle-sm"
checked={@email_tracking_save_body}
phx-click="toggle_email_tracking_save_body"
/>
</label>
</div>
</div>
<%!-- SES Events Setting --%>
<div class="flex items-center justify-between mb-4">
<div>
<span class="text-sm font-medium text-base-content">
Track AWS SES Events
</span>
<p class="text-xs text-base-content/70">
Receive delivery, bounce, and complaint events from AWS SES
</p>
</div>
<div class="form-control">
<label class="label cursor-pointer">
<input
type="checkbox"
class="toggle toggle-secondary toggle-sm"
checked={@email_tracking_ses_events}
phx-click="toggle_email_tracking_ses_events"
/>
</label>
</div>
</div>
<%!-- Retention Days Setting --%>
<div class="flex items-center justify-between mb-4">
<div>
<span class="text-sm font-medium text-base-content">
Retention Days
</span>
<p class="text-xs text-base-content/70">
How long to keep email logs before automatic cleanup
</p>
</div>
<div class="form-control">
<form phx-change="update_email_tracking_retention">
<input
type="number"
name="retention_days"
class="input input-bordered input-sm w-20 text-center"
value={@email_tracking_retention_days}
min="7"
max="365"
phx-debounce="1000"
/>
</form>
</div>
</div>
<div class="flex justify-between items-center mt-4">
<div class="text-xs text-base-content/60">
Status: <span class="font-medium text-success">Active</span>
</div>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/email-logs")}
class="btn btn-outline btn-primary btn-sm"
>
<svg class="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
/>
</svg>
View Email Logs
</.link>
</div>
</div>
<% end %>
</div>
<%!-- Future Modules Placeholder --%>
<div class="border border-base-300 rounded-lg p-6 border-dashed">
<div class="flex items-center justify-between">
<div class="flex items-center">
<div class="text-2xl mr-3 opacity-50">📦</div>
<div>
<h3 class="text-lg font-semibold text-base-content/50">
More Modules Coming Soon
</h3>
<p class="text-sm text-base-content/40">
Additional system modules and extensions will be available here
</p>
</div>
</div>
<div class="form-control">
<label class="label cursor-pointer">
<input
type="checkbox"
class="toggle toggle-primary opacity-50"
disabled
/>
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>