From 828add1aa0416b2661336e487cbd45893967f462 Mon Sep 17 00:00:00 2001 From: Wijayaac Date: Wed, 27 Mar 2024 07:39:34 +0700 Subject: [PATCH] Add : minimum spent logic for tier discount --- components/cart/modal.tsx | 52 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/components/cart/modal.tsx b/components/cart/modal.tsx index aee2f7a47..f569afc79 100644 --- a/components/cart/modal.tsx +++ b/components/cart/modal.tsx @@ -18,6 +18,54 @@ type MerchandiseSearchParams = { [key: string]: string; }; +function TierDiscount({ subTotal }: { subTotal: number }) { + const discountGroups = [ + { + name: 'Tier 1', + discount: { + amount: 0.05, + minimumSpent: 10 + } + }, + { + name: 'Tier 2', + discount: { + amount: 0.1, + minimumSpent: 20 + } + } + ]; + const highestMinimumSpent = discountGroups.reduce((acc, group) => { + if (group.discount.minimumSpent > acc) { + return group.discount.minimumSpent; + } else { + return acc; + } + }, 0); + const eligibleDiscountGroups = discountGroups.filter( + (group) => subTotal >= group.discount.minimumSpent + ); + const finalDiscount = eligibleDiscountGroups.reduce((prev, current) => { + // Compare and return the highest discount group based on your criteria + return prev.discount.minimumSpent > current.discount.minimumSpent ? prev : current; + }); + + const discountAmount = finalDiscount.discount.amount * 100; + + return ( +
+

Spent more

+
+
+
+

{discountAmount}% off

+
+ ); +} + export default function CartModal({ cart }: { cart: Cart | undefined }) { const [isOpen, setIsOpen] = useState(false); const quantityRef = useRef(cart?.totalQuantity); @@ -64,7 +112,7 @@ export default function CartModal({ cart }: { cart: Cart | undefined }) { leaveFrom="translate-x-0" leaveTo="translate-x-full" > - +

My Cart

@@ -72,7 +120,6 @@ export default function CartModal({ cart }: { cart: Cart | undefined }) {
- {!cart || cart.lines.length === 0 ? (
@@ -80,6 +127,7 @@ export default function CartModal({ cart }: { cart: Cart | undefined }) {
) : (
+
    {cart.lines.map((item, i) => { const merchandiseSearchParams = {} as MerchandiseSearchParams;