@@ -93,12 +93,25 @@ defmodule Beacon.Web.Layouts do
9393
9494 @ doc false
9595 def meta_tags ( assigns ) do
96- page_meta_tags = page_meta_tags ( assigns ) || [ ]
96+ % { beacon: % { private: % { live_data_keys: live_data_keys } } } = assigns
97+ live_data = Map . take ( assigns , live_data_keys )
9798 layout_meta_tags = layout_meta_tags ( assigns ) || [ ]
9899
99- ( page_meta_tags ++ layout_meta_tags )
100- |> Enum . reject ( & ( & 1 [ "name" ] == "csrf-token" ) )
101- |> Kernel . ++ ( Beacon.Content . default_site_meta_tags ( ) )
100+ case live_data do
101+ % { beacon_meta_tags: override_tags } when is_list ( override_tags ) ->
102+ # When beacon_meta_tags is provided by LiveData, it replaces both
103+ # page-level meta tags and site defaults. This is used by dynamic pages
104+ # where page metadata comes from runtime data, not compiled page modules.
105+ ( override_tags ++ layout_meta_tags )
106+ |> Enum . reject ( & ( & 1 [ "name" ] == "csrf-token" ) )
107+
108+ _ ->
109+ page_meta_tags = page_meta_tags ( assigns ) || [ ]
110+
111+ ( page_meta_tags ++ layout_meta_tags )
112+ |> Enum . reject ( & ( & 1 [ "name" ] == "csrf-token" ) )
113+ |> Kernel . ++ ( Beacon.Content . default_site_meta_tags ( ) )
114+ end
102115 end
103116
104117 defp page_meta_tags ( % { page_assigns: % { meta_tags: meta_tags } } = assigns ) do
@@ -112,18 +125,10 @@ defmodule Beacon.Web.Layouts do
112125 end
113126
114127 defp compiled_page_meta_tags ( assigns ) do
115- % { beacon: % { site: site , private: % { page_module: page_module , live_data_keys: live_data_keys } } } = assigns
116- live_data = Map . take ( assigns , live_data_keys )
117-
118- case live_data do
119- % { beacon_meta_tags: meta_tags } when is_list ( meta_tags ) ->
120- meta_tags
121-
122- _ ->
123- % { site: ^ site , id: page_id } = Beacon . apply_mfa ( site , page_module , :page_assigns , [ [ :site , :id ] ] )
124- % { meta_tags: meta_tags } = compiled_page_assigns ( site , page_id )
125- meta_tags
126- end
128+ % { beacon: % { site: site , private: % { page_module: page_module } } } = assigns
129+ % { site: ^ site , id: page_id } = Beacon . apply_mfa ( site , page_module , :page_assigns , [ [ :site , :id ] ] )
130+ % { meta_tags: meta_tags } = compiled_page_assigns ( site , page_id )
131+ meta_tags
127132 end
128133
129134 defp layout_meta_tags ( % { layout_assigns: % { meta_tags: meta_tags } } = assigns ) do
0 commit comments