Files
Piped-Material/src/store/prefs-store.js
T
2021-11-04 21:25:27 +05:30

80 lines
1.7 KiB
JavaScript

import { get as _get, isString, set as _set } from 'lodash-es'
const PrefsStore = {
namespaced: true,
state: () => ({
// Declaring boolean values here because v-simple-checkbox has a bug (???) which renders it unable to have internal state
prefs: {
playerAutoplay: true,
autoplay: false,
listen: false
}
}),
mutations: {
setPrefs (state, {
id,
value
}) {
_set(state.prefs, id, value)
window.localStorage.setItem('PREFERENCES', JSON.stringify(state.prefs))
},
replacePrefs (state, nextPrefs) {
state.prefs = nextPrefs
}
},
actions: {
loadState ({ commit }) {
try {
const jv = window.localStorage.getItem('PREFERENCES')
if (isString(jv) && jv.length !== 0) {
const p = JSON.parse(jv)
commit('replacePrefs', p)
}
} catch (e) {
console.log('Error:', e)
}
}
},
getters: {
getPreference: state => (id, default_) => {
return _get(state.prefs, id, default_)
},
getPreferenceBoolean: (_, getters) => (...args) => {
const v = getters.getPreference(...args)
switch (v) {
case 'true':
case true:
case '1':
case 'on':
case 'yes':
return true
default:
return false
}
},
getPreferenceNumber: (_, getters) => (id, default_) => {
const v = getters.getPreference(id, default_)
const n = Number(v)
if (!Number.isFinite(n)) {
return default_
} else {
return n
}
},
apiUrl (state, getters) {
return getters.getPreference('instance', process.env.VUE_APP_PIPED_URL ?? 'https://pipedapi.kavin.rocks')
}
}
}
export {
PrefsStore
}