1
0
Fork 0
mirror of https://github.com/mealie-recipes/mealie.git synced 2025-07-28 09:39:41 +02:00
mealie/frontend/src/store/modules/userSettings.js

71 lines
1.8 KiB
JavaScript
Raw Normal View History

import api from "../../api";
import Vuetify from "../../plugins/vuetify";
2021-01-07 21:41:14 -09:00
function inDarkMode(payload) {
let isDark;
if (payload === "system") {
//Get System Preference from browser
const darkMediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
isDark = darkMediaQuery.matches;
} else if (payload === "dark") isDark = true;
else if (payload === "light") isDark = false;
return isDark;
}
const state = {
activeTheme: {},
2021-01-07 21:41:14 -09:00
darkMode: "system",
};
const mutations = {
setTheme(state, payload) {
Vuetify.framework.theme.themes.dark = payload.colors;
Vuetify.framework.theme.themes.light = payload.colors;
state.activeTheme = payload;
},
setDarkMode(state, payload) {
2021-01-07 21:41:14 -09:00
let isDark = inDarkMode(payload);
if (isDark !== null) {
Vuetify.framework.theme.dark = isDark;
state.darkMode = payload;
}
},
};
const actions = {
async resetTheme({ commit }) {
const defaultTheme = await api.themes.requestByName("default");
if (defaultTheme.colors) {
Vuetify.framework.theme.themes.dark = defaultTheme.colors;
Vuetify.framework.theme.themes.light = defaultTheme.colors;
2021-01-07 21:41:14 -09:00
commit("setTheme", defaultTheme);
}
},
async initTheme({ dispatch, getters }) {
//If theme is empty resetTheme
if (Object.keys(getters.getActiveTheme).length === 0) {
2021-01-07 21:41:14 -09:00
await dispatch("resetTheme");
} else {
Vuetify.framework.theme.dark = inDarkMode(getters.getDarkMode);
Vuetify.framework.theme.themes.dark = getters.getActiveTheme.colors;
Vuetify.framework.theme.themes.light = getters.getActiveTheme.colors;
}
},
2021-01-07 21:41:14 -09:00
};
const getters = {
getActiveTheme: (state) => state.activeTheme,
2021-01-07 21:41:14 -09:00
getDarkMode: (state) => state.darkMode,
};
export default {
state,
mutations,
actions,
2021-01-07 21:41:14 -09:00
getters,
};