Add: bookshelf list view, add: sort by most recent

This commit is contained in:
advplyr
2021-10-16 15:50:13 -05:00
parent 6dbbfdbc04
commit 56a70aefaf
16 changed files with 377 additions and 50 deletions
+19 -10
View File
@@ -22,7 +22,7 @@ export const getters = {
getFiltered: (state, getters, rootState, rootGetters) => () => {
var filtered = state.audiobooks
var settings = rootState.user.settings || {}
var filterBy = settings.filterBy || ''
var filterBy = settings.mobileFilterBy || ''
var searchGroups = ['genres', 'tags', 'series', 'authors', 'progress']
var group = searchGroups.find(_group => filterBy.startsWith(_group + '.'))
@@ -45,18 +45,27 @@ export const getters = {
}
return filtered
},
getFilteredAndSorted: (state, getters, rootState) => () => {
getFilteredAndSorted: (state, getters, rootState, rootGetters) => () => {
var settings = rootState.user.settings
var direction = settings.orderDesc ? 'desc' : 'asc'
var direction = settings.mobileOrderDesc ? 'desc' : 'asc'
var filtered = getters.getFiltered()
var orderByNumber = settings.orderBy === 'book.volumeNumber'
return sort(filtered)[direction]((ab) => {
// Supports dot notation strings i.e. "book.title"
var value = settings.orderBy.split('.').reduce((a, b) => a[b], ab)
if (orderByNumber && !isNaN(value)) return Number(value)
return value
})
if (settings.mobileOrderBy === 'recent') {
return sort(filtered)[direction]((ab) => {
var abprogress = rootGetters['user/getMostRecentAudiobookProgress'](ab.id)
if (!abprogress) return 0
return abprogress.lastUpdate
})
} else {
var orderByNumber = settings.mobileOrderBy === 'book.volumeNumber'
return sort(filtered)[direction]((ab) => {
// Supports dot notation strings i.e. "book.title"
var value = settings.mobileOrderBy.split('.').reduce((a, b) => a[b], ab)
if (orderByNumber && !isNaN(value)) return Number(value)
return value
})
}
},
getUniqueAuthors: (state) => {
var _authors = state.audiobooks.filter(ab => !!(ab.book && ab.book.author)).map(ab => ab.book.author)
+13
View File
@@ -2,6 +2,9 @@ export const state = () => ({
user: null,
localUserAudiobooks: {},
settings: {
mobileOrderBy: 'recent',
mobileOrderDesc: true,
mobileFilterBy: 'all',
orderBy: 'book.title',
orderDesc: false,
filterBy: 'all',
@@ -19,6 +22,16 @@ export const getters = {
getUserAudiobook: (state) => (audiobookId) => {
return state.user && state.user.audiobooks ? state.user.audiobooks[audiobookId] || null : null
},
getLocalUserAudiobook: (state) => (audiobookId) => {
return state.user && state.user.localUserAudiobooks ? state.user.localUserAudiobooks[audiobookId] || null : null
},
getMostRecentAudiobookProgress: (state, getters) => (audiobookId) => {
var userAb = getters.getUserAudiobook(audiobookId)
var localUserAb = getters.getLocalUserAudiobook(audiobookId)
if (!localUserAb) return userAb
if (!userAb) return localUserAb
return localUserAb.lastUpdate > userAb.lastUpdate ? localUserAb : userAb
},
getUserSetting: (state) => (key) => {
return state.settings ? state.settings[key] || null : null
},