diff --git a/client/src/components/App/index.js b/client/src/components/App/index.js index 3d2db100..d59f985f 100644 --- a/client/src/components/App/index.js +++ b/client/src/components/App/index.js @@ -165,8 +165,7 @@ const App = () => { } const colorSchemeMedia = window.matchMedia('(prefers-color-scheme: dark)'); - const prefersDark = colorSchemeMedia.matches; - setUITheme(prefersDark ? THEMES.dark : THEMES.light); + setUITheme(theme); if (colorSchemeMedia.addEventListener !== undefined) { colorSchemeMedia.addEventListener('change', (e) => { diff --git a/client/src/components/ui/Footer.js b/client/src/components/ui/Footer.js index 014c8fd1..2cfe14ca 100644 --- a/client/src/components/ui/Footer.js +++ b/client/src/components/ui/Footer.js @@ -33,14 +33,18 @@ const Footer = () => { const { t } = useTranslation(); const dispatch = useDispatch(); - const currentTheme = useSelector((state) => (state.dashboard ? state.dashboard.theme : 'auto')); - const profileName = useSelector((state) => (state.dashboard ? state.dashboard.name : '')); + const currentTheme = useSelector((state) => ( + state.dashboard ? state.dashboard.theme : THEMES.auto + )); + const profileName = useSelector((state) => ( + state.dashboard ? state.dashboard.name : '' + )); const isLoggedIn = profileName !== ''; - const [currentThemeLocal, setCurrentThemeLocal] = useState('auto'); + const [currentThemeLocal, setCurrentThemeLocal] = useState(THEMES.auto); useEffect(() => { if (!isLoggedIn) { - setUITheme(window.matchMedia('(prefers-color-scheme: dark)').matches ? THEMES.dark : THEMES.light); + setUITheme(currentThemeLocal); } }, []); diff --git a/client/src/helpers/helpers.js b/client/src/helpers/helpers.js index d3c69054..3c1c606f 100644 --- a/client/src/helpers/helpers.js +++ b/client/src/helpers/helpers.js @@ -25,6 +25,7 @@ import { STANDARD_HTTPS_PORT, STANDARD_WEB_PORT, SPECIAL_FILTER_ID, + THEMES, } from './constants'; /** @@ -684,7 +685,14 @@ export const setHtmlLangAttr = (language) => { * @param theme */ export const setUITheme = (theme) => { - document.body.dataset.theme = theme; + let currentTheme = theme; + + if (currentTheme === THEMES.auto) { + const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; + currentTheme = prefersDark ? THEMES.dark : THEMES.light; + } + + document.body.dataset.theme = currentTheme; }; /** diff --git a/client/src/login/Login/index.js b/client/src/login/Login/index.js index 1603d24d..3bca509a 100644 --- a/client/src/login/Login/index.js +++ b/client/src/login/Login/index.js @@ -8,6 +8,7 @@ import * as actionCreators from '../../actions/login'; import logo from '../../components/ui/svg/logo.svg'; import Toasts from '../../components/Toasts'; import Footer from '../../components/ui/Footer'; +import Icons from '../../components/ui/Icons'; import Form from './Form'; import './Login.css'; @@ -69,6 +70,7 @@ class Login extends Component {