From 5c66bf0e42f5b414d701abe93fb634321f94aff8 Mon Sep 17 00:00:00 2001
From: Rafi Zadanly <zadanlyr@gmail.com>
Date: Wed, 12 Apr 2023 09:30:45 +0700
Subject: cart icon count

---
 .../components/elements/Navbar/NavbarDesktop.jsx   | 33 ++++++++++++++++++----
 1 file changed, 28 insertions(+), 5 deletions(-)

(limited to 'src/core/components/elements/Navbar/NavbarDesktop.jsx')

diff --git a/src/core/components/elements/Navbar/NavbarDesktop.jsx b/src/core/components/elements/Navbar/NavbarDesktop.jsx
index fcb54802..837d436c 100644
--- a/src/core/components/elements/Navbar/NavbarDesktop.jsx
+++ b/src/core/components/elements/Navbar/NavbarDesktop.jsx
@@ -10,9 +10,10 @@ import DesktopView from '../../views/DesktopView'
 import dynamic from 'next/dynamic'
 import IndoteknikLogo from '@/images/logo.png'
 import Category from '@/lib/category/components/Category'
-import { useState } from 'react'
+import { useEffect, useState } from 'react'
 import useAuth from '@/core/hooks/useAuth'
 import NavbarUserDropdown from './NavbarUserDropdown'
+import { getCart } from '@/core/utils/cart'
 
 const Search = dynamic(() => import('./Search'))
 
@@ -20,6 +21,21 @@ const NavbarDesktop = () => {
   const [isOpenCategory, setIsOpenCategory] = useState(false)
   const auth = useAuth()
 
+  const [cartCount, setCartCount] = useState(0)
+
+  useEffect(() => {
+    const handleCartChange = () => {
+      setCartCount(Object.keys(getCart()).length)
+    }
+    handleCartChange()
+
+    window.addEventListener('localStorageChange', handleCartChange)
+
+    return () => {
+      window.removeEventListener('localStorageChange', handleCartChange)
+    }
+  }, [])
+
   return (
     <DesktopView>
       <div className='py-3 bg-warning-400' id='desktop-nav-top'>
@@ -57,10 +73,17 @@ const NavbarDesktop = () => {
               Quotation
             </Link>
             <Link href='/shop/cart' className='flex items-center gap-x-2 !text-gray_r-12/80'>
-              <ShoppingCartIcon className='w-7' />
-              Keranjang
-              <br />
-              Belanja
+              <div className='relative mr-2'>
+                <ShoppingCartIcon className='w-7' />
+                <span className='absolute -top-2 -right-2 badge-solid-red rounded-full w-5 h-5 flex items-center justify-center'>
+                  {cartCount}
+                </span>
+              </div>
+              <span>
+                Keranjang
+                <br />
+                Belanja
+              </span>
             </Link>
             <Link href='/my/wishlist' className='flex items-center gap-x-2 !text-gray_r-12/80'>
               <HeartIcon className='w-7' />
-- 
cgit v1.2.3

