2021-02-10 19:39:46 -09:00
|
|
|
import api from "../../api";
|
2021-01-07 22:45:24 -06:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2021-01-07 22:45:24 -06:00
|
|
|
const state = {
|
|
|
|
activeTheme: {},
|
2021-01-07 21:41:14 -09:00
|
|
|
darkMode: "system",
|
2021-01-17 22:22:54 -09:00
|
|
|
isDark: false,
|
2021-01-07 22:45:24 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
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);
|
2021-01-07 22:45:24 -06:00
|
|
|
|
|
|
|
if (isDark !== null) {
|
|
|
|
Vuetify.framework.theme.dark = isDark;
|
2021-01-17 22:22:54 -09:00
|
|
|
state.isDark = isDark;
|
2021-01-07 22:45:24 -06:00
|
|
|
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);
|
2021-01-07 22:45:24 -06:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
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);
|
2021-01-07 22:45:24 -06:00
|
|
|
Vuetify.framework.theme.themes.dark = getters.getActiveTheme.colors;
|
|
|
|
Vuetify.framework.theme.themes.light = getters.getActiveTheme.colors;
|
|
|
|
}
|
|
|
|
},
|
2021-01-07 21:41:14 -09:00
|
|
|
};
|
2021-01-07 22:45:24 -06:00
|
|
|
|
|
|
|
const getters = {
|
2021-02-10 19:39:46 -09:00
|
|
|
getActiveTheme: (state) => state.activeTheme,
|
|
|
|
getDarkMode: (state) => state.darkMode,
|
|
|
|
getIsDark: (state) => state.isDark,
|
2021-01-07 21:41:14 -09:00
|
|
|
};
|
2021-01-07 22:45:24 -06:00
|
|
|
|
|
|
|
export default {
|
|
|
|
state,
|
|
|
|
mutations,
|
|
|
|
actions,
|
2021-01-07 21:41:14 -09:00
|
|
|
getters,
|
|
|
|
};
|