Packages
phoenix_kit
1.7.161
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/modules/referrals/web/list.html.heex
<PhoenixKitWeb.Components.LayoutWrapper.app_layout
flash={@flash}
phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
page_title="{@project_title} Referrals"
current_path={@url_path}
project_title={@project_title}
>
<div class="container flex flex-col mx-auto px-4 py-6">
<.admin_page_header
back={PhoenixKit.Utils.Routes.path("/admin/modules")}
title="Referrals"
subtitle="Manage referrals for user registration"
/>
<%!-- Stats Cards --%>
<div class="grid grid-cols-1 md:grid-cols-4 gap-4 mb-6">
<PhoenixKitWeb.Components.Core.StatCard.stat_card
compact={true}
rounded="xl"
value={@system_stats.total_codes}
title="Total Codes"
subtitle="All referrals"
>
<:icon>
<.icon name="hero-ticket" class="w-5 h-5" />
</:icon>
</PhoenixKitWeb.Components.Core.StatCard.stat_card>
<PhoenixKitWeb.Components.Core.StatCard.stat_card
compact={true}
rounded="xl"
value={@system_stats.active_codes}
title="Active Codes"
subtitle="Currently available"
>
<:icon>
<.icon name="hero-check-circle" class="w-5 h-5" />
</:icon>
</PhoenixKitWeb.Components.Core.StatCard.stat_card>
<PhoenixKitWeb.Components.Core.StatCard.stat_card
compact={true}
rounded="xl"
value={@system_stats.total_usage}
title="Total Uses"
subtitle="Registration count"
>
<:icon>
<.icon name="hero-chart-bar" class="w-5 h-5" />
</:icon>
</PhoenixKitWeb.Components.Core.StatCard.stat_card>
<PhoenixKitWeb.Components.Core.StatCard.stat_card
compact={true}
rounded="xl"
value={@system_stats.codes_with_usage}
title="Used Codes"
subtitle="Codes with activity"
>
<:icon>
<.icon name="hero-arrow-trending-up" class="w-5 h-5" />
</:icon>
</PhoenixKitWeb.Components.Core.StatCard.stat_card>
</div>
<%!-- Status and Actions --%>
<div class="card bg-base-100 shadow-xl mb-6">
<div class="card-body">
<div class="flex justify-between items-center">
<div>
<h2 class="card-title text-xl">Status</h2>
<p class="text-base-content/70">
Status:
<span class={"badge #{if @config.enabled, do: "badge-success", else: "badge-error"}"}>
{if @config.enabled, do: "Enabled", else: "Disabled"}
</span>
<%= if @config.enabled do %>
| Registration:
<span class={"badge #{if @config.required, do: "badge-warning", else: "badge-info"}"}>
{if @config.required, do: "Required", else: "Optional"}
</span>
<% end %>
</p>
</div>
<%= if @config.enabled do %>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/users/referral-codes/new")}
class="btn btn-primary"
>
<.icon name="hero-plus" class="w-5 h-5 mr-2" /> New Code
</.link>
<% else %>
<div class="text-sm text-base-content/50">
Enable referrals in Modules to create codes
</div>
<% end %>
</div>
</div>
</div>
<%= if @config.enabled do %>
<%!-- Referrals Table --%>
<div class="card bg-base-100 shadow-xl">
<div class="card-body">
<h2 class="card-title text-xl mb-4">Referrals</h2>
<%= if @codes == [] do %>
<div class="text-center py-12">
<.icon name="hero-ticket" class="h-16 w-16 mx-auto text-base-content/40 mb-4" />
<h3 class="text-xl font-semibold text-base-content mb-2">No Referrals</h3>
<p class="text-base-content/70 max-w-md mx-auto mb-4">
Create your first referral code to start tracking user registrations.
</p>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/users/referral-codes/new")}
class="btn btn-primary"
>
Create First Code
</.link>
</div>
<% else %>
<.table_default variant="zebra">
<.table_default_header>
<.table_default_row>
<.table_default_header_cell>Code</.table_default_header_cell>
<.table_default_header_cell>Description</.table_default_header_cell>
<.table_default_header_cell>Usage</.table_default_header_cell>
<.table_default_header_cell>Expiration</.table_default_header_cell>
<.table_default_header_cell>Status</.table_default_header_cell>
<.table_default_header_cell>Created By</.table_default_header_cell>
<.table_default_header_cell>Beneficiary</.table_default_header_cell>
<.table_default_header_cell>Actions</.table_default_header_cell>
</.table_default_row>
</.table_default_header>
<.table_default_body>
<%= for code <- @codes do %>
<.table_default_row>
<.table_default_cell>
<div class="font-mono text-lg font-bold">{code.code}</div>
</.table_default_cell>
<.table_default_cell>
<div class="max-w-xs truncate">{code.description}</div>
</.table_default_cell>
<.table_default_cell>
<div class="flex items-center">
<div class="text-sm">
{code.number_of_uses} / {code.max_uses}
</div>
<div class="ml-2 w-20 bg-gray-200 rounded-full h-2">
<div
class="bg-blue-600 h-2 rounded-full"
style={"width: #{min(100, (code.number_of_uses / code.max_uses) * 100)}%"}
>
</div>
</div>
</div>
</.table_default_cell>
<.table_default_cell>
<.expiration_date date={code.expiration_date} />
</.table_default_cell>
<.table_default_cell>
<.code_status_badge code={code} />
</.table_default_cell>
<.table_default_cell>
<div class="text-sm">
<%= if code.creator do %>
{code.creator.email}
<% else %>
<span class="text-gray-500">Unknown</span>
<% end %>
</div>
</.table_default_cell>
<.table_default_cell>
<div class="text-sm">
<%= if code.beneficiary_user do %>
{code.beneficiary_user.email}
<% else %>
<span class="text-gray-500">None</span>
<% end %>
</div>
</.table_default_cell>
<.table_default_cell>
<div class="flex gap-2">
<.link
navigate={
PhoenixKit.Utils.Routes.path(
"/admin/users/referral-codes/edit/#{code.uuid}"
)
}
class="btn btn-sm btn-outline"
>
<.icon name="hero-pencil" class="w-4 h-4" />
</.link>
<button
class={"btn btn-sm #{if code.status, do: "btn-warning", else: "btn-success"}"}
phx-click="toggle_code_status"
phx-value-uuid={code.uuid}
>
{if code.status, do: "Deactivate", else: "Activate"}
</button>
<button
class="btn btn-sm btn-error"
phx-click="delete_code"
phx-value-uuid={code.uuid}
onclick="return confirm('Are you sure you want to delete this referral code?')"
>
<.icon name="hero-trash" class="w-4 h-4" />
</button>
</div>
</.table_default_cell>
</.table_default_row>
<% end %>
</.table_default_body>
</.table_default>
<% end %>
</div>
</div>
<% else %>
<%!-- System Disabled Message --%>
<div class="card bg-base-100 shadow-xl">
<div class="card-body text-center py-12">
<.icon name="hero-lock-closed" class="h-16 w-16 mx-auto text-base-content/40 mb-4" />
<h3 class="text-xl font-semibold text-base-content mb-2">
Referrals Disabled
</h3>
<p class="text-base-content/70 max-w-md mx-auto mb-4">
Referrals are currently disabled. Enable them in the Modules page to start creating and managing referrals.
</p>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/modules")}
class="btn btn-primary"
>
Go to Modules
</.link>
</div>
</div>
<% end %>
</div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>