Support System theme
This commit is contained in:
parent
0fd17f2863
commit
4e7c5b5819
|
@ -86,8 +86,17 @@ const SoapboxMount = () => {
|
|||
const [localeLoading, setLocaleLoading] = useState(true);
|
||||
const [isLoaded, setIsLoaded] = useState(false);
|
||||
|
||||
const colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: dark)');
|
||||
const [isSystemDarkMode, setSystemDarkMode] = useState(colorSchemeQueryList.matches);
|
||||
const userTheme = settings.get('themeMode');
|
||||
const darkMode = userTheme === 'dark' || (userTheme === 'system' && isSystemDarkMode);
|
||||
|
||||
const themeCss = generateThemeCss(soapboxConfig);
|
||||
|
||||
const handleSystemModeChange = (event: MediaQueryListEvent) => {
|
||||
setSystemDarkMode(event.matches);
|
||||
};
|
||||
|
||||
// Load the user's locale
|
||||
useEffect(() => {
|
||||
MESSAGES[locale]().then(messages => {
|
||||
|
@ -105,6 +114,12 @@ const SoapboxMount = () => {
|
|||
});
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
colorSchemeQueryList.addEventListener('change', handleSystemModeChange);
|
||||
|
||||
return () => colorSchemeQueryList.removeEventListener('change', handleSystemModeChange);
|
||||
}, []);
|
||||
|
||||
// @ts-ignore: I don't actually know what these should be, lol
|
||||
const shouldUpdateScroll = (prevRouterProps, { location }) => {
|
||||
return !(location.state?.soapboxModalKey && location.state?.soapboxModalKey !== prevRouterProps?.location?.state?.soapboxModalKey);
|
||||
|
@ -128,7 +143,7 @@ const SoapboxMount = () => {
|
|||
return (
|
||||
<IntlProvider locale={locale} messages={messages}>
|
||||
<Helmet>
|
||||
<html lang={locale} className={classNames({ dark: settings.get('themeMode') === 'dark' })} />
|
||||
<html lang={locale} className={classNames({ dark: darkMode })} />
|
||||
<body className={bodyClass} />
|
||||
{themeCss && <style id='theme' type='text/css'>{`:root{${themeCss}}`}</style>}
|
||||
<meta name='theme-color' content={soapboxConfig.brandColor} />
|
||||
|
@ -147,7 +162,7 @@ const SoapboxMount = () => {
|
|||
return (
|
||||
<IntlProvider locale={locale} messages={messages}>
|
||||
<Helmet>
|
||||
<html lang={locale} className={classNames({ dark: settings.get('themeMode') === 'dark' })} />
|
||||
<html lang={locale} className={classNames({ dark: darkMode })} />
|
||||
<body className={bodyClass} />
|
||||
{themeCss && <style id='theme' type='text/css'>{`:root{${themeCss}}`}</style>}
|
||||
<meta name='theme-color' content={soapboxConfig.brandColor} />
|
||||
|
|
Loading…
Reference in New Issue