refactor: extract common preview assigns helper in theme editor

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jamey 2026-02-08 12:12:39 +00:00
parent 8be1f90f2d
commit 2825537136

View File

@ -308,7 +308,16 @@ defmodule SimpleshopThemeWeb.ThemeLive.Index do
def error_to_string(:not_accepted), do: "File type not accepted"
def error_to_string(err), do: inspect(err)
# Preview page component - delegates to shared PageTemplates with preview-specific assigns
defp preview_assigns(assigns) do
assign(assigns, %{
mode: :preview,
cart_items: PreviewData.cart_drawer_items(),
cart_count: 2,
cart_subtotal: "£72.00"
})
end
# Preview page component — delegates to shared PageTemplates with preview-specific assigns
attr :page, :atom, required: true
attr :preview_data, :map, required: true
attr :theme_settings, :map, required: true
@ -317,35 +326,13 @@ defmodule SimpleshopThemeWeb.ThemeLive.Index do
attr :cart_drawer_open, :boolean, default: false
defp preview_page(%{page: :home} = assigns) do
~H"""
<SimpleshopThemeWeb.PageTemplates.home
theme_settings={@theme_settings}
logo_image={@logo_image}
header_image={@header_image}
preview_data={@preview_data}
mode={:preview}
cart_items={PreviewData.cart_drawer_items()}
cart_count={2}
cart_subtotal="£72.00"
cart_drawer_open={@cart_drawer_open}
/>
"""
assigns = preview_assigns(assigns)
~H"<SimpleshopThemeWeb.PageTemplates.home {assigns} />"
end
defp preview_page(%{page: :collection} = assigns) do
~H"""
<SimpleshopThemeWeb.PageTemplates.collection
theme_settings={@theme_settings}
logo_image={@logo_image}
header_image={@header_image}
preview_data={@preview_data}
mode={:preview}
cart_items={PreviewData.cart_drawer_items()}
cart_count={2}
cart_subtotal="£72.00"
cart_drawer_open={@cart_drawer_open}
/>
"""
assigns = preview_assigns(assigns)
~H"<SimpleshopThemeWeb.PageTemplates.collection {assigns} />"
end
defp preview_page(%{page: :pdp} = assigns) do
@ -353,14 +340,12 @@ defmodule SimpleshopThemeWeb.ThemeLive.Index do
option_types = product[:option_types] || []
variants = product[:variants] || []
# Select first variant by default for preview
{selected_options, selected_variant} =
case variants do
[first | _] -> {first.options, first}
[] -> {%{}, nil}
end
# All options available in preview mode (show all values)
available_options =
Enum.reduce(option_types, %{}, fn opt, acc ->
values = Enum.map(opt.values, & &1.title)
@ -372,6 +357,7 @@ defmodule SimpleshopThemeWeb.ThemeLive.Index do
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))
@ -379,27 +365,9 @@ defmodule SimpleshopThemeWeb.ThemeLive.Index do
|> assign(:selected_options, selected_options)
|> assign(:available_options, available_options)
|> assign(:display_price, display_price)
|> assign(:quantity, 1)
~H"""
<SimpleshopThemeWeb.PageTemplates.pdp
theme_settings={@theme_settings}
logo_image={@logo_image}
header_image={@header_image}
product={@product}
gallery_images={@gallery_images}
related_products={@related_products}
quantity={1}
mode={:preview}
cart_items={PreviewData.cart_drawer_items()}
cart_count={2}
cart_subtotal="£72.00"
cart_drawer_open={@cart_drawer_open}
option_types={@option_types}
selected_options={@selected_options}
available_options={@available_options}
display_price={@display_price}
/>
"""
~H"<SimpleshopThemeWeb.PageTemplates.pdp {assigns} />"
end
defp preview_page(%{page: :cart} = assigns) do
@ -410,136 +378,89 @@ defmodule SimpleshopThemeWeb.ThemeLive.Index do
assigns =
assigns
|> preview_assigns()
|> assign(:cart_page_items, cart_items)
|> assign(:cart_page_subtotal, subtotal)
~H"""
<SimpleshopThemeWeb.PageTemplates.cart
theme_settings={@theme_settings}
logo_image={@logo_image}
header_image={@header_image}
cart_page_items={@cart_page_items}
cart_page_subtotal={@cart_page_subtotal}
mode={:preview}
cart_items={PreviewData.cart_drawer_items()}
cart_count={2}
cart_subtotal="£72.00"
cart_drawer_open={@cart_drawer_open}
/>
"""
~H"<SimpleshopThemeWeb.PageTemplates.cart {assigns} />"
end
defp preview_page(%{page: :about} = assigns) do
~H"""
<SimpleshopThemeWeb.PageTemplates.content
theme_settings={@theme_settings}
logo_image={@logo_image}
header_image={@header_image}
mode={:preview}
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()}
cart_items={PreviewData.cart_drawer_items()}
cart_count={2}
cart_subtotal="£72.00"
cart_drawer_open={@cart_drawer_open}
/>
"""
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"<SimpleshopThemeWeb.PageTemplates.content {assigns} />"
end
defp preview_page(%{page: :delivery} = assigns) do
~H"""
<SimpleshopThemeWeb.PageTemplates.content
theme_settings={@theme_settings}
logo_image={@logo_image}
header_image={@header_image}
mode={:preview}
active_page="delivery"
hero_title="Delivery & returns"
hero_description="Everything you need to know about shipping and returns"
content_blocks={PreviewData.delivery_content()}
cart_items={PreviewData.cart_drawer_items()}
cart_count={2}
cart_subtotal="£72.00"
cart_drawer_open={@cart_drawer_open}
/>
"""
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"<SimpleshopThemeWeb.PageTemplates.content {assigns} />"
end
defp preview_page(%{page: :privacy} = assigns) do
~H"""
<SimpleshopThemeWeb.PageTemplates.content
theme_settings={@theme_settings}
logo_image={@logo_image}
header_image={@header_image}
mode={:preview}
active_page="privacy"
hero_title="Privacy policy"
hero_description="How we handle your personal information"
content_blocks={PreviewData.privacy_content()}
cart_items={PreviewData.cart_drawer_items()}
cart_count={2}
cart_subtotal="£72.00"
cart_drawer_open={@cart_drawer_open}
/>
"""
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"<SimpleshopThemeWeb.PageTemplates.content {assigns} />"
end
defp preview_page(%{page: :terms} = assigns) do
~H"""
<SimpleshopThemeWeb.PageTemplates.content
theme_settings={@theme_settings}
logo_image={@logo_image}
header_image={@header_image}
mode={:preview}
active_page="terms"
hero_title="Terms of service"
hero_description="The legal bits"
content_blocks={PreviewData.terms_content()}
cart_items={PreviewData.cart_drawer_items()}
cart_count={2}
cart_subtotal="£72.00"
cart_drawer_open={@cart_drawer_open}
/>
"""
assigns =
assigns
|> preview_assigns()
|> assign(%{
active_page: "terms",
hero_title: "Terms of service",
hero_description: "The legal bits",
content_blocks: PreviewData.terms_content()
})
~H"<SimpleshopThemeWeb.PageTemplates.content {assigns} />"
end
defp preview_page(%{page: :contact} = assigns) do
~H"""
<SimpleshopThemeWeb.PageTemplates.contact
theme_settings={@theme_settings}
logo_image={@logo_image}
header_image={@header_image}
mode={:preview}
cart_items={PreviewData.cart_drawer_items()}
cart_count={2}
cart_subtotal="£72.00"
cart_drawer_open={@cart_drawer_open}
/>
"""
assigns = preview_assigns(assigns)
~H"<SimpleshopThemeWeb.PageTemplates.contact {assigns} />"
end
defp preview_page(%{page: :error} = assigns) do
~H"""
<SimpleshopThemeWeb.PageTemplates.error
theme_settings={@theme_settings}
logo_image={@logo_image}
header_image={@header_image}
preview_data={@preview_data}
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."
mode={:preview}
cart_items={PreviewData.cart_drawer_items()}
cart_count={2}
cart_subtotal="£72.00"
cart_drawer_open={@cart_drawer_open}
/>
"""
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"<SimpleshopThemeWeb.PageTemplates.error {assigns} />"
end
defp build_gallery_images(product) do