Skip to content

Commit

Permalink
REFACTORING: Splitting reducers
Browse files Browse the repository at this point in the history
  • Loading branch information
diogosilverio committed Jan 29, 2018
1 parent 279cd6b commit 6c3c790
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 72 deletions.
9 changes: 9 additions & 0 deletions actions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ export const DELETE_DECK = "DELETE_DECK";
export const ADD_CARD = "ADD_CARD";
export const DELETE_CARD = "DELETE_CARD";

export const UPDATE_SCORE = "UPDATE_SCORE";

export function loadDecks(decks){
return {
type: LOAD_DECKS,
Expand Down Expand Up @@ -40,4 +42,11 @@ export function deleteCard(deckKey, cardName){
deckKey,
cardName
}
}

export function updateScore(scores){
return {
type: UPDATE_SCORE,
scores
}
}
5 changes: 3 additions & 2 deletions components/flashcards/CardList.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,11 @@ const styles = StyleSheet.create({
}
});

function mapStateToProps({ decks }, props) {
function mapStateToProps(state, props) {
const { decks } = state;
const { deckKey } = props.navigation.state.params;
const cards = decks[deckKey].cards;

return {
cards
}
Expand Down
65 changes: 65 additions & 0 deletions reducers/decks.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import {
LOAD_DECKS,
NEW_DECK,
ADD_CARD,
DELETE_DECK,
DELETE_CARD
} from '../actions';

function decks(state = {}, action) {
const { type } = action;
const decks = state;

switch (type) {
case LOAD_DECKS: {
const decks = action.decks;

return decks;
}
case NEW_DECK: {
const deck = action.deck;
const freshDecks = {
...decks,
[deck.name]: deck
}

return freshDecks;
}
case DELETE_DECK: {
const { deckKey } = action;

const refreshedDecks = Object.assign({}, decks);
delete refreshedDecks[deckKey];
return refreshedDecks;
}
case ADD_CARD: {
const { card, deckKey } = action;
const freshDeck = decks[deckKey];

freshDeck.cards.push(card);

const freshDecks = {
...decks,
[deckKey]: freshDeck
}
return freshDecks;
}
case DELETE_CARD: {
const { deckKey, cardName } = action;
const freshDecks = {
...decks,
[deckKey]: {
...decks[deckKey],
cards: decks[deckKey].cards.filter(card => card.question !== cardName)
}
};

return freshDecks;
}
default: {
return state;
}
}
}

export default decks;
74 changes: 4 additions & 70 deletions reducers/index.js
Original file line number Diff line number Diff line change
@@ -1,72 +1,6 @@
import {
LOAD_DECKS,
NEW_DECK,
ADD_CARD,
DELETE_DECK,
DELETE_CARD
} from '../actions';
import { combineReducers } from 'redux';

function decks(state = { decks: {} }, action) {
const { type } = action;
const { decks } = state;
import decks from './decks';
import scores from './scores';

switch (type) {
case LOAD_DECKS: {
const decks = action.decks;

return {
decks
};
}
case NEW_DECK: {
const deck = action.deck;
const freshDecks = {
...decks,
[deck.name]: deck
}

return {
decks: freshDecks
}
}
case DELETE_DECK: {
const { deckKey } = action;
delete decks[deckKey];

const refreshedDecks = decks;
return {
decks: refreshedDecks
}
}
case ADD_CARD: {
const { card, deckKey } = action;
const freshDeck = decks[deckKey];

freshDeck.cards.push(card);

const freshDecks = {
...decks,
[deckKey]: freshDeck
}
return {
decks: freshDecks
}

}
case DELETE_CARD: {
const { deckKey, cardName } = action;
const freshDecks = decks;

freshDecks[deckKey].cards = freshDecks[deckKey].cards.filter(card => card.question !== cardName);

return {
decks: freshDecks
}
}
default: {
return state;
}
}
}

export default decks;
export default combineReducers({ decks, scores });
17 changes: 17 additions & 0 deletions reducers/scores.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { UPDATE_SCORE } from '../actions';

function scores(state = [], action) {
const { type } = action;
const scores = state;

switch (type) {
case UPDATE_SCORE: {
return action.scores;
}
default: {
return state;
}
}
}

export default scores;

0 comments on commit 6c3c790

Please sign in to comment.