diff --git a/src/actions/cart.tsx b/src/actions/cart.tsx
index 2828d5af..bebe1d3f 100644
--- a/src/actions/cart.tsx
+++ b/src/actions/cart.tsx
@@ -3,45 +3,63 @@ import {
getCookieCart,
updateCookieCartProduct,
removeCookieCartProduct,
- changeCookieCartProductQuanity,
getCartProductKey,
} from "@/lib/utils/cart";
export const GRBPWR_CART = "grbpwr-cart";
-export async function addCartProduct(slug: string, size: string) {
+export async function addCartProduct({
+ slug,
+ size,
+ price,
+}: {
+ slug: string;
+ size: string;
+ price: number;
+}) {
"use server";
const cartData = getCookieCart();
try {
if (!cartData) {
- createCookieCartProduct(slug, size);
+ createCookieCartProduct({ productSlug: slug, size, price });
return;
}
const productKey = getCartProductKey(slug, size);
const cartProduct = cartData.products[productKey];
- let newProductQuanity;
+ const newProduct = {
+ quanity: 0,
+ price: 0,
+ };
if (cartProduct) {
- newProductQuanity = cartProduct.quanity + 1;
+ newProduct.quanity = cartProduct.quanity + 1;
+ newProduct.price = cartProduct.price + price;
} else {
- newProductQuanity = 1;
+ newProduct.quanity = 1;
+ newProduct.price = price;
}
- updateCookieCartProduct(slug, size, newProductQuanity);
+ updateCookieCartProduct({ productSlug: slug, size, data: newProduct });
} catch (error) {
console.log("failed to parse cart", error);
}
}
-export async function removeCartProduct(slug: string, size: string) {
+export async function removeCartProduct({
+ productSlug,
+ size,
+}: {
+ productSlug: string;
+ size: string;
+}) {
"use server";
try {
- removeCookieCartProduct(slug, size);
+ removeCookieCartProduct(productSlug, size);
} catch (error) {
console.log("failed to parse cart", error);
}
@@ -51,25 +69,48 @@ export async function changeCartProductQuanity({
slug,
size,
operation,
+ price,
}: {
slug: string;
+ price: number;
size: string;
operation: "increase" | "decrease";
}) {
"use server";
+ const cartData = getCookieCart();
try {
- const cartData = getCookieCart();
- if (
- operation === "decrease" &&
- cartData?.products[getCartProductKey(slug, size)]?.quanity === 1
- ) {
+ if (!cartData) return;
+
+ const productKey = getCartProductKey(slug, size);
+ const cartProduct = cartData.products[productKey];
+
+ if (operation === "decrease" && cartProduct.quanity === 1) {
removeCookieCartProduct(slug, size);
return;
}
- changeCookieCartProductQuanity(slug, size, operation);
+ const newProduct = {
+ quanity: cartProduct.quanity,
+ price: cartProduct.price,
+ };
+
+ if (operation === "decrease") {
+ newProduct.quanity = cartProduct.quanity - 1;
+ newProduct.price = cartProduct.price - price;
+ }
+
+ if (operation === "increase") {
+ newProduct.quanity = cartProduct.quanity + 1;
+ newProduct.price = cartProduct.price + price;
+ }
+
+ updateCookieCartProduct({
+ productSlug: slug,
+ size,
+ data: newProduct,
+ });
} catch (error) {
console.log("failed to parse cart", error);
}
diff --git a/src/app/cart/page.tsx b/src/app/cart/page.tsx
index b9c10dba..1f9c4cb0 100644
--- a/src/app/cart/page.tsx
+++ b/src/app/cart/page.tsx
@@ -5,10 +5,11 @@ import { CartProductsSkeleton } from "@/components/ui/Skeleton";
import Button from "@/components/ui/Button";
import { ButtonStyle } from "@/components/ui/Button/styles";
import Link from "next/link";
+import TotalPrice from "@/components/cart/TotalPrice";
export const dynamic = "force-dynamic";
-export default async function Page() {
+export default async function CartPage() {
return (
@@ -24,8 +25,9 @@ export default async function Page() {
-
total:
-
170$
+ {/*
total:
+
170$
*/}
+
measurements
-
+ {baseCurrencyPrice &&
+ product?.product?.slug &&
+ product?.sizes?.length && (
+
+ )}
diff --git a/src/components/cart/CartItemRow.tsx b/src/components/cart/CartItemRow.tsx
index 2c574973..b61342a7 100644
--- a/src/components/cart/CartItemRow.tsx
+++ b/src/components/cart/CartItemRow.tsx
@@ -15,6 +15,7 @@ export default function CartItemRow({
if (!product) return null;
const { product: p } = product;
+ const basicCurrencyValue = p?.productDisplay?.productBody?.price?.value;
return (
@@ -34,12 +35,15 @@ export default function CartItemRow({
-
+ {p?.slug && basicCurrencyValue && (
+
+ )}
quanity: {quanity}
diff --git a/src/components/cart/CartPopup.tsx b/src/components/cart/CartPopup.tsx
index 265c6141..38cc951f 100644
--- a/src/components/cart/CartPopup.tsx
+++ b/src/components/cart/CartPopup.tsx
@@ -1,13 +1,19 @@
"use client";
-import Button from "@/components/ui/Button";
import { useState } from "react";
-import { ButtonStyle } from "../ui/Button/styles";
import Link from "next/link";
-import { cn } from "@/lib/utils";
import { useClickAway } from "@uidotdev/usehooks";
+import Button from "@/components/ui/Button";
+import { cn } from "@/lib/utils";
+import { ButtonStyle } from "../ui/Button/styles";
-export default function CartPopup({ children }: { children: React.ReactNode }) {
+export default function CartPopup({
+ children,
+ itemsQuanity,
+}: {
+ children: React.ReactNode;
+ itemsQuanity?: number;
+}) {
const [open, setOpenStatus] = useState(false);
const ref = useClickAway
(() => {
@@ -21,7 +27,7 @@ export default function CartPopup({ children }: { children: React.ReactNode }) {
onClick={() => setOpenStatus(!open)}
style={ButtonStyle.underlinedButton}
>
- cart
+ cart {itemsQuanity ? `(${itemsQuanity})` : ""}
added to cart {"[06]"}
-
-
- total:
- 170$
-
+ {children}