Packages

phoenix_kit

1.7.2
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 hooks.ex
Raw

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

defmodule PhoenixKitWeb.Live.Modules.Entities.Hooks do
@moduledoc """
LiveView hooks for entity module pages.
Provides common setup and subscriptions for all entity-related LiveViews.
"""
import Phoenix.LiveView
alias PhoenixKit.Admin.Presence
alias PhoenixKit.Entities.Events
alias PhoenixKit.Users.Auth.Scope
@doc """
Subscribes to entity events and tracks user presence when the LiveView is connected.
Add this to your entity LiveView with:
on_mount PhoenixKitWeb.Live.Modules.Entities.Hooks
This automatically:
- Subscribes to entity creation, update, and deletion events
- Tracks authenticated user presence for dashboard statistics
"""
def on_mount(:default, _params, session, socket) do
if connected?(socket) do
Events.subscribe_to_entities()
track_page_visit(socket, session)
end
{:cont, socket}
end
defp track_page_visit(socket, session) do
scope = socket.assigns[:phoenix_kit_current_scope]
if scope && Scope.authenticated?(scope) do
user = %{
id: Scope.user_id(scope),
email: Scope.user_email(scope)
}
session_id = session["live_socket_id"] || generate_session_id()
Presence.track_user(user, %{
connected_at: DateTime.utc_now(),
session_id: session_id,
current_page: get_current_page(socket),
ip_address: extract_ip(socket),
user_agent: get_connect_info(socket, :user_agent)
})
end
end
defp get_current_page(socket) do
# Try to get from socket assigns, fallback to generic entities page
socket.assigns[:current_path] || "/admin/entities"
end
defp extract_ip(socket) do
case get_connect_info(socket, :peer_data) do
%{address: {a, b, c, d}} -> "#{a}.#{b}.#{c}.#{d}"
%{address: address} -> to_string(address)
_ -> "unknown"
end
end
defp generate_session_id do
:crypto.strong_rand_bytes(16) |> Base.encode64()
end
end