2cdf5ae75b
### Description This pull request resolves an issue where the application switched to light mode after login even when the user’s system was set to dark mode. Before authentication the app correctly followed system preferences through CSS media queries, but that behavior broke once the user logged in. **Before** https://github.com/user-attachments/assets/75e73712-9cb2-42f9-9e25-3a22dc911b8d **After** https://github.com/user-attachments/assets/6bba45ce-3817-4e3d-9b45-ff0c7725cf82
41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
import { ThemeProvider } from '@emotion/react';
|
|
import { createContext } from 'react';
|
|
|
|
import { useSystemColorScheme } from '@/ui/theme/hooks/useSystemColorScheme';
|
|
import { persistedColorSchemeState } from '@/ui/theme/states/persistedColorSchemeState';
|
|
import { useRecoilState } from 'recoil';
|
|
import { type ColorScheme } from 'twenty-ui/input';
|
|
import { THEME_DARK, THEME_LIGHT, ThemeContextProvider } from 'twenty-ui/theme';
|
|
|
|
type BaseThemeProviderProps = {
|
|
children: JSX.Element | JSX.Element[];
|
|
};
|
|
|
|
export const ThemeSchemeContext = createContext<(theme: ColorScheme) => void>(
|
|
() => {},
|
|
);
|
|
|
|
export const BaseThemeProvider = ({ children }: BaseThemeProviderProps) => {
|
|
const [persistedColorScheme, setPersistedColorScheme] = useRecoilState(
|
|
persistedColorSchemeState,
|
|
);
|
|
const systemColorScheme = useSystemColorScheme();
|
|
const effectiveColorScheme =
|
|
persistedColorScheme === 'System'
|
|
? systemColorScheme
|
|
: persistedColorScheme;
|
|
|
|
document.documentElement.className =
|
|
effectiveColorScheme === 'Dark' ? 'dark' : 'light';
|
|
|
|
const theme = effectiveColorScheme === 'Dark' ? THEME_DARK : THEME_LIGHT;
|
|
|
|
return (
|
|
<ThemeSchemeContext.Provider value={setPersistedColorScheme}>
|
|
<ThemeProvider theme={theme}>
|
|
<ThemeContextProvider theme={theme}>{children}</ThemeContextProvider>
|
|
</ThemeProvider>
|
|
</ThemeSchemeContext.Provider>
|
|
);
|
|
};
|