From ca4f78120cdbcec855ed13335fe1267b8290b7cc Mon Sep 17 00:00:00 2001 From: Daniel Shleifman Date: Sat, 26 Jun 2021 21:47:33 +0300 Subject: [PATCH] added theme switcher --- web/src/components/App/index.jsx | 11 ++++++++--- .../TorrentCache/index.jsx | 3 ++- web/src/style/materialUISetup.js | 19 ++++++++++--------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/web/src/components/App/index.jsx b/web/src/components/App/index.jsx index 66fe88d..d40b350 100644 --- a/web/src/components/App/index.jsx +++ b/web/src/components/App/index.jsx @@ -82,9 +82,14 @@ export default function App() { > { - currentThemeMode === THEME_MODES.LIGHT && setCurrentThemeMode(THEME_MODES.DARK) - currentThemeMode === THEME_MODES.DARK && setCurrentThemeMode(THEME_MODES.AUTO) - currentThemeMode === THEME_MODES.AUTO && setCurrentThemeMode(THEME_MODES.LIGHT) + const updateThemeMode = mode => { + setCurrentThemeMode(mode) + localStorage.setItem('themeMode', mode) + } + + if (currentThemeMode === THEME_MODES.LIGHT) updateThemeMode(THEME_MODES.DARK) + if (currentThemeMode === THEME_MODES.DARK) updateThemeMode(THEME_MODES.AUTO) + if (currentThemeMode === THEME_MODES.AUTO) updateThemeMode(THEME_MODES.LIGHT) }} > {currentThemeMode === THEME_MODES.LIGHT ? ( diff --git a/web/src/components/DialogTorrentDetailsContent/TorrentCache/index.jsx b/web/src/components/DialogTorrentDetailsContent/TorrentCache/index.jsx index b66e6b8..fce00ce 100644 --- a/web/src/components/DialogTorrentDetailsContent/TorrentCache/index.jsx +++ b/web/src/components/DialogTorrentDetailsContent/TorrentCache/index.jsx @@ -3,6 +3,7 @@ import { useState, memo, useRef, useEffect, useContext } from 'react' import { useTranslation } from 'react-i18next' import isEqual from 'lodash/isEqual' import { DarkModeContext } from 'components/App' +import { THEME_MODES } from 'style/materialUISetup' import { useCreateCacheMap } from '../customHooks' import getShortCacheMap from './getShortCacheMap' @@ -18,7 +19,7 @@ const TorrentCache = ({ cache, isMini }) => { const cacheMap = useCreateCacheMap(cache) const settingsTarget = isMini ? 'mini' : 'default' const { isDarkMode } = useContext(DarkModeContext) - const theme = isDarkMode ? 'dark' : 'light' + const theme = isDarkMode ? THEME_MODES.DARK : THEME_MODES.LIGHT const { readerColor, diff --git a/web/src/style/materialUISetup.js b/web/src/style/materialUISetup.js index dada4a7..4587cfe 100644 --- a/web/src/style/materialUISetup.js +++ b/web/src/style/materialUISetup.js @@ -3,35 +3,36 @@ import { useEffect, useMemo, useState } from 'react' import { mainColors } from './colors' +export const THEME_MODES = { LIGHT: 'light', DARK: 'dark', AUTO: 'auto' } + const typography = { fontFamily: 'Open Sans, sans-serif' } export const darkTheme = createMuiTheme({ typography, palette: { - type: 'dark', + type: THEME_MODES.DARK, primary: { main: mainColors.dark.primary }, }, }) export const lightTheme = createMuiTheme({ typography, palette: { - type: 'light', + type: THEME_MODES.LIGHT, primary: { main: mainColors.light.primary }, }, }) -export const THEME_MODES = { LIGHT: 'light', DARK: 'dark', AUTO: 'auto' } - export const useMaterialUITheme = () => { - const currentModeState = useMediaQuery('(prefers-color-scheme: dark)') - const [isDarkMode, setIsDarkMode] = useState(currentModeState) - const [currentThemeMode, setCurrentThemeMode] = useState(THEME_MODES.LIGHT) + const savedThemeMode = localStorage.getItem('themeMode') + const isSystemModeDark = useMediaQuery('(prefers-color-scheme: dark)') + const [isDarkMode, setIsDarkMode] = useState(savedThemeMode === 'dark' || isSystemModeDark) + const [currentThemeMode, setCurrentThemeMode] = useState(savedThemeMode || THEME_MODES.LIGHT) useEffect(() => { currentThemeMode === THEME_MODES.LIGHT && setIsDarkMode(false) currentThemeMode === THEME_MODES.DARK && setIsDarkMode(true) - currentThemeMode === THEME_MODES.AUTO && setIsDarkMode(currentModeState) - }, [currentModeState, currentThemeMode]) + currentThemeMode === THEME_MODES.AUTO && setIsDarkMode(isSystemModeDark) + }, [isSystemModeDark, currentThemeMode]) const theme = isDarkMode ? THEME_MODES.DARK : THEME_MODES.LIGHT