Fresh installs now redirect to /users/register instead of showing the demo shop. Post-login redirect goes to /admin dashboard (with setup checklist) instead of /admin/settings. Added 16 provider tests covering index (list, delete, sync) and form (new, edit, test connection). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
62 lines
1.6 KiB
Elixir
62 lines
1.6 KiB
Elixir
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.
|
|
|
|
## 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 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
|
|
|
|
def on_mount(:require_site_live, _params, session, socket) do
|
|
cond do
|
|
Settings.site_live?() ->
|
|
{:cont, socket}
|
|
|
|
session["user_token"] ->
|
|
{:cont, socket}
|
|
|
|
not SimpleshopTheme.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
|