funkwhale/front/src/store/channels.js

87 wiersze
2.4 KiB
JavaScript

import axios from 'axios'
import logger from '@/logging'
export default {
namespaced: true,
state: {
subscriptions: [],
count: 0,
showUploadModal: false,
latestPublication: null,
uploadModalConfig: {
channel: null
}
},
mutations: {
subscriptions: (state, { uuid, value }) => {
if (value) {
if (state.subscriptions.indexOf(uuid) === -1) {
state.subscriptions.push(uuid)
}
} else {
const i = state.subscriptions.indexOf(uuid)
if (i > -1) {
state.subscriptions.splice(i, 1)
}
}
state.count = state.subscriptions.length
},
reset (state) {
state.subscriptions = []
state.count = 0
},
showUploadModal (state, value) {
state.showUploadModal = value.show
if (value.config) {
state.uploadModalConfig = {
...value.config
}
}
},
publish (state, { uploads, channel }) {
state.latestPublication = {
date: new Date(),
uploads,
channel
}
state.showUploadModal = false
}
},
getters: {
isSubscribed: (state) => (uuid) => {
return state.subscriptions.indexOf(uuid) > -1
}
},
actions: {
set ({ commit, state }, { uuid, value }) {
commit('subscriptions', { uuid, value })
if (value) {
return axios.post(`channels/${uuid}/subscribe/`).then((response) => {
logger.default.info('Successfully subscribed to channel')
}, (response) => {
logger.default.info('Error while subscribing to channel')
commit('subscriptions', { uuid, value: !value })
})
} else {
return axios.post(`channels/${uuid}/unsubscribe/`).then((response) => {
logger.default.info('Successfully unsubscribed from channel')
}, (response) => {
logger.default.info('Error while unsubscribing from channel')
commit('subscriptions', { uuid, value: !value })
})
}
},
toggle ({ getters, dispatch }, uuid) {
dispatch('set', { uuid, value: !getters.isSubscribed(uuid) })
},
fetchSubscriptions ({ dispatch, state, commit, rootState }, url) {
const promise = axios.get('subscriptions/all/')
return promise.then((response) => {
response.data.results.forEach(result => {
commit('subscriptions', { uuid: result.channel, value: true })
})
})
}
}
}