Packages

phoenix_kit

1.3.0
1.7.210 1.7.209 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 entities entities.ex
Raw

lib/phoenix_kit_web/live/modules/entities/entities.ex

defmodule PhoenixKitWeb.Live.Modules.Entities.Entities do
@moduledoc """
LiveView for listing and managing all entities.
Provides interface for viewing, publishing, and deleting entity schemas.
"""
use PhoenixKitWeb, :live_view
alias PhoenixKit.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] || "en"
Gettext.put_locale(PhoenixKitWeb.Gettext, locale)
Process.put(:phoenix_kit_current_locale, locale)
project_title = Settings.get_setting("project_title", "PhoenixKit")
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")
{:ok, socket}
end
def handle_params(params, _url, socket) do
status = params["status"] || socket.assigns.selected_status
search_term = params["search"] || socket.assigns.search_term
view_mode = 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)
locale = socket.assigns[:current_locale] || "en"
socket =
socket
|> push_patch(to: Routes.path("/admin/entities?#{params}", locale: locale))
{: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)
locale = socket.assigns[:current_locale] || "en"
socket =
socket
|> push_patch(to: Routes.path("/admin/entities?#{params}", locale: locale))
{: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)
locale = socket.assigns[:current_locale] || "en"
socket =
socket
|> push_patch(to: Routes.path("/admin/entities?#{params}", locale: locale))
{:noreply, socket}
end
def handle_event("clear_filters", _params, socket) do
params = build_url_params("all", "", socket.assigns.view_mode)
locale = socket.assigns[:current_locale] || "en"
socket =
socket
|> push_patch(to: Routes.path("/admin/entities?#{params}", locale: locale))
{:noreply, socket}
end
def handle_event("archive_entity", %{"id" => id}, socket) do
entity = Entities.get_entity!(String.to_integer(id))
# 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", %{"id" => id}, socket) do
entity = Entities.get_entity!(String.to_integer(id))
# 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
# 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
URI.encode_query(params)
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
end