defmodule SimpleshopThemeWeb.ThemeHook do @moduledoc """ LiveView on_mount hook for theme settings, CSS, and media assigns. Mounted in the public_shop live_session alongside CartHook. Eliminates the identical theme-loading boilerplate from every shop LiveView. """ import Phoenix.Component, only: [assign: 3] alias SimpleshopTheme.{Settings, Media} alias SimpleshopTheme.Theme.{CSSCache, CSSGenerator} def on_mount(:mount_theme, _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) CSSCache.put(css) css end socket = socket |> assign(:theme_settings, theme_settings) |> assign(:generated_css, generated_css) |> assign(:logo_image, Media.get_logo()) |> assign(:header_image, Media.get_header()) |> assign(:mode, :shop) {:cont, socket} end end