fix: theming
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
import { ref, watch } from 'vue';
|
||||
import { defineStore } from 'pinia';
|
||||
import { useUserStore } from './userStore';
|
||||
import { useTenantStore } from './tenantStore';
|
||||
|
||||
export type MenuMode = 'apps' | 'user-settings' | 'admin-settings';
|
||||
export type ThemeMode = 'light' | 'dark' | 'system';
|
||||
|
||||
export const useLayoutStore = defineStore('layout', () => {
|
||||
// Loading state
|
||||
@@ -10,13 +12,17 @@ export const useLayoutStore = defineStore('layout', () => {
|
||||
|
||||
// Sidebar state - initialize from settings or defaults
|
||||
const userStore = useUserStore();
|
||||
const tenantStore = useTenantStore();
|
||||
const sidebarDrawer = ref(userStore.getSetting('sidebar_drawer') ?? true);
|
||||
const miniSidebar = ref(userStore.getSetting('mini_sidebar') ?? false);
|
||||
const menuMode = ref<MenuMode>('apps');
|
||||
|
||||
// Theme state - initialize from settings or defaults
|
||||
const theme = ref(userStore.getSetting('theme') ?? 'light');
|
||||
const font = ref(userStore.getSetting('font') ?? 'Public sans');
|
||||
// Theme mode - user choice, falling back to the tenant default
|
||||
const theme = ref<ThemeMode>(
|
||||
(userStore.getSetting('theme') as ThemeMode | null) ??
|
||||
(tenantStore.getSetting('theme_default_mode') as ThemeMode | null) ??
|
||||
'light'
|
||||
);
|
||||
|
||||
// Watch and sync sidebar state to settings
|
||||
watch(sidebarDrawer, (value) => {
|
||||
@@ -31,10 +37,6 @@ export const useLayoutStore = defineStore('layout', () => {
|
||||
userStore.setSetting('theme', value);
|
||||
});
|
||||
|
||||
watch(font, (value) => {
|
||||
userStore.setSetting('font', value);
|
||||
});
|
||||
|
||||
// Actions
|
||||
function toggleSidebarDrawer() {
|
||||
sidebarDrawer.value = !sidebarDrawer.value;
|
||||
@@ -44,14 +46,10 @@ export const useLayoutStore = defineStore('layout', () => {
|
||||
miniSidebar.value = value;
|
||||
}
|
||||
|
||||
function setTheme(value: string) {
|
||||
function setTheme(value: ThemeMode) {
|
||||
theme.value = value;
|
||||
}
|
||||
|
||||
function setFont(value: string) {
|
||||
font.value = value;
|
||||
}
|
||||
|
||||
function setMenuMode(value: MenuMode) {
|
||||
menuMode.value = value;
|
||||
}
|
||||
@@ -71,14 +69,12 @@ export const useLayoutStore = defineStore('layout', () => {
|
||||
miniSidebar,
|
||||
menuMode,
|
||||
theme,
|
||||
font,
|
||||
|
||||
// Actions
|
||||
toggleSidebarDrawer,
|
||||
setMiniSidebar,
|
||||
setMenuMode,
|
||||
toggleMenuMode,
|
||||
setTheme,
|
||||
setFont
|
||||
setTheme
|
||||
};
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user