summaryrefslogtreecommitdiff
path: root/src-migrate
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2024-01-16 16:13:50 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2024-01-16 16:13:50 +0700
commit2b98d87dbb2e932f09d1818c98b18afa93e595e0 (patch)
tree352bfbd73eb67602a7106cb7287f7a7af197bef8 /src-migrate
parenta70fd5b6d9c7a769ac1aaa22a7d037ba3be27a05 (diff)
parent065396828266e2de42cb0182c81ea2d7a5b00e2b (diff)
Merge branch 'release' into Feature/perf/product-detail
# Conflicts: # src-migrate/modules/cart/components/Detail.tsx
Diffstat (limited to 'src-migrate')
-rw-r--r--src-migrate/modules/cart/components/Detail.tsx85
1 files changed, 85 insertions, 0 deletions
diff --git a/src-migrate/modules/cart/components/Detail.tsx b/src-migrate/modules/cart/components/Detail.tsx
new file mode 100644
index 00000000..b1532729
--- /dev/null
+++ b/src-migrate/modules/cart/components/Detail.tsx
@@ -0,0 +1,85 @@
+import style from '../styles/detail.module.css'
+
+import React, { useEffect, useMemo } from 'react'
+import Link from 'next/link'
+import { Button, Tooltip } from '@chakra-ui/react'
+
+import { getAuth } from '~/libs/auth'
+import { useCartStore } from '../stores/useCartStore'
+
+import CartItem from './Item'
+import CartSummary from './Summary'
+
+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=''>
+ <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 md:pl-6 mt-6 md:mt-0'>
+ <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}
+ as={Link}
+ href='/shop/quotation'
+ >
+ Quotation
+ </Button>
+ </Tooltip>
+ <Tooltip label={hasSelected ? '' : 'Tidak ada item yang dipilih'}>
+ <Button
+ colorScheme='red'
+ w='full'
+ isDisabled={!hasSelected}
+ as={Link}
+ href='/shop/checkout'
+ >
+ Checkout
+ </Button>
+ </Tooltip>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+}
+
+export default CartDetail \ No newline at end of file