funkwhale/front/src/store/moderation.js

94 lines
2.3 KiB
JavaScript

import axios from 'axios'
import logger from '@/logging'
import _ from '@/lodash'
export default {
namespaced: true,
state: {
filters: [],
showFilterModal: false,
lastUpdate: new Date(),
filterModalTarget: {
type: null,
target: null,
}
},
mutations: {
filterModalTarget (state, value) {
state.filterModalTarget = value
},
empty (state) {
state.filters = []
},
lastUpdate (state, value) {
state.lastUpdate = value
},
contentFilter (state, value) {
state.filters.push(value)
},
showFilterModal (state, value) {
state.showFilterModal = value
if (!value) {
state.filterModalTarget = {
type: null,
target: null,
}
}
},
reset (state) {
state.filters = []
state.filterModalTarget = null
state.showFilterModal = false
},
deleteContentFilter (state, uuid) {
state.filters = state.filters.filter((e) => {
return e.uuid != uuid
})
}
},
getters: {
artistFilters: (state) => () => {
let f = state.filters.filter((f) => {
return f.target.type === 'artist'
})
let p = _.sortBy(f, [(e) => { return e.creation_date }])
p.reverse()
return p
},
},
actions: {
hide ({commit}, payload) {
commit('filterModalTarget', payload)
commit('showFilterModal', true)
},
fetchContentFilters ({dispatch, state, commit, rootState}, url) {
let params = {}
let promise
if (url) {
promise = axios.get(url)
} else {
commit('empty')
params = {
page_size: 100,
ordering: '-creation_date'
}
promise = axios.get('moderation/content-filters/', {params: params})
}
return promise.then((response) => {
logger.default.info('Fetched a batch of ' + response.data.results.length + ' filters')
if (response.data.next) {
dispatch('fetchContentFilters', response.data.next)
}
response.data.results.forEach(result => {
commit('contentFilter', result)
})
})
},
deleteContentFilter ({commit}, uuid) {
return axios.delete(`moderation/content-filters/${ uuid }/`).then((response) => {
commit('deleteContentFilter', uuid)
})
}
}
}