Packages

phoenix_kit

1.7.113
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 helpers layout_helpers.ex
Raw

lib/phoenix_kit_web/helpers/layout_helpers.ex

defmodule PhoenixKitWeb.LayoutHelpers do
@moduledoc """
Helper functions for working with PhoenixKit layouts efficiently.
## Performance: Avoiding Unnecessary Layout Diffs
When using the dashboard layout, **do not pass all assigns**:
# ❌ BAD - triggers layout diff on ANY assign change
<PhoenixKitWeb.Layouts.dashboard {assigns}>
# ✅ GOOD - only passes assigns the layout uses
<PhoenixKitWeb.Layouts.dashboard {dashboard_assigns(assigns)}>
The `dashboard_assigns/1` function extracts only the assigns the layout
actually needs, preventing unnecessary network traffic when other assigns
(like application-specific data) change.
"""
# Keys used by the dashboard layout
@dashboard_layout_keys [
# Branding (usually from config, but can be overridden)
:project_title,
:project_title_suffix,
:project_logo,
:project_icon,
:project_logo_height,
:project_logo_class,
:project_home_url,
:show_title_with_logo,
# Core layout assigns
:page_title,
:flash,
:url_path,
:phoenix_kit_current_scope,
:current_locale,
:current_locale_base,
# Tab navigation
:dashboard_tabs,
:tab_viewer_counts,
:collapsed_dashboard_groups,
# Context selector (legacy single)
:show_context_selector,
:dashboard_contexts,
:current_context,
:context_selector_config,
# Context selector (multi)
:context_selector_configs,
:dashboard_contexts_map,
:current_contexts_map,
:show_context_selectors_map,
# Slot content
:inner_block,
# Optional extra sidebar content after shop tabs
:sidebar_after_shop,
# Admin quick-edit link shown in user dropdown
:admin_edit_url,
:admin_edit_label
]
@doc """
Extracts only the assigns needed by the dashboard layout.
Use this to avoid unnecessary layout diffs when other assigns change:
def render(assigns) do
~H\"\"\"
<PhoenixKitWeb.Layouts.dashboard {dashboard_assigns(assigns)}>
<.my_content data={@data} />
</PhoenixKitWeb.Layouts.dashboard>
\"\"\"
end
This prevents the layout from re-rendering when assigns like `@data`
change, since the layout doesn't use `@data`.
## Performance Impact
Without this optimization, a LiveView receiving 7 updates/second can
send ~84KB/sec of redundant layout HTML. With this optimization,
layout diffs only occur when layout-relevant assigns actually change.
"""
@spec dashboard_assigns(map()) :: map()
def dashboard_assigns(assigns) when is_map(assigns) do
Map.take(assigns, @dashboard_layout_keys)
end
@doc """
Returns the list of assign keys used by the dashboard layout.
Useful for debugging or extending the layout with custom assigns.
"""
@spec dashboard_layout_keys() :: [atom()]
def dashboard_layout_keys, do: @dashboard_layout_keys
end