Skip to content
This repository was archived by the owner on Aug 8, 2019. It is now read-only.

Commit 2d68c13

Browse files
author
condef5
committed
Add redux to favorite clubs
1 parent 8f67ebd commit 2d68c13

6 files changed

Lines changed: 48 additions & 17 deletions

File tree

api/db/schema.rb

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,6 @@
6969
t.index ["user_id"], name: "index_favorites_on_user_id"
7070
end
7171

72-
create_table "favorites", force: :cascade do |t|
73-
t.bigint "club_id"
74-
t.bigint "user_id"
75-
t.datetime "created_at", null: false
76-
t.datetime "updated_at", null: false
77-
t.index ["club_id"], name: "index_favorites_on_club_id"
78-
t.index ["user_id"], name: "index_favorites_on_user_id"
79-
end
80-
8172
create_table "sport_fields", force: :cascade do |t|
8273
t.string "name"
8374
t.string "description"

client/src/actions/action-hooks.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import React from "react";
22
import { useDispatch } from "react-redux";
3-
43
import {
54
setClubs,
5+
setClubsFavorites,
66
setSportFields,
77
setFavorite,
88
setUnfavorite
@@ -13,6 +13,11 @@ export function useSetClubs() {
1313
return React.useCallback(clubs => dispatch(setClubs(clubs)), [dispatch]);
1414
}
1515

16+
export function useSetClubsFavorites() {
17+
const dispatch = useDispatch();
18+
return React.useCallback(clubs => dispatch(setClubsFavorites(clubs)), [dispatch]);
19+
}
20+
1621
export function useSetFavorite() {
1722
const dispatch = useDispatch();
1823
return React.useCallback(club => dispatch(setFavorite(club)), [dispatch]);

client/src/actions/actions.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ export function setClubs(clubs) {
22
return { type: "SET_CLUBS", payload: clubs };
33
}
44

5+
export function setClubsFavorites(clubs) {
6+
return { type: "SET_CLUBS_FAVORITES", payload: clubs };
7+
}
8+
59
export function setFavorite(clubs) {
610
return { type: "FAVORITED", payload: clubs };
711
}

client/src/reducers/index.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,37 @@ export function sportFieldsReducer(state = initialState.sportFields, action) {
4343
}
4444
}
4545

46+
export function favoriteClubsReducer(
47+
state = initialState.favoriteClubs,
48+
action
49+
) {
50+
switch (action.type) {
51+
case "SET_CLUBS_FAVORITES": {
52+
return action.payload;
53+
}
54+
case "FAVORITED":
55+
case "UNFAVORITED": {
56+
return state.map(club => {
57+
if (club.id === action.payload.id) {
58+
return {
59+
...club,
60+
favorited: action.payload.favorited,
61+
favorited_count: action.payload.favorited_count
62+
};
63+
}
64+
return club;
65+
});
66+
}
67+
default: {
68+
return state;
69+
}
70+
}
71+
}
72+
4673
const reducer = combineReducers({
4774
clubs: clubsReducer,
48-
sportFields: sportFieldsReducer
75+
sportFields: sportFieldsReducer,
76+
favoriteClubs: favoriteClubsReducer
4977
});
5078

5179
export default reducer;

client/src/selectors/selectors.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@ function useClubs() {
44
return useSelector(state => state.clubs, shallowEqual);
55
}
66

7+
function useClubsFavorites() {
8+
return useSelector(state => state.favoriteClubs, shallowEqual);
9+
}
10+
711
function useSportFields() {
812
return useSelector(state => state.sportFields, shallowEqual);
913
}
1014

11-
export { useClubs, useSportFields };
15+
export { useClubs, useSportFields, useClubsFavorites };

client/src/views/favorites.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,18 @@
22
import React from "react";
33
import { jsx } from "@emotion/core";
44
import { getFavoriteClubs } from "../services/club";
5-
import { useClubs } from "../selectors/selectors";
6-
import { useSetClubs } from "../actions/action-hooks";
5+
import { useClubsFavorites } from "../selectors/selectors";
6+
import { useSetClubsFavorites } from "../actions/action-hooks";
77
import Club from "../components/club";
88

99
function Home() {
1010
const [loading, setLoading] = React.useState(false);
11-
const [clubs, setClubs] = React.useState([]);
12-
// const setClubs = useSetClubs();
11+
const clubs = useClubsFavorites();
12+
const setClubs = useSetClubsFavorites();
1313

1414
React.useEffect(() => {
1515
setLoading(true);
1616
getFavoriteClubs().then(clubs => {
17-
console.log(clubs);
1817
setClubs(clubs);
1918
setLoading(false);
2019
});

0 commit comments

Comments
 (0)