From 95c473bda1f4d79ccf5b445645cc393325e644f3 Mon Sep 17 00:00:00 2001 From: notnull Date: Sat, 23 Mar 2019 17:20:33 -0400 Subject: [PATCH] added Redux --- src/components/fetchEpisodes.js | 12 --------- src/store/index.js | 17 ++++++++++++ src/store/reducers/captions.js | 47 +++++++++++++++++++++++++++++++++ src/store/reducers/episodes.js | 35 ++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 12 deletions(-) delete mode 100644 src/components/fetchEpisodes.js create mode 100644 src/store/index.js create mode 100644 src/store/reducers/captions.js create mode 100644 src/store/reducers/episodes.js diff --git a/src/components/fetchEpisodes.js b/src/components/fetchEpisodes.js deleted file mode 100644 index 8f09e0c..0000000 --- a/src/components/fetchEpisodes.js +++ /dev/null @@ -1,12 +0,0 @@ -import axios from 'axios' - -const fetchEpisodes = async () => { - try { - const { data } = await axios.get('/api/v2/episodes') - return data - } catch (e) { - console.log(e) - } -} - -export default fetchEpisodes diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..236bf93 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,17 @@ +import {createStore, combineReducers, applyMiddleware} from 'redux' +import {createLogger} from 'redux-logger' +import thunkMiddleware from 'redux-thunk' +import {composeWithDevTools} from 'redux-devtools-extension' +import episodes from './reducers/episodes' +import captions from './reducers/captions' + + +const reducer = combineReducers({episodes, captions}) +const middleware = composeWithDevTools( + applyMiddleware(thunkMiddleware, createLogger({collapsed: true})) +) +const store = createStore(reducer, middleware) + +export default store +export * from './reducers/episodes' +export * from './reducers/captions' diff --git a/src/store/reducers/captions.js b/src/store/reducers/captions.js new file mode 100644 index 0000000..ae3f9b2 --- /dev/null +++ b/src/store/reducers/captions.js @@ -0,0 +1,47 @@ +import axios from 'axios' + +// ACTION TYPES +const GOT_ALL_CAPTIONS = 'GOT_ALL_CAPTIONS' +const initialCaptions = {all: [], selected: {}} + +// ACTION CREATORS +export const gotAllCaptions = captions => ({ + type: GOT_ALL_CAPTIONS, + all: captions +}) + + +// THUNK CREATORS + +export const fetchAllCaptions = () => async dispatch => { + const captions = [] + try { + const res = await axios.get('https://irc.anarchyplanet.org/ircbang/api/v2/episodes') + const episodes = res.data + episodes.map(async episode => { + try{ + const {data} = await axios.get(`https://irc.anarchyplanet.org/ircbang/api/v2/episodes/${episode.slug}`) + captions.push(data) + + } catch(e) { + console.log(`no captions for ${episode.slug}`) + } + }) + + dispatch(gotAllCaptions(captions)) + } catch (err) { + console.error(err) + } +} + +// REDUCER +const episodeReducer = (captions = initialCaptions, action) => { + switch (action.type) { + case GOT_ALL_CAPTIONS: + return ({all: action.all, selected: {}}) + default: + return captions + } +} + +export default episodeReducer diff --git a/src/store/reducers/episodes.js b/src/store/reducers/episodes.js new file mode 100644 index 0000000..ceb3b1b --- /dev/null +++ b/src/store/reducers/episodes.js @@ -0,0 +1,35 @@ +import axios from 'axios' + +// ACTION TYPES +const GOT_ALL_EPISODES = 'GOT_ALL_EPISODES' +const initialEpisodes = [] + +// ACTION CREATORS +export const gotAllEpisodes = episodes => ({ + type: GOT_ALL_EPISODES, + episodes +}) + + +// THUNK CREATORS + +export const fetchAllEpisodes = () => async dispatch => { + try { + const {data} = await axios.get('https://irc.anarchyplanet.org/ircbang/api/v2/episodes') + dispatch(gotAllEpisodes(data)) + } catch (err) { + console.error(err) + } +} + +// REDUCER +const episodeReducer = (episodes = initialEpisodes, action) => { + switch (action.type) { + case GOT_ALL_EPISODES: + return action.episodes + default: + return episodes + } +} + +export default episodeReducer