From 6c3c790d3fb0c6916a1bea5cf1aee20388c964a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diogo=20Silv=C3=A9rio?= Date: Sun, 28 Jan 2018 22:39:29 -0200 Subject: [PATCH] REFACTORING: Splitting reducers --- actions/index.js | 9 ++++ components/flashcards/CardList.js | 5 ++- reducers/decks.js | 65 +++++++++++++++++++++++++++ reducers/index.js | 74 ++----------------------------- reducers/scores.js | 17 +++++++ 5 files changed, 98 insertions(+), 72 deletions(-) create mode 100644 reducers/decks.js create mode 100644 reducers/scores.js diff --git a/actions/index.js b/actions/index.js index 0b767c3..be71f63 100644 --- a/actions/index.js +++ b/actions/index.js @@ -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, @@ -40,4 +42,11 @@ export function deleteCard(deckKey, cardName){ deckKey, cardName } +} + +export function updateScore(scores){ + return { + type: UPDATE_SCORE, + scores + } } \ No newline at end of file diff --git a/components/flashcards/CardList.js b/components/flashcards/CardList.js index 879b847..27f5d33 100644 --- a/components/flashcards/CardList.js +++ b/components/flashcards/CardList.js @@ -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 } diff --git a/reducers/decks.js b/reducers/decks.js new file mode 100644 index 0000000..33603dc --- /dev/null +++ b/reducers/decks.js @@ -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; \ No newline at end of file diff --git a/reducers/index.js b/reducers/index.js index e97128c..65ed2d6 100644 --- a/reducers/index.js +++ b/reducers/index.js @@ -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; \ No newline at end of file +export default combineReducers({ decks, scores }); \ No newline at end of file diff --git a/reducers/scores.js b/reducers/scores.js new file mode 100644 index 0000000..5439e99 --- /dev/null +++ b/reducers/scores.js @@ -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; \ No newline at end of file