🐛 Fixes applying local themes to multi-pages (#774)

This commit is contained in:
Alicia Sykes 2022-06-30 23:21:48 +01:00
parent a2442c7349
commit ebf9c1f91a
3 changed files with 25 additions and 5 deletions

View File

@ -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 */

View File

@ -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);
}, },

View File

@ -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) {