From 3feaad9127ff429b27f0eb69fa6ea539de2f2e8c Mon Sep 17 00:00:00 2001
From: Miqdad <ahmadmiqdad27@gmail.com>
Date: Mon, 26 May 2025 20:00:17 +0700
Subject: <miqdad> Cleaning code

---
 src-migrate/modules/cart/components/ItemSelect.tsx | 76 +++++++---------------
 1 file changed, 25 insertions(+), 51 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 00c7be43..8dbfe2bc 100644
--- a/src-migrate/modules/cart/components/ItemSelect.tsx
+++ b/src-migrate/modules/cart/components/ItemSelect.tsx
@@ -20,124 +20,98 @@ const CartItemSelect = ({ item }: Props) => {
   const { updateCartItem, cart, loadCart } = useCartStore();
   const [isUpdating, setIsUpdating] = useState<boolean>(false);
   const [localSelected, setLocalSelected] = useState<boolean>(item.selected);
-  const [isGlobalUpdating, setIsGlobalUpdating] = useState<boolean>(false);
 
   // Subscribe to global checkbox update state
   useEffect(() => {
     const handleUpdateStateChange = (isUpdating) => {
-      setIsGlobalUpdating(isUpdating);
+      // This component doesn't need to react to global state changes
+      // Individual checkboxes are managed independently
     };
 
     checkboxUpdateState.addListener(handleUpdateStateChange);
-
-    return () => {
-      checkboxUpdateState.removeListener(handleUpdateStateChange);
-    };
+    return () => checkboxUpdateState.removeListener(handleUpdateStateChange);
   }, []);
 
-  // Initialize local state from cookie or server
+  // Sync local state with cookie and server data
   useEffect(() => {
-    if (isUpdating) return; // Skip if we're currently updating
+    if (isUpdating) return;
 
-    // Check cookie first
     const selectedItems = getSelectedItemsFromCookie();
     const storedState = selectedItems[item.id];
 
     if (storedState !== undefined) {
-      // Only update local state if it differs from current state
+      // Update local state if cookie differs
       if (localSelected !== storedState) {
         setLocalSelected(storedState);
       }
 
-      // If cookie state differs from server state and we're not in the middle of an update,
-      // synchronize the item state with cookie
-      if (storedState !== item.selected) {
-        // Update cart item silently to match cookie
-        if (cart) {
-          const updatedCartItems = cart.products.map((cartItem) =>
-            cartItem.id === item.id
-              ? { ...cartItem, selected: storedState }
-              : cartItem
-          );
-
-          const updatedCart = { ...cart, products: updatedCartItems };
-          updateCartItem(updatedCart);
-        }
+      // Sync cart state with cookie if needed
+      if (storedState !== item.selected && cart) {
+        const updatedCartItems = cart.products.map((cartItem) =>
+          cartItem.id === item.id
+            ? { ...cartItem, selected: storedState }
+            : cartItem
+        );
+        updateCartItem({ ...cart, products: updatedCartItems });
       }
     } else {
-      // Fall back to server state if no cookie exists
+      // Initialize cookie with server state
       setLocalSelected(item.selected);
-
-      // Save state to cookie for future
       updateSelectedItemInCookie(item.id, item.selected, false);
     }
   }, [item.id, item.selected, localSelected, cart, updateCartItem, isUpdating]);
 
   const handleChange = useCallback(
     async (e: React.ChangeEvent<HTMLInputElement>) => {
-      if (typeof auth !== 'object' || !cart || isUpdating) {
-        return;
-      }
+      if (typeof auth !== 'object' || !cart || isUpdating) return;
 
       const newSelectedState = e.target.checked;
 
-      // Update local state immediately for responsiveness
+      // Update local state immediately
       setLocalSelected(newSelectedState);
       setIsUpdating(true);
-
-      // Start the update - notify global state with this checkbox's ID
       checkboxUpdateState.startUpdate(item.id);
 
       try {
-        // The cookie update is now handled inside the function with notification
-        updateSelectedItemInCookie(item.id, newSelectedState, false); // We already started above
+        // Update cookie immediately for responsive UI
+        updateSelectedItemInCookie(item.id, newSelectedState, false);
 
-        // Update cart state immediately for UI responsiveness
+        // Update cart state optimistically
         const updatedCartItems = cart.products.map((cartItem) =>
           cartItem.id === item.id
             ? { ...cartItem, selected: newSelectedState }
             : cartItem
         );
+        updateCartItem({ ...cart, products: updatedCartItems });
 
-        const updatedCart = { ...cart, products: updatedCartItems };
-        updateCartItem(updatedCart);
-
-        // Save to server
+        // Send update to server
         await upsertUserCart({
           userId: auth.id,
           type: item.cart_type,
           id: item.id,
           qty: item.quantity,
           selected: newSelectedState,
-          // purchase_tax_id: item.purchase_tax_id || null, // Ensure null for numeric fields
+          purchase_tax_id: item.purchase_tax_id || null,
         });
 
-        // Reload cart to ensure consistency
+        // Reload cart for consistency
         await loadCart(auth.id);
       } catch (error) {
         console.error('Failed to update item selection:', error);
         toast.error('Gagal memperbarui pilihan barang');
 
-        // Revert local state on error
+        // Revert changes on error
         setLocalSelected(!newSelectedState);
-
-        // Revert cookie change
         updateSelectedItemInCookie(item.id, !newSelectedState, false);
-
-        // Reload cart to get server state
         loadCart(auth.id);
       } finally {
         setIsUpdating(false);
-
-        // End the update - notify global state with this checkbox's ID
         checkboxUpdateState.endUpdate(item.id);
       }
     },
     [auth, cart, item, isUpdating, updateCartItem, loadCart]
   );
 
-  // Determine if THIS specific checkbox should be disabled - only disable
-  // if this specific checkbox is updating
   const isDisabled =
     isUpdating || checkboxUpdateState.isCheckboxUpdating(item.id);
 
-- 
cgit v1.2.3

