add quantity controls to cart drawer via shared CartHook

Move increment/decrement handlers from Cart LiveView into CartHook so
they work from any page's drawer. Enable show_quantity_controls on the
drawer's cart_item_row. Scope cart tests to #main-content to avoid
duplicate button matches.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jamey
2026-02-11 00:15:04 +00:00
parent 3c73b98d2b
commit b3d1019cd4
5 changed files with 32 additions and 33 deletions

View File

@@ -8,33 +8,6 @@ defmodule SimpleshopThemeWeb.ShopLive.Cart do
{:ok, assign(socket, :page_title, "Cart")}
end
@impl true
def handle_event("increment", %{"id" => variant_id}, socket) do
cart = Cart.add_item(socket.assigns.raw_cart, variant_id, 1)
new_qty = Cart.get_quantity(cart, variant_id)
socket =
socket
|> SimpleshopThemeWeb.CartHook.broadcast_and_update(cart)
|> assign(:cart_status, "Quantity updated to #{new_qty}")
{:noreply, socket}
end
@impl true
def handle_event("decrement", %{"id" => variant_id}, socket) do
current = Cart.get_quantity(socket.assigns.raw_cart, variant_id)
cart = Cart.update_quantity(socket.assigns.raw_cart, variant_id, current - 1)
new_qty = Cart.get_quantity(cart, variant_id)
socket =
socket
|> SimpleshopThemeWeb.CartHook.broadcast_and_update(cart)
|> assign(:cart_status, "Quantity updated to #{new_qty}")
{:noreply, socket}
end
@impl true
def render(assigns) do
assigns = assign(assigns, :cart_page_subtotal, Cart.calculate_subtotal(assigns.cart_items))