fix(theme): make preference state deterministic

This commit is contained in:
cesnimda
2026-08-09 18:35:31 +02:00
parent 378807b3b9
commit 11734ee058
8 changed files with 240 additions and 23 deletions
+25
View File
@@ -0,0 +1,25 @@
import React, { useLayoutEffect, useMemo } from "react";
import { CssBaseline } from "@mui/material";
import { CssVarsProvider, useColorScheme } from "@mui/material/styles";
import { getTheme } from "./theme";
import { resolveEffectiveThemeMode, ThemeModePref } from "./themePrefs";
function ThemeModeSynchronizer({ mode }: { mode: "light" | "dark" }) {
const { setMode } = useColorScheme();
useLayoutEffect(() => { setMode(mode); }, [mode, setMode]);
return null;
}
export default function JobTrackerThemeProvider({ preference, systemPrefersDark, children }: { preference: ThemeModePref; systemPrefersDark: boolean; children: React.ReactNode }) {
const mode = resolveEffectiveThemeMode(preference, systemPrefersDark);
const theme = useMemo(() => getTheme("light"), []);
return (
<CssVarsProvider theme={theme as any} defaultMode={mode} storageManager={null} disableTransitionOnChange>
<ThemeModeSynchronizer mode={mode} />
<CssBaseline enableColorScheme />
{children}
</CssVarsProvider>
);
}