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

