From 4ee24671bc23979d7ac18a5390082c0007928540 Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Tue, 16 Jul 2024 15:17:17 +0700
Subject: <iman> add select all cart

---
 src-migrate/modules/cart/components/ItemSelect.tsx | 33 +++++++++++++++-------
 1 file changed, 23 insertions(+), 10 deletions(-)

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

diff --git a/src-migrate/modules/cart/components/ItemSelect.tsx b/src-migrate/modules/cart/components/ItemSelect.tsx
index b904a1de..6b6b8f2b 100644
--- a/src-migrate/modules/cart/components/ItemSelect.tsx
+++ b/src-migrate/modules/cart/components/ItemSelect.tsx
@@ -1,5 +1,5 @@
 import { Checkbox, Spinner } from '@chakra-ui/react'
-import React, { useState } from 'react'
+import React, { useState, useEffect } from 'react'
 
 import { getAuth } from '~/libs/auth'
 import { CartItem } from '~/types/cart'
@@ -9,15 +9,17 @@ import { useCartStore } from '../stores/useCartStore'
 
 type Props = {
   item: CartItem
+  itemSelected?: boolean
 }
 
-const CartItemSelect = ({ item }: Props) => {
+const CartItemSelect = ({ item, itemSelected }: Props) => {
   const auth = getAuth()
   const { loadCart } = useCartStore()
 
   const [isLoad, setIsLoad] = useState<boolean>(false)
+  const [isChecked, setIsChecked] = useState<boolean>(itemSelected ?? true)
 
-  const handleChange = async (e: React.ChangeEvent<HTMLInputElement>) => {
+  const handleChange = async (isChecked: boolean) => {
     if (typeof auth !== 'object') return
 
     setIsLoad(true)
@@ -26,29 +28,40 @@ const CartItemSelect = ({ item }: Props) => {
       type: item.cart_type,
       id: item.id,
       qty: item.quantity,
-      selected: e.target.checked
+      selected: isChecked,
     })
     await loadCart(auth.id)
     setIsLoad(false)
   }
 
+  useEffect(() => {
+    if (typeof itemSelected === 'boolean') {
+      setIsChecked(itemSelected)
+      handleChange(itemSelected)
+    }
+  }, [itemSelected])
+
+  const handleCheckboxChange = (e: React.ChangeEvent<HTMLInputElement>) => {
+    const { checked } = e.target
+    setIsChecked(checked)
+    handleChange(checked)
+  }
+
   return (
     <div className='w-6 my-auto'>
-      {isLoad && (
-        <Spinner className='my-auto' size='sm' />
-      )}
+      {isLoad && <Spinner className='my-auto' size='sm' />}
 
       {!isLoad && (
         <Checkbox
           borderColor='gray.600'
           colorScheme='red'
           size='lg'
-          isChecked={item.selected}
-          onChange={handleChange}
+          isChecked={isChecked}
+          onChange={handleCheckboxChange}
         />
       )}
     </div>
   )
 }
 
-export default CartItemSelect
\ No newline at end of file
+export default CartItemSelect
-- 
cgit v1.2.3


From 8c848cf35811ee95e88ce03745ee25315172d758 Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Thu, 1 Aug 2024 15:29:17 +0700
Subject: <iman> update unchek all cart

---
 src-migrate/modules/cart/components/ItemSelect.tsx | 33 +++++++---------------
 1 file changed, 10 insertions(+), 23 deletions(-)

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

diff --git a/src-migrate/modules/cart/components/ItemSelect.tsx b/src-migrate/modules/cart/components/ItemSelect.tsx
index 6b6b8f2b..b904a1de 100644
--- a/src-migrate/modules/cart/components/ItemSelect.tsx
+++ b/src-migrate/modules/cart/components/ItemSelect.tsx
@@ -1,5 +1,5 @@
 import { Checkbox, Spinner } from '@chakra-ui/react'
-import React, { useState, useEffect } from 'react'
+import React, { useState } from 'react'
 
 import { getAuth } from '~/libs/auth'
 import { CartItem } from '~/types/cart'
@@ -9,17 +9,15 @@ import { useCartStore } from '../stores/useCartStore'
 
 type Props = {
   item: CartItem
-  itemSelected?: boolean
 }
 
-const CartItemSelect = ({ item, itemSelected }: Props) => {
+const CartItemSelect = ({ item }: Props) => {
   const auth = getAuth()
   const { loadCart } = useCartStore()
 
   const [isLoad, setIsLoad] = useState<boolean>(false)
-  const [isChecked, setIsChecked] = useState<boolean>(itemSelected ?? true)
 
-  const handleChange = async (isChecked: boolean) => {
+  const handleChange = async (e: React.ChangeEvent<HTMLInputElement>) => {
     if (typeof auth !== 'object') return
 
     setIsLoad(true)
@@ -28,40 +26,29 @@ const CartItemSelect = ({ item, itemSelected }: Props) => {
       type: item.cart_type,
       id: item.id,
       qty: item.quantity,
-      selected: isChecked,
+      selected: e.target.checked
     })
     await loadCart(auth.id)
     setIsLoad(false)
   }
 
-  useEffect(() => {
-    if (typeof itemSelected === 'boolean') {
-      setIsChecked(itemSelected)
-      handleChange(itemSelected)
-    }
-  }, [itemSelected])
-
-  const handleCheckboxChange = (e: React.ChangeEvent<HTMLInputElement>) => {
-    const { checked } = e.target
-    setIsChecked(checked)
-    handleChange(checked)
-  }
-
   return (
     <div className='w-6 my-auto'>
-      {isLoad && <Spinner className='my-auto' size='sm' />}
+      {isLoad && (
+        <Spinner className='my-auto' size='sm' />
+      )}
 
       {!isLoad && (
         <Checkbox
           borderColor='gray.600'
           colorScheme='red'
           size='lg'
-          isChecked={isChecked}
-          onChange={handleCheckboxChange}
+          isChecked={item.selected}
+          onChange={handleChange}
         />
       )}
     </div>
   )
 }
 
-export default CartItemSelect
+export default CartItemSelect
\ No newline at end of file
-- 
cgit v1.2.3


From 865f509a8b45c6db195661f35417623572d33cea Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Sat, 3 Aug 2024 13:33:59 +0700
Subject: <iman> update unchek cart

---
 src-migrate/modules/cart/components/ItemSelect.tsx | 28 ++++++++++++----------
 1 file changed, 15 insertions(+), 13 deletions(-)

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

diff --git a/src-migrate/modules/cart/components/ItemSelect.tsx b/src-migrate/modules/cart/components/ItemSelect.tsx
index b904a1de..d4a1b537 100644
--- a/src-migrate/modules/cart/components/ItemSelect.tsx
+++ b/src-migrate/modules/cart/components/ItemSelect.tsx
@@ -13,23 +13,25 @@ type Props = {
 
 const CartItemSelect = ({ item }: Props) => {
   const auth = getAuth()
-  const { loadCart } = useCartStore()
+  const { updateCartItem, cart } = useCartStore()
 
   const [isLoad, setIsLoad] = useState<boolean>(false)
 
   const handleChange = async (e: React.ChangeEvent<HTMLInputElement>) => {
-    if (typeof auth !== 'object') return
-
-    setIsLoad(true)
-    await upsertUserCart({
-      userId: auth.id,
-      type: item.cart_type,
-      id: item.id,
-      qty: item.quantity,
-      selected: e.target.checked
-    })
-    await loadCart(auth.id)
-    setIsLoad(false)
+    if (typeof auth !== 'object' || !cart) return
+    
+    setIsLoad(true);
+    const updatedCartItems = cart.products.map(cartItem =>
+      cartItem.id === item.id
+        ? { ...cartItem, selected: e.target.checked }
+        : cartItem
+    );
+
+    // Update the entire cart
+    const updatedCart = { ...cart, products: updatedCartItems };
+    updateCartItem(updatedCart);
+
+    setIsLoad(false);
   }
 
   return (
-- 
cgit v1.2.3

