You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.1 KiB
JavaScript
132 lines
3.1 KiB
JavaScript
import Vue from 'vue'
|
|
import Vuex from 'vuex'
|
|
import axios from 'axios'
|
|
import timezones from 'countries-and-timezones'
|
|
|
|
Vue.use(Vuex)
|
|
|
|
const store = new Vuex.Store({
|
|
state: {
|
|
stats: {},
|
|
settings: {},
|
|
notifications: {},
|
|
},
|
|
mutations: {
|
|
setStats (state, payload) {
|
|
state.stats = payload
|
|
},
|
|
setSettings (state, payload) {
|
|
state.settings = payload
|
|
},
|
|
notification (state, payload) {
|
|
state.notifications = payload
|
|
},
|
|
updateSettings (state, payload) {
|
|
const commit = { ...state.settings }
|
|
|
|
Object.keys(payload).forEach(group => {
|
|
if (commit[group]) {
|
|
commit[group] = { ...commit[group], ...payload[group] }
|
|
}
|
|
})
|
|
|
|
state.settings = commit
|
|
},
|
|
},
|
|
actions: {
|
|
async loadStats ({ commit }) {
|
|
try {
|
|
const response = await axios.get('/stats')
|
|
commit('setStats', response.data)
|
|
} catch (error) {
|
|
commit('setStats', {})
|
|
}
|
|
},
|
|
async loadSettings ({ commit }) {
|
|
try {
|
|
const response = await axios.get('/api/settings')
|
|
commit('setSettings', response.data)
|
|
} catch (error) {
|
|
commit('setSettings', {})
|
|
}
|
|
},
|
|
async saveSettings ({ commit, state }) {
|
|
try {
|
|
await axios.put('/api/settings', state.settings, {
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
})
|
|
commit('notification', 'settings saved')
|
|
} catch (error) {
|
|
console.warn(error)
|
|
}
|
|
},
|
|
},
|
|
getters: {
|
|
isSettingSupported: (state) => (key) => {
|
|
const getDescendantProp = (obj, path) => {
|
|
const arr = path.split(/[.[]['"]?/)
|
|
let o = obj
|
|
while (arr.length && o) {
|
|
o = o[arr.shift().replace(/['"]?]$/, '')]
|
|
}
|
|
return o
|
|
}
|
|
|
|
return getDescendantProp(state.settings, key) !== undefined
|
|
},
|
|
getAvailableLanguages () {
|
|
const list = []
|
|
// const en = languages.en
|
|
|
|
list.push({
|
|
code: 'EN',
|
|
name: 'English',
|
|
native: 'English',
|
|
})
|
|
|
|
/*
|
|
Object.keys(languages).forEach((code) => {
|
|
list.push({
|
|
code: code,
|
|
name: languages[code].name,
|
|
native: languages[code].native,
|
|
})
|
|
})
|
|
*/
|
|
return list
|
|
},
|
|
|
|
getAvailableCountries () {
|
|
return Object.values(timezones.getAllCountries())
|
|
},
|
|
|
|
getAvailableTimezones () {
|
|
return Object.values(timezones.getAllTimezones())
|
|
},
|
|
getAvailableTimezone: () => (countryCode) => {
|
|
return timezones.getCountry(countryCode)
|
|
},
|
|
getTimezoneByCountry: () => (country) => {
|
|
return timezones.getTimezonesForCountry(country)
|
|
},
|
|
getTimezone: () => (timezone) => {
|
|
return timezones.getTimezone(timezone)
|
|
},
|
|
getFSUsage: (state) => {
|
|
return Math.round(
|
|
(100 / state.stats.device.fs.total) * state.stats.device.fs.used,
|
|
)
|
|
},
|
|
getMemoryUsage: (state) => {
|
|
return Math.round(
|
|
(100 / state.stats.device.heap.total) * state.stats.device.heap.free,
|
|
)
|
|
},
|
|
|
|
},
|
|
})
|
|
|
|
export default store
|