Sorting and filtering

This commit is contained in:
Mark Cooper 2021-08-18 20:18:44 -05:00
parent a89d2e71cc
commit 7532b756a7
14 changed files with 450 additions and 42 deletions

View file

@ -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 = {

View file

@ -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)
}
}