wire order pages and theme preview to page renderer, remove old templates
Some checks failed
deploy / deploy (push) Has been cancelled
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user