mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-12-23 04:09:38 +00:00
Sorting and filtering
This commit is contained in:
parent
a89d2e71cc
commit
7532b756a7
14 changed files with 450 additions and 42 deletions
|
|
@ -1,3 +1,4 @@
|
|||
import { sort } from '@/assets/fastSort'
|
||||
|
||||
export const state = () => ({
|
||||
audiobooks: [],
|
||||
|
|
@ -5,7 +6,21 @@ export const state = () => ({
|
|||
})
|
||||
|
||||
export const getters = {
|
||||
getFiltered: (state, getters, rootState) => () => {
|
||||
var filtered = state.audiobooks
|
||||
// TODO: Add filters
|
||||
return filtered
|
||||
},
|
||||
getFilteredAndSorted: (state, getters, rootState) => () => {
|
||||
var settings = rootState.settings.settings
|
||||
var direction = settings.orderDesc ? 'desc' : 'asc'
|
||||
|
||||
var filtered = getters.getFiltered()
|
||||
return sort(filtered)[direction]((ab) => {
|
||||
// Supports dot notation strings i.e. "book.title"
|
||||
return settings.orderBy.split('.').reduce((a, b) => a[b], ab)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export const actions = {
|
||||
|
|
@ -19,7 +34,8 @@ export const actions = {
|
|||
console.error('Failed', error)
|
||||
commit('set', [])
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
export const mutations = {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,18 @@
|
|||
|
||||
export const state = () => ({
|
||||
orderBy: 'title',
|
||||
orderDesc: false
|
||||
settings: {
|
||||
orderBy: 'book.title',
|
||||
orderDesc: false,
|
||||
filterBy: 'all'
|
||||
},
|
||||
|
||||
listeners: []
|
||||
})
|
||||
|
||||
export const getters = {
|
||||
|
||||
getFilterOrderKey: (state) => {
|
||||
return Object.values(state.settings).join('-')
|
||||
}
|
||||
}
|
||||
|
||||
export const actions = {
|
||||
|
|
@ -14,7 +21,19 @@ export const actions = {
|
|||
|
||||
export const mutations = {
|
||||
setSettings(state, settings) {
|
||||
state.orderBy = settings.orderBy
|
||||
state.orderDesc = settings.orderDesc
|
||||
state.settings = {
|
||||
...settings
|
||||
}
|
||||
state.listeners.forEach((listener) => {
|
||||
listener.meth()
|
||||
})
|
||||
},
|
||||
addListener(state, listener) {
|
||||
var index = state.listeners.findIndex(l => l.id === listener.id)
|
||||
if (index >= 0) state.listeners.splice(index, 1, listener)
|
||||
else state.listeners.push(listener)
|
||||
},
|
||||
removeListener(state, listenerId) {
|
||||
state.listeners = state.listeners.filter(l => l.id !== listenerId)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue