/
reducer.js
45 lines (43 loc) · 1.43 KB
/
reducer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import { store } from '../../client.js'
export const playerReducer = (state = {}, action) => {
switch (action.type) {
case 'PLAY_ALBUM': {
let matching = []
let next
store.getState().library.tracks.forEach((track) => {
if ((track.album === action.album.title) && (track.artist === action.album.artist)) matching.push(track)
})
if (!matching[1]) next = false
else next = matching[1]
let albumIndex = findAlbums(matching[0])
state = {...state, track: matching[0], next: next, previous: false, albumIndex: albumIndex}
break
}
case 'PLAY_TRACK': {
let library = store.getState().library
let index = library.tracks.indexOf(action.track)
let next = library.tracks[index + 1]
let previous = library.tracks[index - 1]
let albumIndex = findAlbums(action.track)
if (!next || next.album !== action.track.album) next = false
if (!previous || previous.album !== action.track.album) previous = false
state = {...state, track: action.track, next: next, previous: previous, albumIndex: albumIndex}
break
}
case 'STOP': {
state = {}
}
}
return state
}
let findAlbums = track => {
let albums = store.getState().library.albums
let albumIndex = 0
albums.some((album, index) => {
if ((album.title === track.album) && (album.artist === track.artist)) {
albumIndex = index
return
}
})
return albumIndex
}