From ee0b5893ac039ab05fe8247647364a923d707da3 Mon Sep 17 00:00:00 2001
From: Rafi Zadanly <zadanlyr@gmail.com>
Date: Fri, 5 Jan 2024 09:30:08 +0700
Subject: Fixing UI cart page

---
 src-migrate/pages/shop/cart.tsx | 91 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 91 insertions(+)
 create mode 100644 src-migrate/pages/shop/cart.tsx

(limited to 'src-migrate/pages/shop/cart.tsx')

diff --git a/src-migrate/pages/shop/cart.tsx b/src-migrate/pages/shop/cart.tsx
new file mode 100644
index 00000000..5016c9b5
--- /dev/null
+++ b/src-migrate/pages/shop/cart.tsx
@@ -0,0 +1,91 @@
+import style from './cart.module.css'
+
+import React, { useEffect, useMemo } from 'react'
+import Link from 'next/link'
+import { Button, Tooltip } from '@chakra-ui/react'
+
+import { getAuth } from '~/common/libs/auth'
+import { useCartStore } from '~/modules/cart/stores/useCartStore'
+
+import CartItem from '~/modules/cart/components/Item'
+import CartSummary from '~/modules/cart/components/Summary'
+
+const CartPage = () => {
+  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['title']}>
+        Keranjang Belanja
+      </div>
+
+      <div className='h-6' />
+
+      <div className={style['content']}>
+        <div className={style['item-wrapper']}>
+          <div className={style['item-skeleton']}>
+            {!cart && <CartItem.Skeleton count={5} height='120px' />}
+          </div>
+
+          <div className={style['items']}>
+            {cart?.products.map((item) => <CartItem key={item.id} item={item} />)}
+          </div>
+        </div>
+
+        <div className={style['summary-wrapper']}>
+          <div className={style['summary']}>
+            <CartSummary {...summary} isLoaded={!!cart} />
+
+            <div className={style['summary-buttons']}>
+              <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}
+                  as={Link}
+                  href='/shop/checkout'
+                >
+                  Checkout
+                </Button>
+              </Tooltip>
+            </div>
+          </div>
+        </div>
+      </div>
+    </>
+  )
+}
+
+export default CartPage
\ No newline at end of file
-- 
cgit v1.2.3

