Skip to content

Commit afb5b33

Browse files
committed
Added custom hooks for cart and wishlist management
1 parent 6be4c9a commit afb5b33

File tree

3 files changed

+66
-5
lines changed

3 files changed

+66
-5
lines changed

src/hooks/cartReducerHooks.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { useDispatch } from 'react-redux';
2+
import {
3+
removeItemFromCart as removeItem,
4+
addItemToCart as addItem,
5+
decrementCount as decrementItem,
6+
incrementCount as incrementItem
7+
} from '../features/cart/cartSlice.js';
8+
9+
// Custom hook to dispatch action for cart state.
10+
const useCartActions = () => {
11+
const dispatch = useDispatch();
12+
13+
// Remove item from cart.
14+
const removeItemFromCart = (itemName) => dispatch(removeItem(itemName));
15+
16+
// Add item to cart.
17+
const addItemToCart = (item) => dispatch(addItem(item));
18+
19+
// Increase item count.
20+
const incrementItemCount = (itemName) => dispatch(incrementItem(itemName));
21+
22+
// Decrease item count.
23+
const decrementItemCount = (itemName) => dispatch(decrementItem(itemName));
24+
25+
return { removeItemFromCart, addItemToCart, incrementItemCount, decrementItemCount };
26+
};
27+
28+
export default useCartActions;

src/hooks/useStoreItems.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
11
import { useSelector } from 'react-redux';
22

3-
const useCartItems = () => {
4-
return useSelector(state => state.cart.value);
3+
// Custom hook to use cart state from store.
4+
const useCartItems = () => useSelector(state => state.cart.value);
5+
6+
// Custom hook to use wishlist state from store.
7+
const useWishlistItems = () => useSelector(state => state.wishlist.value);
8+
9+
// Custom hook to know whether the item is already in the cart state or not.
10+
const useIsItemInCart = () => (itemName) => {
11+
const cartItems = useCartItems();
12+
13+
return cartItems.some(item => item.name === itemName);
514
};
615

7-
const useWishlistItems = () => {
8-
return useSelector(state => state.wishlist.value);
16+
// Custom hook to know whether the item is already in the wishlist state or not.
17+
const useIsItemInWishlist = () => (itemName) => {
18+
const wishlistItems = useWishlistItems();
19+
20+
return wishlistItems.some(item => item.name === itemName);
921
};
1022

11-
export { useCartItems, useWishlistItems };
23+
export { useCartItems, useWishlistItems, useIsItemInCart, useIsItemInWishlist };

src/hooks/wishlistReducerHooks.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { useDispatch } from 'react-redux';
2+
import {
3+
addItemToWishlist as addItem,
4+
removeItemFromWishlist as removeItem
5+
} from '../features/wishlist/wishlistSlice.js';
6+
7+
// Custom hook to dispatch wishlist state actions.
8+
const useWishlistActions = () => {
9+
10+
const dispatch = useDispatch();
11+
12+
// Add item to wishlist.
13+
const addItemToWishlist = (item) => dispatch(addItem(item));
14+
15+
// Remove item from wishlist.
16+
const removeItemFromWishlist = (itemName) => dispatch(removeItem(itemName));
17+
18+
return { addItemToWishlist, removeItemFromWishlist };
19+
};
20+
21+
export default useWishlistActions;

0 commit comments

Comments
 (0)