From 1e370817560c905a0a3520e245c317f308b6a5e7 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Tue, 1 Feb 2022 15:15:55 +0100 Subject: chore: add a new settings to handle prism theme from toolbar --- .../Settings/PrismThemeToggle/PrismThemeToggle.tsx | 49 ++++++++++++++++++++++ src/components/Settings/Settings.tsx | 2 + 2 files changed, 51 insertions(+) create mode 100644 src/components/Settings/PrismThemeToggle/PrismThemeToggle.tsx (limited to 'src/components/Settings') diff --git a/src/components/Settings/PrismThemeToggle/PrismThemeToggle.tsx b/src/components/Settings/PrismThemeToggle/PrismThemeToggle.tsx new file mode 100644 index 0000000..06f7ac8 --- /dev/null +++ b/src/components/Settings/PrismThemeToggle/PrismThemeToggle.tsx @@ -0,0 +1,49 @@ +import { Toggle } from '@components/Form'; +import { MoonIcon, SunIcon } from '@components/Icons'; +import Spinner from '@components/Spinner/Spinner'; +import { usePrismTheme } from '@utils/providers/prism'; +import { useEffect, useState } from 'react'; +import { useIntl } from 'react-intl'; + +const PrismThemeToggle = () => { + const intl = useIntl(); + const [isMounted, setIsMounted] = useState(false); + + useEffect(() => { + setIsMounted(true); + }, []); + + const { theme, setTheme, resolvedTheme } = usePrismTheme(); + const [isDarkTheme, setIsDarkTheme] = useState(theme === 'dark'); + + useEffect(() => { + if (theme === 'system') { + setIsDarkTheme(resolvedTheme === 'dark'); + } else { + setIsDarkTheme(theme === 'dark'); + } + }, [theme, resolvedTheme]); + + const updateTheme = () => { + isDarkTheme ? setTheme('light') : setTheme('dark'); + setIsDarkTheme(!isDarkTheme); + }; + + if (!isMounted) return ; + + return ( + } + rightChoice={} + value={isDarkTheme} + changeHandler={updateTheme} + /> + ); +}; + +export default PrismThemeToggle; diff --git a/src/components/Settings/Settings.tsx b/src/components/Settings/Settings.tsx index 80eb0c3..9f38ecb 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Settings/Settings.tsx @@ -1,6 +1,7 @@ import { CogIcon } from '@components/Icons'; import ThemeToggle from '@components/Settings/ThemeToggle/ThemeToggle'; import { useIntl } from 'react-intl'; +import PrismThemeToggle from './PrismThemeToggle/PrismThemeToggle'; import ReduceMotion from './ReduceMotion/ReduceMotion'; import styles from './Settings.module.scss'; @@ -18,6 +19,7 @@ const Settings = () => { + ); }; -- cgit v1.2.3