diff --git a/src/boot/after_store.js b/src/boot/after_store.js index b87ff8924..a3f22560e 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -34,6 +34,7 @@ import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.j import { useInterfaceStore } from 'src/stores/interface.js' import { useOAuthStore } from 'src/stores/oauth' import { useSyncConfigStore } from 'src/stores/sync_config.js' +import { useLocalConfigStore } from 'src/stores/local_config.js' import VBodyScrollLock from 'src/directives/body_scroll_lock' import { @@ -523,6 +524,8 @@ const afterStoreSetup = async ({ pinia, store, storageError, i18n }) => { useInterfaceStore().setLayoutWidth(windowWidth()) useInterfaceStore().setLayoutHeight(windowHeight()) + window.syncConfig = useSyncConfigStore() + window.localConfig = useLocalConfigStore() FaviconService.initFaviconService() initServiceWorker(store) diff --git a/src/stores/local_config.js b/src/stores/local_config.js new file mode 100644 index 000000000..78754f07b --- /dev/null +++ b/src/stores/local_config.js @@ -0,0 +1,53 @@ +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 + }, + }, +})