mirror of https://github.com/Lissy93/dashy.git
🐛 Fixes applying local themes to multi-pages (#774)
This commit is contained in:
parent
a2442c7349
commit
ebf9c1f91a
|
@ -127,7 +127,8 @@ export default {
|
||||||
* Updates store, which will in turn update theme through watcher
|
* Updates store, which will in turn update theme through watcher
|
||||||
*/
|
*/
|
||||||
themeChanged() {
|
themeChanged() {
|
||||||
this.$store.commit(Keys.SET_THEME, this.selectedTheme);
|
const pageId = this.$store.state.currentConfigInfo?.pageId || null;
|
||||||
|
this.$store.commit(Keys.SET_THEME, { theme: this.selectedTheme, pageId });
|
||||||
this.updateTheme(this.selectedTheme);
|
this.updateTheme(this.selectedTheme);
|
||||||
},
|
},
|
||||||
/* Returns the initial theme */
|
/* Returns the initial theme */
|
||||||
|
|
|
@ -41,6 +41,7 @@ const HomeMixin = {
|
||||||
watch: {
|
watch: {
|
||||||
async $route() {
|
async $route() {
|
||||||
await this.getConfigForRoute();
|
await this.getConfigForRoute();
|
||||||
|
this.setTheme();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -52,8 +53,17 @@ const HomeMixin = {
|
||||||
this.$store.commit(Keys.USE_MAIN_CONFIG);
|
this.$store.commit(Keys.USE_MAIN_CONFIG);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
/* TEMPORARY: If on sub-page, check if custom theme is set and return it */
|
||||||
|
getSubPageTheme() {
|
||||||
|
if (!this.pageId || this.pageId === 'home') {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
const themeStoreKey = `${localStorageKeys.THEME}-${this.pageId}`;
|
||||||
|
return localStorage[themeStoreKey] || null;
|
||||||
|
}
|
||||||
|
},
|
||||||
setTheme() {
|
setTheme() {
|
||||||
const theme = GetTheme();
|
const theme = this.getSubPageTheme() || GetTheme();
|
||||||
ApplyLocalTheme(theme);
|
ApplyLocalTheme(theme);
|
||||||
ApplyCustomVariables(theme);
|
ApplyCustomVariables(theme);
|
||||||
},
|
},
|
||||||
|
|
15
src/store.js
15
src/store.js
|
@ -71,7 +71,14 @@ const store = new Vuex.Store({
|
||||||
return state.remoteConfig.pages || [];
|
return state.remoteConfig.pages || [];
|
||||||
},
|
},
|
||||||
theme(state) {
|
theme(state) {
|
||||||
return localStorage[localStorageKeys.THEME] || state.config.appConfig.theme;
|
let localTheme = null;
|
||||||
|
if (state.currentConfigInfo?.pageId) {
|
||||||
|
const themeStoreKey = `${localStorageKeys.THEME}-${state.currentConfigInfo?.pageId}`;
|
||||||
|
localTheme = localStorage[themeStoreKey];
|
||||||
|
} else {
|
||||||
|
localTheme = localStorage[localStorageKeys.THEME];
|
||||||
|
}
|
||||||
|
return localTheme || state.config.appConfig.theme;
|
||||||
},
|
},
|
||||||
webSearch(state, getters) {
|
webSearch(state, getters) {
|
||||||
return getters.appConfig.webSearch || {};
|
return getters.appConfig.webSearch || {};
|
||||||
|
@ -268,11 +275,13 @@ const store = new Vuex.Store({
|
||||||
config.sections = applyItemId(config.sections);
|
config.sections = applyItemId(config.sections);
|
||||||
state.config = config;
|
state.config = config;
|
||||||
},
|
},
|
||||||
[SET_THEME](state, theme) {
|
[SET_THEME](state, themOps) {
|
||||||
|
const { theme, pageId } = themOps;
|
||||||
const newConfig = { ...state.config };
|
const newConfig = { ...state.config };
|
||||||
newConfig.appConfig.theme = theme;
|
newConfig.appConfig.theme = theme;
|
||||||
state.config = newConfig;
|
state.config = newConfig;
|
||||||
localStorage.setItem(localStorageKeys.THEME, theme);
|
const themeStoreKey = pageId ? `${localStorageKeys.THEME}-${pageId}` : localStorageKeys.THEME;
|
||||||
|
localStorage.setItem(themeStoreKey, theme);
|
||||||
InfoHandler('Theme updated', InfoKeys.VISUAL);
|
InfoHandler('Theme updated', InfoKeys.VISUAL);
|
||||||
},
|
},
|
||||||
[SET_CUSTOM_COLORS](state, customColors) {
|
[SET_CUSTOM_COLORS](state, customColors) {
|
||||||
|
|
Loading…
Reference in New Issue