diff --git a/src/actions/searchActions.js b/src/actions/searchActions.js index 8bd408c..196f5b7 100644 --- a/src/actions/searchActions.js +++ b/src/actions/searchActions.js @@ -11,8 +11,15 @@ export const setSearchSources = sources => dispatch => { }) } -export const submitSearch = keywords => (dispatch, getState) => { - if(!keywords) return +export const submitSearch = (keywords, page) => (dispatch, getState) => { + if(!keywords){ + dispatch({ + type: SUBMIT_SEARCH, + payload: { keywords, library: [], beatSaver: { songs: [], nextPage: 0, prevPage: 0, lastPage: 0, totalSongs: 0, currentPage: 0 } } + }) + return + } + if(!page) page = 0 dispatch({ type: SET_LOADING, @@ -25,6 +32,11 @@ export const submitSearch = keywords => (dispatch, getState) => { let localSongs = [] let beatSaverSongs = [] + let beatSaverNextPage = 0 + let beatSaverPrevPage = 0 + let beatSaverLastPage = 0 + let beatSaverTotalSongs = 0 + let idSong let isId = parseInt(keywords.replace('-', ''), 10) @@ -48,14 +60,18 @@ export const submitSearch = keywords => (dispatch, getState) => { localResultsReady = true // BeatSaver Search - fetch('https://beatsaver.com/api/search/text/all?q=' + encodeURIComponent(keywords.replace('/', '\\'))) + fetch('https://beatsaver.com/api/search/text/' + page + '?q=' + encodeURIComponent(keywords.replace('/', '\\'))) .then(res => res.json()) .then(data => { beatSaverSongs = data.docs + beatSaverNextPage = data.nextPage + beatSaverPrevPage = data.prevPage + beatSaverLastPage = data.lastPage + beatSaverTotalSongs = data.totalDocs if(localResultsReady & beatSaverIdResultsReady) { dispatch({ type: SUBMIT_SEARCH, - payload: idSong ? { keywords, library: localSongs, beatSaver: [idSong, ...beatSaverSongs] } : { keywords, library: localSongs, beatSaver: beatSaverSongs } + payload: idSong ? { keywords, library: localSongs, beatSaver: { songs: [idSong, ...beatSaverSongs], nextPage: beatSaverNextPage, prevPage: beatSaverPrevPage, lastPage: beatSaverLastPage, totalSongs: beatSaverTotalSongs, currentPage: page } } : { keywords, library: localSongs, beatSaver: { songs: beatSaverSongs, nextPage: beatSaverNextPage, prevPage: beatSaverPrevPage, lastPage: beatSaverLastPage, totalSongs: beatSaverTotalSongs, currentPage: page } } }) dispatch({ type: SET_LOADING, @@ -76,7 +92,7 @@ export const submitSearch = keywords => (dispatch, getState) => { if(localResultsReady & beatSaverResultsReady) { dispatch({ type: SUBMIT_SEARCH, - payload: idSong ? { keywords, library: localSongs, beatSaver: [idSong, ...beatSaverSongs] } : { keywords, library: localSongs, beatSaver: beatSaverSongs } + payload: idSong ? { keywords, library: localSongs, beatSaver: { songs: [idSong, ...beatSaverSongs], nextPage: beatSaverNextPage, prevPage: beatSaverPrevPage, lastPage: beatSaverLastPage, totalSongs: beatSaverTotalSongs, currentPage: page } } : { keywords, library: localSongs, beatSaver: { songs: beatSaverSongs, nextPage: beatSaverNextPage, prevPage: beatSaverPrevPage, lastPage: beatSaverLastPage, totalSongs: beatSaverTotalSongs, currentPage: page } } }) dispatch({ type: SET_LOADING, diff --git a/src/components/SearchView.js b/src/components/SearchView.js index acf0b65..712cdd8 100644 --- a/src/components/SearchView.js +++ b/src/components/SearchView.js @@ -14,7 +14,7 @@ class SearchView extends Component { return (

Search

-
{ e.preventDefault(); this.props.submitSearch(document.getElementById('search-box').value) } }>
+
{ e.preventDefault(); this.props.submitSearch(document.getElementById('search-box').value, 0) } }>

Results for: "{this.props.results.keywords}"

Library

{this.props.results.library.length} result{(this.props.results.library.length !== 1 ? 's' : '')}
{this.props.results.library.map((song, i) => { @@ -29,8 +29,8 @@ class SearchView extends Component {
) })}
-

BeatSaver

{this.props.results.beatSaver.length} result{(this.props.results.beatSaver.length !== 1 ? 's' : '')} -
{this.props.results.beatSaver.map((song, i) => { +

BeatSaver

{this.props.results.beatSaver.songs.length} result{(this.props.results.beatSaver.songs.length !== 1 ? 's' : '')} +
{this.props.results.beatSaver.songs.map((song, i) => { return (
{ this.props.loadDetailsFromKey(song.key) } } key={ i }> @@ -41,6 +41,12 @@ class SearchView extends Component {
) })}
+
{Array.apply(0, Array(this.props.results.beatSaver.lastPage)).map((val,i) => { + return ( + + ) + })} +
) } diff --git a/src/css/Button.scss b/src/css/Button.scss index d7b992d..28350c2 100644 --- a/src/css/Button.scss +++ b/src/css/Button.scss @@ -32,6 +32,7 @@ .button { display: inline-block; margin-right: 10px; + margin-top: 20px; padding: 10px 20px; height: 20px; border: none; diff --git a/src/reducers/loadingReducer.js b/src/reducers/loadingReducer.js index 49ed44a..d8d270f 100644 --- a/src/reducers/loadingReducer.js +++ b/src/reducers/loadingReducer.js @@ -1,6 +1,6 @@ import { SET_LOADING } from '../actions/types' -export default function(state = true, action) { +export default function(state = false, action) { switch(action.type) { case SET_LOADING: return action.payload diff --git a/src/reducers/searchReducer.js b/src/reducers/searchReducer.js index 7542e3e..f48ad4b 100644 --- a/src/reducers/searchReducer.js +++ b/src/reducers/searchReducer.js @@ -1,6 +1,26 @@ import { SET_SEARCH_SOURCES, SUBMIT_SEARCH } from '../actions/types' -export default function(state = { isOpen: false, sources: { library: true, beatSaver: true }, searchResults: { keywords: '', library: [], beatSaver: [] } }, action) { +const initialState = { + isOpen: false, + sources: { + library: true, + beatSaver: true + }, + searchResults: { + keywords: '', + library: [], + beatSaver: { + songs: [], + nextPage: 0, + prevPage: 0, + lastPage: 0, + totalSongs: 0, + currentPage: 0 + } + } +} + +export default function(state = initialState, action) { switch(action.type) { case SET_SEARCH_SOURCES: return { diff --git a/src/store.js b/src/store.js index 2ea286f..7e1fc8b 100644 --- a/src/store.js +++ b/src/store.js @@ -20,7 +20,14 @@ const initialState = { }, search: { searchResults: { - beatSaver: [], + beatSaver: { + songs: [], + nextPage: 0, + prevPage: 0, + lastPage: 0, + totalSongs: 0, + currentPage: 0 + }, library: [] } }