From c9366090153e8aba3a673b2b77cbc8acc24e59a5 Mon Sep 17 00:00:00 2001
From: Rafi Zadanly <zadanlyr@gmail.com>
Date: Fri, 15 Dec 2023 17:15:32 +0700
Subject: Update promotion program feature

---
 src-migrate/modules/cart/components/CartDetail.tsx | 76 ++++++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 src-migrate/modules/cart/components/CartDetail.tsx

(limited to 'src-migrate/modules/cart/components/CartDetail.tsx')

diff --git a/src-migrate/modules/cart/components/CartDetail.tsx b/src-migrate/modules/cart/components/CartDetail.tsx
new file mode 100644
index 00000000..734c61d3
--- /dev/null
+++ b/src-migrate/modules/cart/components/CartDetail.tsx
@@ -0,0 +1,76 @@
+import React, { useEffect, useMemo } from 'react'
+import { getAuth } from '~/common/libs/auth'
+import { useCartStore } from '../stores/useCartStore'
+import CartItem from '../ui/CartItem'
+import style from '../styles/CartDetail.module.css'
+import CartSummary from '../ui/CartSummary'
+import { Button, Tooltip } from '@chakra-ui/react'
+
+const CartDetail = () => {
+  const auth = getAuth()
+
+  const { loadCart, cart, summary } = useCartStore()
+
+  useEffect(() => {
+    if (typeof auth === 'object' && !cart) loadCart(auth.id)
+  }, [auth, loadCart, cart])
+
+  const hasSelectedPromo = useMemo(() => {
+    if (!cart) return false
+    for (const item of cart.products) {
+      if (item.cart_type === 'promotion' && item.selected) return true
+    }
+    return false
+  }, [cart])
+
+  const hasSelected = useMemo(() => {
+    if (!cart) return false
+    for (const item of cart.products) {
+      if (item.selected) return true
+    }
+    return false
+  }, [cart])
+
+  return (
+    <div className={style.wrapper}>
+      <div className='w-full md:w-3/4'>
+        {/* <div className='border border-gray-300 rounded-lg p-4 md:p-6'> */}
+        <div className=''>
+          <div className='text-h-lg font-semibold mb-6'>Keranjang Belanja</div>
+          <div className='grid grid-cols-1 gap-y-4'>
+            {!cart && <CartItem.Skeleton count={5} height='120px' />}
+          </div>
+          <div className='flex flex-col gap-y-8 border-t border-gray-300 pt-8'>
+            {cart?.products.map((item) => <CartItem key={item.id} item={item} />)}
+          </div>
+        </div>
+      </div>
+
+      <div className='w-full md:w-1/4 pl-6'>
+        <div className='border border-gray-300 p-4 rounded-md sticky top-[180px]'>
+          <CartSummary {...summary} isLoaded={!!cart} />
+          <div className='grid grid-cols-2 gap-x-3 mt-6'>
+            <Tooltip label={hasSelectedPromo ? 'Barang promo tidak dapat dibuat quotation' : ''}>
+              <Button
+                colorScheme='yellow'
+                w='full'
+                isDisabled={hasSelectedPromo || !hasSelected}>
+                Quotation
+              </Button>
+            </Tooltip>
+            <Tooltip label={hasSelected ? '' : 'Tidak ada item yang dipilih'}>
+              <Button
+                colorScheme='red'
+                w='full'
+                isDisabled={!hasSelected}>
+                Checkout
+              </Button>
+            </Tooltip>
+          </div>
+        </div>
+      </div>
+    </div>
+  )
+}
+
+export default CartDetail
\ No newline at end of file
-- 
cgit v1.2.3

