rename project from SimpleshopTheme to Berrypod
All modules, configs, paths, and references updated. 836 tests pass, zero warnings. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
67
lib/berrypod_web/theme_hook.ex
Normal file
67
lib/berrypod_web/theme_hook.ex
Normal file
@@ -0,0 +1,67 @@
|
||||
defmodule BerrypodWeb.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.
|
||||
|
||||
## Actions
|
||||
|
||||
- `:mount_theme` — loads theme settings, CSS, and media assigns
|
||||
- `:require_site_live` — redirects unauthenticated visitors to /coming-soon
|
||||
when the shop is not live
|
||||
"""
|
||||
|
||||
import Phoenix.Component, only: [assign: 3]
|
||||
|
||||
alias Berrypod.{Products, Settings, Media}
|
||||
alias Berrypod.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(:categories, Products.list_categories())
|
||||
|> assign(:mode, :shop)
|
||||
|> assign(
|
||||
:is_admin,
|
||||
!!(socket.assigns[:current_scope] && socket.assigns.current_scope.user)
|
||||
)
|
||||
|
||||
{:cont, socket}
|
||||
end
|
||||
|
||||
def on_mount(:require_site_live, _params, _session, socket) do
|
||||
cond do
|
||||
Settings.site_live?() ->
|
||||
{:cont, socket}
|
||||
|
||||
# mount_current_scope runs first, so current_scope is already validated
|
||||
socket.assigns[:current_scope] && socket.assigns.current_scope.user ->
|
||||
{:cont, socket}
|
||||
|
||||
not Berrypod.Accounts.has_admin?() ->
|
||||
# Fresh install — send to registration
|
||||
{:halt, Phoenix.LiveView.redirect(socket, to: "/users/register")}
|
||||
|
||||
true ->
|
||||
{:halt, Phoenix.LiveView.redirect(socket, to: "/coming-soon")}
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user