forked from kaverti/website
178 lines
4.1 KiB
JavaScript
178 lines
4.1 KiB
JavaScript
import Vue from 'vue'
|
|
import Vuex from 'vuex'
|
|
|
|
import thread from './modules/thread'
|
|
import category from './modules/category'
|
|
import moderation from './modules/moderation'
|
|
|
|
Vue.use(Vuex)
|
|
|
|
export default new Vuex.Store({
|
|
state: {
|
|
meta: {
|
|
name: '',
|
|
title: '',
|
|
RegistrationsDisabled: '',
|
|
gateway: '',
|
|
categories: [
|
|
{ name: 'All', value: 'ALL', color: '#1565C0' }
|
|
]
|
|
},
|
|
accountTabs: 0,
|
|
accountModal: false,
|
|
username: '',
|
|
admin: false,
|
|
koins: '',
|
|
email: '',
|
|
emailVerified: true,
|
|
clientVersion: '0.172-stable',
|
|
latestClientVersion: '',
|
|
developerMode: false,
|
|
theme: '',
|
|
|
|
token: null,
|
|
passkey: "register",
|
|
|
|
show404Page: false,
|
|
showConnModal: false,
|
|
|
|
ajaxErrors: [],
|
|
ajaxErrorsModal: false,
|
|
|
|
MinQueryLength: 2
|
|
},
|
|
getters: {
|
|
categoriesWithoutAll(state) {
|
|
let categories =
|
|
state.meta.categories
|
|
.filter(category => ['ALL', 'OTHER'].indexOf(category.value) === -1)
|
|
|
|
categories.unshift({
|
|
name: 'Select a category',
|
|
disabled: true
|
|
})
|
|
|
|
return categories.filter(category => category.value !== 'ALL')
|
|
},
|
|
title(state) {
|
|
if (state.meta.title.trim().length) {
|
|
return state.meta.title + ' - ' + state.meta.name
|
|
} else {
|
|
return state.meta.name
|
|
}
|
|
},
|
|
alphabetizedCategories(state) {
|
|
return state.meta.categories.sort((a, b) => {
|
|
if (a.name === 'All') return -1
|
|
if (a.name === 'Other' || b.name === 'Other') return -1
|
|
|
|
if (a.name < b.name) {
|
|
return -1
|
|
} else if (a.name > b.name) {
|
|
return 1
|
|
}
|
|
|
|
return 0
|
|
})
|
|
}
|
|
},
|
|
actions: {
|
|
setTitle({ getters, state }, value) {
|
|
document.title = getters.title
|
|
state.meta.title = value
|
|
}
|
|
},
|
|
mutations: {
|
|
setToken(state, token) {
|
|
state.token = token
|
|
},
|
|
setLatestVersion(state, latestClientVersion) {
|
|
state.latestClientVersion = latestClientVersion
|
|
},
|
|
setAPIVersion(state, latestAPIVersion) {
|
|
state.latestAPIVersion = latestAPIVersion
|
|
},
|
|
setPassKey(state, passkey) {
|
|
state.passkey = passkey
|
|
},
|
|
setTheme(state, theme) {
|
|
state.theme = theme
|
|
},
|
|
set404Page(state, value) {
|
|
state.show404Page = value
|
|
},
|
|
setAccountTabs(state, index) {
|
|
state.accountTabs = index;
|
|
},
|
|
setSelectOptions(state, payload) {
|
|
state.selectOptions[payload.name] = payload.value;
|
|
},
|
|
setAccountModalState(state, value) {
|
|
state.accountModal = value;
|
|
},
|
|
setGateway(state, value) {
|
|
state.gateway = value;
|
|
},
|
|
setDevMode(state, value) {
|
|
state.developerMode = value;
|
|
},
|
|
showConnModal(state, value) {
|
|
state.connModal = value;
|
|
},
|
|
setConnModal(state, value) {
|
|
state.connModal = value
|
|
},
|
|
setAjaxErrorsModalState(state, value) {
|
|
state.ajaxErrorsModal = value;
|
|
},
|
|
setAjaxErrors(state, value) {
|
|
state.ajaxErrors = value
|
|
},
|
|
setUsername(state, value) {
|
|
state.username = value
|
|
},
|
|
setKoins(state, value) {
|
|
state.koins = value
|
|
},
|
|
setAdmin(state, value) {
|
|
state.admin = value
|
|
},
|
|
setEmail(state, value) {
|
|
state.email = value
|
|
},
|
|
setEmailVerified(state, value) {
|
|
state.emailVerified = value
|
|
},
|
|
setSettings(state, value) {
|
|
state.meta.name = value.siteName
|
|
state.meta.description = value.siteDesc
|
|
state.meta.showDescription = value.showDescription
|
|
state.meta.bannerEnabled = value.bannerEnabled
|
|
state.meta.bannerText = value.bannerText
|
|
state.meta.RegistrationsDisabled = value.RegistrationsDisabled
|
|
state.meta.logo = value.logo
|
|
state.meta.icon = value.icon
|
|
},
|
|
addCategories(state, value) {
|
|
if (Array.isArray(value)) {
|
|
state.meta.categories.push(...value)
|
|
} else {
|
|
state.meta.categories.push(value)
|
|
}
|
|
},
|
|
removeCategory(state, id) {
|
|
let category = state.meta.categories.filter(c => c.id === id)
|
|
let index = state.meta.categories.indexOf(category)
|
|
|
|
state.meta.categories.splice(index, 1)
|
|
},
|
|
updateCategory(state, updated) {
|
|
let category = state.meta.categories.filter(c => c.id === updated.id)
|
|
let index = state.meta.categories.indexOf(category)
|
|
|
|
state.meta.categories.splice(index, 1, updated)
|
|
}
|
|
},
|
|
modules: { thread, category, moderation }
|
|
})
|