import { defineStore } from 'pinia'; import defaultSettings from '@/settings'; import { SettingTypeEnum } from '@/enums/SettingTypeEnum'; import { useDynamicTitle } from '@/utils/dynamicTitle'; export const useSettingsStore = defineStore('setting', () => { const storageSetting = JSON.parse(localStorage.getItem('layout-setting') || '{}'); const title = ref(defaultSettings.title); const theme = ref(storageSetting.theme || defaultSettings.theme); const sideTheme = ref(storageSetting.sideTheme || defaultSettings.sideTheme); const showSettings = ref(storageSetting.showSettings || defaultSettings.showSettings); const topNav = ref(storageSetting.topNav === undefined ? defaultSettings.topNav : storageSetting.topNav); const tagsView = ref(storageSetting.tagsView === undefined ? defaultSettings.tagsView : storageSetting.tagsView); const fixedHeader = ref(storageSetting.fixedHeader === undefined ? defaultSettings.fixedHeader : storageSetting.fixedHeader); const sidebarLogo = ref(storageSetting.sidebarLogo === undefined ? defaultSettings.sidebarLogo : storageSetting.sidebarLogo); const dynamicTitle = ref(storageSetting.dynamicTitle === undefined ? defaultSettings.dynamicTitle : storageSetting.dynamicTitle); const animationEnable = ref( storageSetting.animationEnable === undefined ? defaultSettings.animationEnable : storageSetting.animationEnable ); const dark = ref(storageSetting.dark || defaultSettings.dark); const prop: { [key: string]: Ref } = { theme, sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle, animationEnable, dark }; // 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;