import defaultSettings from "@/settings";
|
import { useColorMode, usePreferredDark } from "@vueuse/core";
|
import { useDynamicTitle } from "@/utils/dynamicTitle";
|
|
const preferredDark = usePreferredDark();
|
const colorMode = useColorMode({
|
emitAuto: true,
|
});
|
|
const {
|
sideTheme,
|
showSettings,
|
topNav,
|
tagsView,
|
fixedHeader,
|
sidebarLogo,
|
dynamicTitle,
|
darkMode,
|
} = defaultSettings;
|
|
const storageSetting = JSON.parse(localStorage.getItem("layout-setting") || "{}");
|
const defaultDarkMode = darkMode || "auto";
|
const initialDarkMode = storageSetting.darkMode || defaultDarkMode;
|
colorMode.value = initialDarkMode;
|
const getIsDark = (mode) => mode === "dark" || (mode === "auto" && preferredDark.value);
|
|
const useSettingsStore = defineStore("settings", () => {
|
const title = ref("");
|
const theme = ref(storageSetting.theme || "#002fa7");
|
const sideThemeValue = ref(storageSetting.sideTheme || sideTheme);
|
const showSettingsValue = ref(showSettings);
|
const topNavValue = ref(
|
storageSetting.topNav === undefined ? topNav : storageSetting.topNav
|
);
|
const tagsViewValue = ref(
|
storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView
|
);
|
const fixedHeaderValue = ref(
|
storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader
|
);
|
const sidebarLogoValue = ref(
|
storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo
|
);
|
const dynamicTitleValue = ref(
|
storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle
|
);
|
const darkModeValue = ref(initialDarkMode);
|
const isDark = computed(() => getIsDark(darkModeValue.value));
|
|
function changeSetting(data) {
|
const { key, value } = data;
|
const settingMap = {
|
title,
|
theme,
|
sideTheme: sideThemeValue,
|
showSettings: showSettingsValue,
|
topNav: topNavValue,
|
tagsView: tagsViewValue,
|
fixedHeader: fixedHeaderValue,
|
sidebarLogo: sidebarLogoValue,
|
dynamicTitle: dynamicTitleValue,
|
darkMode: darkModeValue,
|
};
|
if (Object.prototype.hasOwnProperty.call(settingMap, key)) {
|
settingMap[key].value = value;
|
if (key === "darkMode") {
|
colorMode.value = value;
|
}
|
}
|
}
|
|
function setTitle(value) {
|
title.value = value;
|
useDynamicTitle();
|
}
|
|
function setDarkMode(mode) {
|
darkModeValue.value = mode;
|
colorMode.value = mode;
|
}
|
|
function toggleTheme() {
|
setDarkMode(isDark.value ? "light" : "dark");
|
}
|
|
return {
|
title,
|
theme,
|
sideTheme: sideThemeValue,
|
showSettings: showSettingsValue,
|
topNav: topNavValue,
|
tagsView: tagsViewValue,
|
fixedHeader: fixedHeaderValue,
|
sidebarLogo: sidebarLogoValue,
|
dynamicTitle: dynamicTitleValue,
|
darkMode: darkModeValue,
|
isDark,
|
changeSetting,
|
setTitle,
|
setDarkMode,
|
toggleTheme,
|
};
|
});
|
|
export default useSettingsStore;
|