wire order pages and theme preview to page renderer, remove old templates
Some checks failed
deploy / deploy (push) Has been cancelled

All 14 pages now render through PageRenderer. Theme editor preview
unified from 10 preview_page clauses to one function + page-context
helpers. PageTemplates module and 10 .heex template files deleted.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jamey
2026-02-26 19:32:50 +00:00
parent 16ebc29fa9
commit 24ad3b8b60
18 changed files with 79 additions and 743 deletions

View File

@@ -1,7 +1,7 @@
defmodule BerrypodWeb.Admin.Theme.Index do
use BerrypodWeb, :live_view
alias Berrypod.Settings
alias Berrypod.{Pages, Settings}
alias Berrypod.Media
alias Berrypod.Theme.{CSSGenerator, Presets, PreviewData}
alias Berrypod.Workers.FaviconGeneratorWorker
@@ -403,7 +403,7 @@ defmodule BerrypodWeb.Admin.Theme.Index do
})
end
# Preview page component — delegates to shared PageTemplates with preview-specific assigns
# Unified preview — loads page definition, applies context, renders via PageRenderer
attr :page, :atom, required: true
attr :preview_data, :map, required: true
attr :theme_settings, :map, required: true
@@ -411,17 +411,24 @@ defmodule BerrypodWeb.Admin.Theme.Index do
attr :header_image, :any, required: true
attr :cart_drawer_open, :boolean, default: false
defp preview_page(%{page: :home} = assigns) do
assigns = preview_assigns(assigns)
~H"<BerrypodWeb.PageTemplates.home {assigns} />"
defp preview_page(assigns) do
slug = to_string(assigns.page)
page = Pages.get_page(slug)
assigns =
assigns
|> preview_assigns()
|> assign(:page, page)
|> preview_page_context(slug)
extra = Pages.load_block_data(page.blocks, assigns)
assigns = assign(assigns, extra)
~H"<BerrypodWeb.PageRenderer.render_page {assigns} />"
end
defp preview_page(%{page: :collection} = assigns) do
assigns = preview_assigns(assigns)
~H"<BerrypodWeb.PageTemplates.collection {assigns} />"
end
defp preview_page(%{page: :pdp} = assigns) do
# Page-context data needed by specific page types in preview mode
defp preview_page_context(assigns, "pdp") do
product = List.first(assigns.preview_data.products)
option_types = Map.get(product, :option_types) || []
variants = Map.get(product, :variants) || []
@@ -441,23 +448,18 @@ defmodule BerrypodWeb.Admin.Theme.Index do
display_price =
if selected_variant, do: selected_variant.price, else: product.cheapest_price
assigns =
assigns
|> preview_assigns()
|> assign(:product, product)
|> assign(:gallery_images, build_gallery_images(product))
|> assign(:related_products, Enum.slice(assigns.preview_data.products, 1, 4))
|> assign(:option_types, option_types)
|> assign(:selected_options, selected_options)
|> assign(:available_options, available_options)
|> assign(:display_price, display_price)
|> assign(:quantity, 1)
|> assign(:option_urls, %{})
~H"<BerrypodWeb.PageTemplates.pdp {assigns} />"
assigns
|> assign(:product, product)
|> assign(:gallery_images, build_gallery_images(product))
|> assign(:option_types, option_types)
|> assign(:selected_options, selected_options)
|> assign(:available_options, available_options)
|> assign(:display_price, display_price)
|> assign(:quantity, 1)
|> assign(:option_urls, %{})
end
defp preview_page(%{page: :cart} = assigns) do
defp preview_page_context(assigns, "cart") do
cart_items = assigns.preview_data.cart_items
subtotal =
@@ -465,92 +467,37 @@ defmodule BerrypodWeb.Admin.Theme.Index do
acc + item.product.cheapest_price * item.quantity
end)
assigns =
assigns
|> preview_assigns()
|> assign(:cart_page_items, cart_items)
|> assign(:cart_page_subtotal, subtotal)
~H"<BerrypodWeb.PageTemplates.cart {assigns} />"
assigns
|> assign(:cart_page_items, cart_items)
|> assign(:cart_page_subtotal, subtotal)
end
defp preview_page(%{page: :about} = assigns) do
assigns =
assigns
|> preview_assigns()
|> assign(%{
active_page: "about",
hero_title: "About the studio",
hero_description: "Your story goes here this is sample content for the demo shop",
hero_background: :sunken,
image_src: "/mockups/night-sky-blanket-3",
image_alt: "Night sky blanket draped over a chair",
content_blocks: PreviewData.about_content()
})
~H"<BerrypodWeb.PageTemplates.content {assigns} />"
defp preview_page_context(assigns, "about") do
assign(assigns, :content_blocks, PreviewData.about_content())
end
defp preview_page(%{page: :delivery} = assigns) do
assigns =
assigns
|> preview_assigns()
|> assign(%{
active_page: "delivery",
hero_title: "Delivery & returns",
hero_description: "Everything you need to know about shipping and returns",
content_blocks: PreviewData.delivery_content()
})
~H"<BerrypodWeb.PageTemplates.content {assigns} />"
defp preview_page_context(assigns, "delivery") do
assign(assigns, :content_blocks, PreviewData.delivery_content())
end
defp preview_page(%{page: :privacy} = assigns) do
assigns =
assigns
|> preview_assigns()
|> assign(%{
active_page: "privacy",
hero_title: "Privacy policy",
hero_description: "How we handle your personal information",
content_blocks: PreviewData.privacy_content()
})
~H"<BerrypodWeb.PageTemplates.content {assigns} />"
defp preview_page_context(assigns, "privacy") do
assign(assigns, :content_blocks, PreviewData.privacy_content())
end
defp preview_page(%{page: :terms} = assigns) do
assigns =
assigns
|> preview_assigns()
|> assign(%{
active_page: "terms",
hero_title: "Terms of service",
hero_description: "The legal bits",
content_blocks: PreviewData.terms_content()
})
~H"<BerrypodWeb.PageTemplates.content {assigns} />"
defp preview_page_context(assigns, "terms") do
assign(assigns, :content_blocks, PreviewData.terms_content())
end
defp preview_page(%{page: :contact} = assigns) do
assigns = preview_assigns(assigns)
~H"<BerrypodWeb.PageTemplates.contact {assigns} />"
defp preview_page_context(assigns, "error") do
assign(assigns, %{
error_code: "404",
error_title: "Page Not Found",
error_description:
"Sorry, we couldn't find the page you're looking for. Perhaps you've mistyped the URL or the page has been moved."
})
end
defp preview_page(%{page: :error} = assigns) do
assigns =
assigns
|> preview_assigns()
|> assign(%{
error_code: "404",
error_title: "Page Not Found",
error_description:
"Sorry, we couldn't find the page you're looking for. Perhaps you've mistyped the URL or the page has been moved."
})
~H"<BerrypodWeb.PageTemplates.error {assigns} />"
end
defp preview_page_context(assigns, _slug), do: assigns
defp build_gallery_images(product) do
alias Berrypod.Products.ProductImage

View File

@@ -1,7 +1,7 @@
defmodule BerrypodWeb.Shop.CheckoutSuccess do
use BerrypodWeb, :live_view
alias Berrypod.{Analytics, Orders}
alias Berrypod.{Analytics, Orders, Pages}
@impl true
def mount(%{"session_id" => session_id}, _session, socket) do
@@ -29,10 +29,13 @@ defmodule BerrypodWeb.Shop.CheckoutSuccess do
socket
end
page = Pages.get_page("checkout_success")
socket =
socket
|> assign(:page_title, "Order confirmed")
|> assign(:order, order)
|> assign(:page, page)
{:ok, socket}
end
@@ -49,7 +52,7 @@ defmodule BerrypodWeb.Shop.CheckoutSuccess do
@impl true
def render(assigns) do
~H"""
<BerrypodWeb.PageTemplates.checkout_success {assigns} />
<BerrypodWeb.PageRenderer.render_page {assigns} />
"""
end
end

View File

@@ -1,13 +1,20 @@
defmodule BerrypodWeb.Shop.OrderDetail do
use BerrypodWeb, :live_view
alias Berrypod.Orders
alias Berrypod.{Orders, Pages}
alias Berrypod.Products
alias Berrypod.Products.ProductImage
@impl true
def mount(_params, session, socket) do
{:ok, assign(socket, :lookup_email, session["order_lookup_email"])}
page = Pages.get_page("order_detail")
socket =
socket
|> assign(:lookup_email, session["order_lookup_email"])
|> assign(:page, page)
{:ok, socket}
end
@impl true
@@ -49,7 +56,7 @@ defmodule BerrypodWeb.Shop.OrderDetail do
@impl true
def render(assigns) do
~H"""
<BerrypodWeb.PageTemplates.order_detail {assigns} />
<BerrypodWeb.PageRenderer.render_page {assigns} />
"""
end
end

View File

@@ -1,16 +1,18 @@
defmodule BerrypodWeb.Shop.Orders do
use BerrypodWeb, :live_view
alias Berrypod.Orders
alias Berrypod.{Orders, Pages}
@impl true
def mount(_params, session, socket) do
email = session["order_lookup_email"]
page = Pages.get_page("orders")
socket =
socket
|> assign(:page_title, "Your orders")
|> assign(:lookup_email, email)
|> assign(:page, page)
socket =
if email do
@@ -28,7 +30,7 @@ defmodule BerrypodWeb.Shop.Orders do
@impl true
def render(assigns) do
~H"""
<BerrypodWeb.PageTemplates.orders {assigns} />
<BerrypodWeb.PageRenderer.render_page {assigns} />
"""
end
end