import { defineStore } from 'pinia'; import defaultSettings from '@/settings'; import { SettingTypeEnum } from '@/enums/SettingTypeEnum'; import { useDynamicTitle } from '@/utils/dynamicTitle'; import { Ref } from 'vue'; export const useSettingsStore = defineStore('setting', () => { const storageSetting = JSON.parse(localStorage.getItem('layout-setting') || '{}'); const prop: { [key: string]: Ref } = { title: ref(''), theme: ref(storageSetting.theme || defaultSettings.theme), sideTheme: ref(storageSetting.sideTheme || defaultSettings.sideTheme), showSettings: ref(storageSetting.showSettings), topNav: ref(storageSetting.topNav || defaultSettings.topNav), tagsView: ref(storageSetting.tagsView || defaultSettings.tagsView), fixedHeader: ref(storageSetting.fixedHeader || defaultSettings.fixedHeader), sidebarLogo: ref(storageSetting.sidebarLogo || defaultSettings.sidebarLogo), dynamicTitle: ref(storageSetting.dynamicTitle || defaultSettings.dynamicTitle), animationEnable: ref(storageSetting.animationEnable || defaultSettings.animationEnable), dark: ref(storageSetting.dark || defaultSettings.dark) }; const { title, theme, sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle, animationEnable, dark } = prop; // actions const changeSetting = (param: { key: SettingTypeEnum; value: any }) => { const { key, value } = param; if (key in prop) { prop[key].value = value; } }; const setTitle = (value: string) => { title.value = value; useDynamicTitle(); }; return { title, theme, sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle, animationEnable, dark, changeSetting, setTitle }; }); export default useSettingsStore;