diff --git a/lib/simpleshop_theme_web/components/shop_components.ex b/lib/simpleshop_theme_web/components/shop_components.ex index 0266750..ce3e38c 100644 --- a/lib/simpleshop_theme_web/components/shop_components.ex +++ b/lib/simpleshop_theme_web/components/shop_components.ex @@ -382,4 +382,138 @@ defmodule SimpleshopThemeWeb.ShopComponents do "background-position: #{settings.header_position_x}% #{settings.header_position_y}%; " <> "background-repeat: no-repeat; z-index: 0;" end + + @doc """ + Renders the cart drawer (floating sidebar). + + The drawer slides in from the right when opened. It displays cart items + and checkout options. + + ## Attributes + + * `cart_items` - List of cart items to display. Each item should have + `image`, `name`, `variant`, and `price` keys. Default: [] + * `subtotal` - The subtotal to display. Default: nil (shows "£0.00") + * `mode` - Either `:live` (default) for real stores or `:preview` for theme editor. + In preview mode, "View basket" navigates via LiveView JS commands. + + ## Examples + + <.cart_drawer cart_items={@cart.items} subtotal={@cart.subtotal} /> + <.cart_drawer cart_items={demo_items} subtotal="£72.00" mode={:preview} /> + """ + attr :cart_items, :list, default: [] + attr :subtotal, :string, default: nil + attr :mode, :atom, default: :live + + def cart_drawer(assigns) do + assigns = assign_new(assigns, :display_subtotal, fn -> + assigns.subtotal || "£0.00" + end) + + ~H""" + +
+
+

Your basket

+ +
+ +
+ <%= for item <- @cart_items do %> +
+
+
+

+ <%= item.name %> +

+

+ <%= item.variant %> +

+
+

+ <%= item.price %> +

+ +
+
+
+ <% end %> +
+ + +
+ + + + + + """ + end end diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages.ex b/lib/simpleshop_theme_web/live/theme_live/preview_pages.ex index 428d999..700624c 100644 --- a/lib/simpleshop_theme_web/live/theme_live/preview_pages.ex +++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages.ex @@ -3,107 +3,4 @@ defmodule SimpleshopThemeWeb.ThemeLive.PreviewPages do import SimpleshopThemeWeb.ShopComponents embed_templates "preview_pages/*" - - - - @doc """ - Renders the cart drawer (floating sidebar). - """ - attr :cart_items, :list, default: [] - - def cart_drawer(assigns) do - ~H""" - -
-
-

Your basket

- -
- -
- <%= for item <- @cart_items do %> -
-
-
-

- <%= item.name %> -

-

- <%= item.variant %> -

-
-

- <%= item.price %> -

- -
-
-
- <% end %> -
- - -
- - - - - - """ - end end diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/about.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/about.html.heex index 6370abc..15d65e4 100644 --- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/about.html.heex +++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/about.html.heex @@ -70,7 +70,7 @@ - + <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} /> <.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} /> diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/cart.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/cart.html.heex index 5a1d043..492d550 100644 --- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/cart.html.heex +++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/cart.html.heex @@ -123,7 +123,7 @@ - + <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} /> <.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} /> diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/collection.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/collection.html.heex index 1e280f0..80ea4d8 100644 --- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/collection.html.heex +++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/collection.html.heex @@ -134,7 +134,7 @@ - + <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} /> <.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} /> diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/contact.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/contact.html.heex index 5e48412..d9868e2 100644 --- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/contact.html.heex +++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/contact.html.heex @@ -190,7 +190,7 @@ - + <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} /> <.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} /> diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/error.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/error.html.heex index 14125b4..f305931 100644 --- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/error.html.heex +++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/error.html.heex @@ -81,7 +81,7 @@ - + <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} /> <.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} /> diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/home.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/home.html.heex index 5c78f91..e97e9ac 100644 --- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/home.html.heex +++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/home.html.heex @@ -154,7 +154,7 @@ <.shop_footer theme_settings={@theme_settings} mode={:preview} /> - + <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} /> <.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} /> diff --git a/lib/simpleshop_theme_web/live/theme_live/preview_pages/pdp.html.heex b/lib/simpleshop_theme_web/live/theme_live/preview_pages/pdp.html.heex index 6c7672d..062b7f8 100644 --- a/lib/simpleshop_theme_web/live/theme_live/preview_pages/pdp.html.heex +++ b/lib/simpleshop_theme_web/live/theme_live/preview_pages/pdp.html.heex @@ -451,7 +451,7 @@ - + <.cart_drawer cart_items={SimpleshopTheme.Theme.PreviewData.cart_drawer_items()} subtotal="£72.00" mode={:preview} /> <.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />