summaryrefslogtreecommitdiff
path: root/src-migrate/utils/cart.js
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-05-22 10:05:09 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-05-22 10:05:09 +0700
commit09cebc9020c4f1995a73305187bc1576e339d183 (patch)
tree7617d74533d23277690886709fe6b9d68006814d /src-migrate/utils/cart.js
parent7d4445bb9bad3d6c945503086a07bd882536e5f6 (diff)
<miqdad> disable button when updating checkboxes and change summary design
Diffstat (limited to 'src-migrate/utils/cart.js')
-rw-r--r--src-migrate/utils/cart.js102
1 files changed, 100 insertions, 2 deletions
diff --git a/src-migrate/utils/cart.js b/src-migrate/utils/cart.js
index 431ff530..f474cbde 100644
--- a/src-migrate/utils/cart.js
+++ b/src-migrate/utils/cart.js
@@ -1,5 +1,6 @@
// cart-cookie-utils.js
import Cookies from 'js-cookie';
+import checkboxUpdateState from './checkBoxState';
// Constants
const CART_ITEMS_COOKIE = 'cart_data';
@@ -165,9 +166,19 @@ export const syncCartWithCookie = (cart) => {
* Update selected status item di cookie
* @param {number} productId ID produk
* @param {boolean} isSelected Status selected baru
+ * @param {boolean} notifyUpdate Whether to notify checkbox update state (default: true)
*/
-export const updateSelectedItemInCookie = (productId, isSelected) => {
+export const updateSelectedItemInCookie = (
+ productId,
+ isSelected,
+ notifyUpdate = true
+) => {
try {
+ // Notify checkbox update state if requested
+ if (notifyUpdate) {
+ checkboxUpdateState.startUpdate();
+ }
+
const selectedItems = getSelectedItemsFromCookie();
selectedItems[productId] = isSelected;
setSelectedItemsToCookie(selectedItems);
@@ -188,6 +199,11 @@ export const updateSelectedItemInCookie = (productId, isSelected) => {
} catch (error) {
console.error('Error updating selected item in cookie:', error);
return {};
+ } finally {
+ // End update notification if requested
+ if (notifyUpdate) {
+ checkboxUpdateState.endUpdate();
+ }
}
};
@@ -195,9 +211,19 @@ export const updateSelectedItemInCookie = (productId, isSelected) => {
* Set semua item menjadi selected atau unselected di cookie
* @param {Array} productIds Array product IDs
* @param {boolean} isSelected Status selected baru
+ * @param {boolean} notifyUpdate Whether to notify checkbox update state (default: true)
*/
-export const setAllSelectedInCookie = (productIds, isSelected) => {
+export const setAllSelectedInCookie = (
+ productIds,
+ isSelected,
+ notifyUpdate = true
+) => {
try {
+ // Notify checkbox update state if requested
+ if (notifyUpdate) {
+ checkboxUpdateState.startUpdate();
+ }
+
const selectedItems = getSelectedItemsFromCookie();
productIds.forEach((id) => {
@@ -221,6 +247,11 @@ export const setAllSelectedInCookie = (productIds, isSelected) => {
} catch (error) {
console.error('Error setting all selected in cookie:', error);
return {};
+ } finally {
+ // End update notification if requested
+ if (notifyUpdate) {
+ checkboxUpdateState.endUpdate();
+ }
}
};
@@ -263,10 +294,37 @@ export const removeCartItemsFromCookie = (cartIds) => {
};
/**
+ * Hapus item selected dari cookie berdasarkan product IDs
+ * @param {Array} productIds Array product IDs untuk dihapus
+ */
+export const removeSelectedItemsFromCookie = (productIds) => {
+ try {
+ const selectedItems = getSelectedItemsFromCookie();
+
+ // Hapus dari selectedItems
+ productIds.forEach((productId) => {
+ if (selectedItems[productId] !== undefined) {
+ delete selectedItems[productId];
+ }
+ });
+
+ // Simpan kembali ke cookie
+ setSelectedItemsToCookie(selectedItems);
+
+ return { selectedItems };
+ } catch (error) {
+ console.error('Error removing selected items from cookie:', error);
+ return {};
+ }
+};
+
+/**
* Force reset semua selected items ke unselected state
*/
export const forceResetAllSelectedItems = () => {
try {
+ checkboxUpdateState.startUpdate();
+
const cartData = getCartDataFromCookie();
const selectedItems = {};
@@ -286,5 +344,45 @@ export const forceResetAllSelectedItems = () => {
} catch (error) {
console.error('Error resetting all selected items:', error);
return {};
+ } finally {
+ checkboxUpdateState.endUpdate();
}
};
+
+/**
+ * Sync selected items between cookie and cart data
+ * @param {Array} cartProducts Products array from cart
+ */
+export const syncSelectedItemsWithCookie = (cartProducts) => {
+ try {
+ if (!cartProducts || !Array.isArray(cartProducts)) {
+ return { items: {}, needsUpdate: false };
+ }
+
+ const selectedItems = getSelectedItemsFromCookie();
+ let needsUpdate = false;
+
+ // Check if we need to update any items based on cookie values
+ cartProducts.forEach((product) => {
+ if (product.id && selectedItems[product.id] !== undefined) {
+ if (product.selected !== selectedItems[product.id]) {
+ needsUpdate = true;
+ }
+ } else if (product.id) {
+ // If not in cookie, add with current value
+ selectedItems[product.id] = product.selected;
+ }
+ });
+
+ // Update the cookie with the latest values
+ setSelectedItemsToCookie(selectedItems);
+
+ return { items: selectedItems, needsUpdate };
+ } catch (error) {
+ console.error('Error syncing selected items with cookie:', error);
+ return { items: {}, needsUpdate: false };
+ }
+};
+
+// Export the checkbox update state for use in components
+export { checkboxUpdateState };