59 lines
1.5 KiB
JavaScript
59 lines
1.5 KiB
JavaScript
const ALBUM_MODE_GRID = 'ALBUM_GRID_MODE'
|
|
const ALBUM_MODE_LIST = 'ALBUM_LIST_MODE'
|
|
const selectViewMode = (mode) => ({ type: mode })
|
|
|
|
const ALBUM_LIST_ALL = 'ALBUM_LIST_ALL'
|
|
const ALBUM_LIST_RANDOM = 'ALBUM_LIST_RANDOM'
|
|
const ALBUM_LIST_NEWEST = 'ALBUM_LIST_NEWEST'
|
|
const ALBUM_LIST_RECENT = 'ALBUM_LIST_RECENT'
|
|
const ALBUM_LIST_STARRED = 'ALBUM_LIST_STARRED'
|
|
|
|
const albumListParams = {
|
|
ALBUM_LIST_ALL: { sort: { field: 'name', order: 'ASC' } },
|
|
ALBUM_LIST_RANDOM: { sort: { field: 'random' } },
|
|
ALBUM_LIST_NEWEST: { sort: { field: 'created_at', order: 'DESC' } },
|
|
ALBUM_LIST_RECENT: {
|
|
sort: { field: 'play_date', order: 'DESC' },
|
|
filter: { starred: true },
|
|
},
|
|
}
|
|
|
|
const selectAlbumList = (mode) => ({ type: mode })
|
|
|
|
const albumViewReducer = (
|
|
previousState = {
|
|
mode: ALBUM_MODE_LIST,
|
|
list: ALBUM_LIST_ALL,
|
|
params: { sort: {}, filter: {} },
|
|
},
|
|
payload
|
|
) => {
|
|
const { type } = payload
|
|
switch (type) {
|
|
case ALBUM_MODE_GRID:
|
|
case ALBUM_MODE_LIST:
|
|
return { ...previousState, mode: type }
|
|
case ALBUM_LIST_ALL:
|
|
case ALBUM_LIST_RANDOM:
|
|
case ALBUM_LIST_NEWEST:
|
|
case ALBUM_LIST_RECENT:
|
|
case ALBUM_LIST_STARRED:
|
|
return { ...previousState, list: type, params: albumListParams[type] }
|
|
default:
|
|
return previousState
|
|
}
|
|
}
|
|
|
|
export {
|
|
ALBUM_MODE_LIST,
|
|
ALBUM_MODE_GRID,
|
|
ALBUM_LIST_ALL,
|
|
ALBUM_LIST_RANDOM,
|
|
ALBUM_LIST_NEWEST,
|
|
ALBUM_LIST_RECENT,
|
|
ALBUM_LIST_STARRED,
|
|
albumViewReducer,
|
|
selectViewMode,
|
|
selectAlbumList,
|
|
}
|