funkwhale/front/src/store/libraries.js

74 lines
2.3 KiB
JavaScript

import axios from 'axios'
import logger from '@/logging'
export default {
namespaced: true,
state: {
followedLibraries: [],
followsByLibrary: {},
count: 0,
},
mutations: {
follows: (state, {library, follow}) => {
let replacement = {...state.followsByLibrary}
if (follow) {
if (state.followedLibraries.indexOf(library) === -1) {
state.followedLibraries.push(library)
replacement[library] = follow
}
} else {
let i = state.followedLibraries.indexOf(library)
if (i > -1) {
state.followedLibraries.splice(i, 1)
replacement[library] = null
}
}
state.followsByLibrary = replacement
state.count = state.followedLibraries.length
},
reset (state) {
state.followedLibraries = []
state.followsByLibrary = {}
state.count = 0
},
},
getters: {
follow: (state) => (library) => {
return state.followsByLibrary[library]
}
},
actions: {
set ({commit, state}, {uuid, value}) {
if (value) {
return axios.post(`federation/follows/library/`, {target: uuid}).then((response) => {
logger.default.info('Successfully subscribed to library')
commit('follows', {library: uuid, follow: response.data})
}, (response) => {
logger.default.info('Error while subscribing to library')
commit('follows', {library: uuid, follow: null})
})
} else {
let follow = state.followsByLibrary[uuid]
return axios.delete(`federation/follows/library/${follow.uuid}/`).then((response) => {
logger.default.info('Successfully unsubscribed from library')
commit('follows', {library: uuid, follow: null})
}, (response) => {
logger.default.info('Error while unsubscribing from library')
commit('follows', {library: uuid, follow: follow})
})
}
},
toggle ({getters, dispatch}, uuid) {
dispatch('set', {uuid, value: !getters['follow'](uuid)})
},
fetchFollows ({dispatch, state, commit, rootState}, url) {
let promise = axios.get('federation/follows/library/all/')
return promise.then((response) => {
response.data.results.forEach(result => {
commit('follows', {library: result.library, follow: result})
})
})
}
}
}