Merge pull request #173 from Kroszborg/Simplify-theme-toggle-to-dark/light-only

fix:Simplify theme toggle to dark/light only
This commit is contained in:
mauro 🤙
2024-09-14 12:12:31 +02:00
committed by GitHub
2 changed files with 30 additions and 39 deletions

View File

@@ -51,6 +51,7 @@
"styled-components": "^6.1.12", "styled-components": "^6.1.12",
"tailwind-merge": "^2.5.1", "tailwind-merge": "^2.5.1",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",
"zen-website": "file:",
"zod": "^3.23.8" "zod": "^3.23.8"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -1,33 +1,27 @@
"use client"; "use client";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { MoonIcon, SunIcon } from "@radix-ui/react-icons"; import { MoonIcon, SunIcon } from "@radix-ui/react-icons";
import { useTheme } from "next-themes"; import { useTheme } from "next-themes";
import { Button } from "./ui/button"; import { Button } from "./ui/button";
export function ModeToggle() { export function ModeToggle() {
const { theme, setTheme } = useTheme(); const { setTheme } = useTheme();
const [currentTheme, setCurrentTheme] = useState('light');
const toggleTheme = () => {
switch (theme) {
case "system":
setTheme("dark");
break;
case "dark":
setTheme("light");
break;
case "light":
setTheme("system");
break;
}
};
// prevent hydration error
const [mounted, setMounted] = useState(false); const [mounted, setMounted] = useState(false);
useEffect(() => { useEffect(() => {
setMounted(true); setMounted(true);
}, []); const savedTheme = localStorage.getItem('theme') || 'light';
setCurrentTheme(savedTheme);
setTheme(savedTheme);
}, [setTheme]);
const toggleTheme = () => {
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
setCurrentTheme(newTheme);
setTheme(newTheme);
localStorage.setItem('theme', newTheme);
};
if (!mounted) { if (!mounted) {
return null; return null;
@@ -35,15 +29,11 @@ export function ModeToggle() {
return ( return (
<Button variant="ghost" size="icon" onClick={toggleTheme}> <Button variant="ghost" size="icon" onClick={toggleTheme}>
<MoonIcon {currentTheme === 'light' ? (
className={`${theme === "system" ? "visible" : "hidden"} h-[1.2rem] w-[1.2rem]`} <SunIcon className="h-[1.2rem] w-[1.2rem]" />
/> ) : (
<SunIcon <MoonIcon className="h-[1.2rem] w-[1.2rem]" />
className={`${theme === "light" ? "visible" : "hidden"} h-[1.2rem] w-[1.2rem]`} )}
/>
<MoonIcon
className={`${theme === "dark" ? "visible" : "hidden"} h-[1.2rem] w-[1.2rem]`}
/>
<span className="sr-only">Toggle theme</span> <span className="sr-only">Toggle theme</span>
</Button> </Button>
); );