53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
|
|
import {
|
||
|
|
cloneDeep,
|
||
|
|
set,
|
||
|
|
} from 'lodash'
|
||
|
|
import { defineStore } from 'pinia'
|
||
|
|
import { toRaw } from 'vue'
|
||
|
|
|
||
|
|
import { useInstanceStore } from 'src/stores/instance'
|
||
|
|
|
||
|
|
import { defaultState as configDefaultState } from 'src/modules/default_config_state'
|
||
|
|
|
||
|
|
export const defaultState = {
|
||
|
|
prefsStorage: {
|
||
|
|
...configDefaultState,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export const useLocalConfigStore = defineStore('local_config', {
|
||
|
|
state() {
|
||
|
|
return cloneDeep(defaultState)
|
||
|
|
},
|
||
|
|
actions: {
|
||
|
|
set({ path, value }) {
|
||
|
|
set(this.prefsStorage, path, value)
|
||
|
|
},
|
||
|
|
unset({ path, value }) {
|
||
|
|
set(this.prefsStorage, path, undefined)
|
||
|
|
},
|
||
|
|
clearSyncConfig() {
|
||
|
|
const blankState = { ...cloneDeep(defaultState) }
|
||
|
|
Object.keys(this).forEach((k) => {
|
||
|
|
this.prefsStorage[k] = blankState[k]
|
||
|
|
})
|
||
|
|
},
|
||
|
|
},
|
||
|
|
getters: {
|
||
|
|
mergedConfig: (state) => {
|
||
|
|
const instancePrefs = useInstanceStore().prefsStorage
|
||
|
|
const result = Object.fromEntries(
|
||
|
|
Object.entries(state.prefsStorage).map(([k, v]) => [
|
||
|
|
k,
|
||
|
|
v ?? instancePrefs[k],
|
||
|
|
]),
|
||
|
|
)
|
||
|
|
return result
|
||
|
|
},
|
||
|
|
},
|
||
|
|
persist: {
|
||
|
|
afterLoad(state) {
|
||
|
|
return state
|
||
|
|
},
|
||
|
|
},
|
||
|
|
})
|