perf(renderer): narrow theme store subscription
This commit is contained in:
parent
d10eeea269
commit
c90d8b9577
1 changed files with 7 additions and 4 deletions
|
|
@ -44,6 +44,12 @@ let systemThemeSnapshot: ResolvedTheme | null = null;
|
||||||
let systemThemeQuery: MediaQueryList | null = null;
|
let systemThemeQuery: MediaQueryList | null = null;
|
||||||
const systemThemeListeners = new Set<() => void>();
|
const systemThemeListeners = new Set<() => void>();
|
||||||
|
|
||||||
|
function selectConfiguredTheme(state: {
|
||||||
|
appConfig: { general?: { theme?: Theme } } | null;
|
||||||
|
}): Theme {
|
||||||
|
return state.appConfig?.general?.theme ?? 'system';
|
||||||
|
}
|
||||||
|
|
||||||
function getSystemThemeSnapshot(): ResolvedTheme {
|
function getSystemThemeSnapshot(): ResolvedTheme {
|
||||||
systemThemeSnapshot ??= readCachedResolvedTheme() ?? readSystemResolvedTheme();
|
systemThemeSnapshot ??= readCachedResolvedTheme() ?? readSystemResolvedTheme();
|
||||||
return systemThemeSnapshot;
|
return systemThemeSnapshot;
|
||||||
|
|
@ -89,10 +95,7 @@ export function useTheme(): {
|
||||||
isDark: boolean;
|
isDark: boolean;
|
||||||
isLight: boolean;
|
isLight: boolean;
|
||||||
} {
|
} {
|
||||||
const appConfig = useStore((s) => s.appConfig);
|
const configuredTheme = useStore(selectConfiguredTheme);
|
||||||
|
|
||||||
// Get configured theme
|
|
||||||
const configuredTheme: Theme = appConfig?.general?.theme ?? 'system';
|
|
||||||
const systemTheme = useSystemTheme();
|
const systemTheme = useSystemTheme();
|
||||||
const resolvedTheme = configuredTheme === 'system' ? systemTheme : configuredTheme;
|
const resolvedTheme = configuredTheme === 'system' ? systemTheme : configuredTheme;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue