towerops/lib/towerops_web/live/admin/org_live/index.ex

43 lines
1.2 KiB
Elixir

defmodule ToweropsWeb.Admin.OrgLive.Index do
@moduledoc """
Admin interface for viewing and managing organizations.
"""
use ToweropsWeb, :live_view
alias Towerops.Admin
@impl true
def mount(_params, _session, socket) do
orgs = Admin.list_all_organizations()
{:ok,
socket
|> assign(:page_title, "All Organizations")
|> assign(:timezone, socket.assigns.current_scope.timezone)
|> assign(:organizations, orgs)}
end
@impl true
def handle_event("delete_org", %{"id" => org_id}, socket) do
superuser = socket.assigns.current_scope.superuser || socket.assigns.current_scope.user
ip = get_connect_info_ip(socket)
case Admin.delete_organization(org_id, superuser.id, ip) do
{:ok, _} ->
{:noreply,
socket
|> put_flash(:info, "Organization deleted successfully")
|> assign(:organizations, Admin.list_all_organizations())}
{:error, _} ->
{:noreply, put_flash(socket, :error, "Failed to delete organization")}
end
end
defp get_connect_info_ip(socket) do
case get_connect_info(socket, :peer_data) do
%{address: address} -> to_string(:inet_parse.ntoa(address))
_ -> "unknown"
end
end
end