Packages
phoenix_kit
1.7.39
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/entities/web/entities.ex
defmodule PhoenixKit.Modules.Entities.Web.Entities do
@moduledoc """
LiveView for listing and managing all entities.
Provides interface for viewing, publishing, and deleting entity schemas.
"""
use PhoenixKitWeb, :live_view
on_mount PhoenixKit.Modules.Entities.Web.Hooks
alias PhoenixKit.Modules.Entities
alias PhoenixKit.Settings
alias PhoenixKit.Utils.Routes
def mount(params, _session, socket) do
# Set locale for LiveView process
locale =
params["locale"] || socket.assigns[:current_locale]
project_title = Settings.get_project_title()
stats = Entities.get_system_stats()
socket =
socket
|> assign(:current_locale, locale)
|> assign(:page_title, gettext("Entities"))
|> assign(:project_title, project_title)
|> assign(:total_entities, stats.total_entities)
|> assign(:active_entities, stats.active_entities)
|> assign(:total_data_records, stats.total_data_records)
|> assign(:selected_status, "all")
|> assign(:search_term, "")
|> assign(:view_mode, "table")
|> apply_filters()
{:ok, socket}
end
def handle_params(params, _url, socket) do
status = Map.get(params, "status", "all")
search_term = Map.get(params, "search", "")
view_mode = Map.get(params, "view", "table")
socket =
socket
|> assign(:selected_status, status)
|> assign(:search_term, search_term)
|> assign(:view_mode, view_mode)
|> apply_filters()
{:noreply, socket}
end
def handle_event("toggle_view_mode", %{"mode" => mode}, socket) do
params = build_url_params(socket.assigns.selected_status, socket.assigns.search_term, mode)
socket =
socket
|> push_patch(
to: Routes.path("/admin/entities#{params}", locale: socket.assigns.current_locale_base)
)
{:noreply, socket}
end
def handle_event("filter_by_status", %{"status" => status}, socket) do
params = build_url_params(status, socket.assigns.search_term, socket.assigns.view_mode)
socket =
socket
|> push_patch(
to: Routes.path("/admin/entities#{params}", locale: socket.assigns.current_locale_base)
)
{:noreply, socket}
end
def handle_event("search", %{"search" => %{"term" => term}}, socket) do
params = build_url_params(socket.assigns.selected_status, term, socket.assigns.view_mode)
socket =
socket
|> push_patch(
to: Routes.path("/admin/entities#{params}", locale: socket.assigns.current_locale_base)
)
{:noreply, socket}
end
def handle_event("clear_filters", _params, socket) do
params = build_url_params("all", "", socket.assigns.view_mode)
socket =
socket
|> push_patch(
to: Routes.path("/admin/entities#{params}", locale: socket.assigns.current_locale_base)
)
{:noreply, socket}
end
def handle_event("archive_entity", %{"uuid" => uuid}, socket) do
entity = Entities.get_entity!(uuid)
# Update entity status to archived
case Entities.update_entity(entity, %{status: "archived"}) do
{:ok, _entity} ->
entities = Entities.list_entities()
stats = Entities.get_system_stats()
socket =
socket
|> assign(:entities, entities)
|> assign(:total_entities, stats.total_entities)
|> assign(:active_entities, stats.active_entities)
|> assign(:total_data_records, stats.total_data_records)
|> put_flash(
:info,
gettext("Entity '%{name}' archived successfully", name: entity.display_name)
)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, gettext("Failed to archive entity"))
{:noreply, socket}
end
end
def handle_event("restore_entity", %{"uuid" => uuid}, socket) do
entity = Entities.get_entity!(uuid)
# Restore entity status to published
case Entities.update_entity(entity, %{status: "published"}) do
{:ok, _entity} ->
entities = Entities.list_entities()
stats = Entities.get_system_stats()
socket =
socket
|> assign(:entities, entities)
|> assign(:total_entities, stats.total_entities)
|> assign(:active_entities, stats.active_entities)
|> assign(:total_data_records, stats.total_data_records)
|> put_flash(
:info,
gettext("Entity '%{name}' restored successfully", name: entity.display_name)
)
{:noreply, socket}
{:error, _changeset} ->
socket = put_flash(socket, :error, gettext("Failed to restore entity"))
{:noreply, socket}
end
end
## Live updates
def handle_info({event, _entity_id}, socket)
when event in [:entity_created, :entity_updated, :entity_deleted] do
socket =
socket
|> refresh_entity_stats()
|> apply_filters()
{:noreply, socket}
end
# Helper Functions
defp build_url_params(status, search_term, view_mode) do
params = []
params =
if status && status != "all" do
[{"status", status} | params]
else
params
end
params =
if search_term && String.trim(search_term) != "" do
[{"search", search_term} | params]
else
params
end
params =
if view_mode && view_mode != "table" do
[{"view", view_mode} | params]
else
params
end
case URI.encode_query(params) do
"" -> ""
query -> "?#{query}"
end
end
defp apply_filters(socket) do
status = socket.assigns[:selected_status] || "all"
search_term = socket.assigns[:search_term] || ""
# Start with all entities
entities = Entities.list_entities()
# Apply status filter
entities =
if status != "all" do
Enum.filter(entities, fn entity -> entity.status == status end)
else
entities
end
# Apply search filter
entities =
if String.trim(search_term) != "" do
search_term_lower = String.downcase(search_term)
Enum.filter(entities, fn entity ->
name_match = String.contains?(String.downcase(entity.name || ""), search_term_lower)
display_name_match =
String.contains?(String.downcase(entity.display_name || ""), search_term_lower)
name_match || display_name_match
end)
else
entities
end
assign(socket, :entities, entities)
end
defp refresh_entity_stats(socket) do
stats = Entities.get_system_stats()
socket
|> assign(:total_entities, stats.total_entities)
|> assign(:active_entities, stats.active_entities)
|> assign(:total_data_records, stats.total_data_records)
end
end