site_name and site_description are shop identity, not theme concerns. They now live in the Settings table as first-class settings with their own assigns (@site_name, @site_description) piped through hooks and plugs. The setup wizard writes site_name on account creation, and the theme editor reads/writes via Settings.put_setting. Removed the "configure your shop" checklist item since currency/country aren't built yet. Also adds shop name field to setup wizard step 1. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
56 lines
1.9 KiB
Elixir
56 lines
1.9 KiB
Elixir
defmodule BerrypodWeb.AdminLayoutHook do
|
|
@moduledoc """
|
|
LiveView on_mount hook that assigns the current path for admin sidebar navigation
|
|
and loads theme settings for the admin layout.
|
|
"""
|
|
import Phoenix.Component
|
|
|
|
alias Berrypod.{ActivityLog, Settings}
|
|
alias Berrypod.Theme.{CSSCache, CSSGenerator}
|
|
|
|
def on_mount(:assign_current_path, _params, _session, socket) do
|
|
theme_settings = Settings.get_theme_settings()
|
|
|
|
generated_css =
|
|
case CSSCache.get() do
|
|
{:ok, css} ->
|
|
css
|
|
|
|
:miss ->
|
|
css = CSSGenerator.generate(theme_settings, &BerrypodWeb.Endpoint.static_path/1)
|
|
CSSCache.put(css)
|
|
css
|
|
end
|
|
|
|
if Phoenix.LiveView.connected?(socket), do: ActivityLog.subscribe()
|
|
|
|
socket =
|
|
socket
|
|
|> assign(:current_path, "")
|
|
|> assign(:site_live, Settings.site_live?())
|
|
|> assign(:email_configured, Berrypod.Mailer.email_configured?())
|
|
|> assign(:theme_settings, theme_settings)
|
|
|> assign(:site_name, Settings.site_name())
|
|
|> assign(:site_description, Settings.site_description())
|
|
|> assign(:generated_css, generated_css)
|
|
|> assign(:attention_count, ActivityLog.count_needing_attention())
|
|
|> Phoenix.LiveView.attach_hook(:set_current_path, :handle_params, fn _params,
|
|
uri,
|
|
socket ->
|
|
{:cont,
|
|
socket
|
|
|> assign(:current_path, URI.parse(uri).path)
|
|
|> assign(:site_live, Settings.site_live?())}
|
|
end)
|
|
|> Phoenix.LiveView.attach_hook(:update_attention_count, :handle_info, fn
|
|
{:new_activity, _entry}, socket ->
|
|
{:cont, assign(socket, :attention_count, ActivityLog.count_needing_attention())}
|
|
|
|
_other, socket ->
|
|
{:cont, socket}
|
|
end)
|
|
|
|
{:cont, socket}
|
|
end
|
|
end
|