Stage 4 of the page builder: all shop pages now render via PageRenderer instead of inline templates or PageTemplates. - Collection: full filter bar moved to renderer (category pills, sort dropdown, CollectionFilters hook, empty state) - PDP: related_products and reviews loaded via block data loaders instead of manual queries - Cart: page definition loaded in mount, subtotal computed in render - Search: page definition loaded in mount, handle_params unchanged - Added Phoenix.VerifiedRoutes to PageRenderer for ~p sigil - Net -55 lines (128 added, 183 removed) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
21 lines
484 B
Elixir
21 lines
484 B
Elixir
defmodule BerrypodWeb.Shop.Cart do
|
|
use BerrypodWeb, :live_view
|
|
|
|
alias Berrypod.{Cart, Pages}
|
|
|
|
@impl true
|
|
def mount(_params, _session, socket) do
|
|
page = Pages.get_page("cart")
|
|
{:ok, socket |> assign(:page_title, "Cart") |> assign(:page, page)}
|
|
end
|
|
|
|
@impl true
|
|
def render(assigns) do
|
|
assigns = assign(assigns, :cart_page_subtotal, Cart.calculate_subtotal(assigns.cart_items))
|
|
|
|
~H"""
|
|
<BerrypodWeb.PageRenderer.render_page {assigns} />
|
|
"""
|
|
end
|
|
end
|