aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/ThemeToggle/ThemeToggle.tsx
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-01-17 17:13:51 +0100
committerArmand Philippot <git@armandphilippot.com>2022-01-17 18:03:52 +0100
commit68138f0dcd8b3db2c23b31a20508726f245b5ba5 (patch)
tree0d6a31cfd0adcba4d4cb08666bc262bed6cb89ea /src/components/ThemeToggle/ThemeToggle.tsx
parent86d3e30ef02585d5089dce3aa2757ca2cb4e4edf (diff)
feat: implement dark mode
Diffstat (limited to 'src/components/ThemeToggle/ThemeToggle.tsx')
-rw-r--r--src/components/ThemeToggle/ThemeToggle.tsx17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/components/ThemeToggle/ThemeToggle.tsx b/src/components/ThemeToggle/ThemeToggle.tsx
index 4b93ac9..c44f6df 100644
--- a/src/components/ThemeToggle/ThemeToggle.tsx
+++ b/src/components/ThemeToggle/ThemeToggle.tsx
@@ -1,16 +1,27 @@
import { Form } from '@components/Form';
import { MoonIcon, SunIcon } from '@components/Icons';
+import Spinner from '@components/Spinner/Spinner';
import { t } from '@lingui/macro';
-import { FormEvent, useState } from 'react';
+import { useTheme } from 'next-themes';
+import { FormEvent, useEffect, useState } from 'react';
import styles from './ThemeToggle.module.scss';
const ThemeToggle = () => {
- const [isDarkTheme, setIsDarkTheme] = useState<boolean>(false);
+ const [isMounted, setIsMounted] = useState<boolean>(false);
+ const { resolvedTheme, setTheme } = useTheme();
+
+ useEffect(() => {
+ setIsMounted(true);
+ }, []);
const onSubmit = (e: FormEvent) => {
e.preventDefault();
};
+ if (!isMounted) return <Spinner />;
+
+ const isDarkTheme = resolvedTheme === 'dark';
+
return (
<Form modifier="theme" submitHandler={onSubmit}>
<input
@@ -19,7 +30,7 @@ const ThemeToggle = () => {
id="dark-theme"
name="dark-theme"
checked={isDarkTheme}
- onChange={() => setIsDarkTheme(!isDarkTheme)}
+ onChange={() => setTheme(isDarkTheme ? 'light' : 'dark')}
/>
<label htmlFor="dark-theme" className={styles.label}>
<span className={styles.title}>{t`Theme:`}</span>