generated from Bjorn86/cra-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuse-favorites.jsx
32 lines (29 loc) · 1.06 KB
/
use-favorites.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { useDispatch, useSelector } from 'react-redux';
import { useCallback, useContext } from 'react';
import { useNavigate } from 'react-router-dom';
import { deletedFromFavorites } from 'features/favorites/model/deleted-from-favorites';
import { addedToFavorites } from 'features/favorites/model/added-to-favorites';
import { AuthContext } from 'app/contexts';
import { paths } from 'shared/model/paths-config';
import { selectFavorites } from 'entities/user';
export const useFavorites = (id) => {
const dispatch = useDispatch();
const favorites = useSelector(selectFavorites);
const isFavorite = favorites.includes(id);
const { isAuthorized } = useContext(AuthContext);
const navigate = useNavigate();
const handleFavoriteButtonClick = useCallback(() => {
if (!isAuthorized) {
navigate(paths.registration);
}
if (isFavorite) {
dispatch(deletedFromFavorites(id));
} else {
dispatch(addedToFavorites(id));
}
}, [dispatch, id, isFavorite, isAuthorized, navigate]);
return {
isFavorite,
handleFavoriteButtonClick,
};
};