refactor: extract common preview assigns helper in theme editor
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
8be1f90f2d
commit
2825537136
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user