Skip to content

Darkmode toggler #260

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Oct 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
376 changes: 192 additions & 184 deletions src/App.jsx

Large diffs are not rendered by default.

2 changes: 0 additions & 2 deletions src/components/Admin/BlogCard/BlogCard.module.scss
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@


.blogCard {
* {
overflow: auto;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ const ConnectionDropBanner = () => {
!isConnected
? styles.offlinebanner
: showOnlineBanner
? styles.onlinebanner
: styles.hide
? styles.onlinebanner
: styles.hide
}
>
{!isConnected && <p>You are offline. Please check your internet connection.</p>}
Expand Down
3 changes: 2 additions & 1 deletion src/components/GalleryPage/GalleryCard/GalleryCard.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
width: 25vw;
height: 16rem;
overflow: hidden;
box-shadow: 4px 4px 12px var(--box-shadow-color-black-1),
box-shadow:
4px 4px 12px var(--box-shadow-color-black-1),
-4px -4px 12px var(--box-shadow-color-black-2);
border-radius: 8px;
margin: 2.5vw;
Expand Down
13 changes: 12 additions & 1 deletion src/components/shared/Navbar/Navbar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,18 @@ import { Link, NavLink, useNavigate } from "react-router-dom";
import "./Navbar.css";
import axios from "axios";
import UserContext from "../../../context/UserContext";
import { ThemeContext } from "../../../context/ThemeContext";
import ThemeToggleButton from "../ThemeToggleButton/ThemeToggleButton";

// import { FaMoon } from "react-icons/fa";
// import { IoSunny } from "react-icons/io5";

const Navbar = () => {
const navigate = useNavigate();
const [toggle, setToggle] = useState(false);
const { isDarkMode, toggleTheme, setIsDarkMode, setCurrentMode } =
useContext(ThemeContext);
// const storedTheme = localStorage.getItem("isDarkMode");

const handleToggle = () => {
setToggle(!toggle);
Expand Down Expand Up @@ -61,7 +70,7 @@ const Navbar = () => {

return (
<nav
className={toggle ? "navbar1 expanded" : "navbar1"}
className={`navbar1 ${toggle ? "expanded" : ""} ${isDarkMode ? "dark-theme" : ""}`}
id={bgChng ? "bgchng" : ""}
style={{ userSelect: "none" }}
>
Expand Down Expand Up @@ -116,6 +125,8 @@ const Navbar = () => {
<NavLink to="/signup">SIGN UP</NavLink>
</li>
)}

<ThemeToggleButton />
</ul>
</nav>
);
Expand Down
2 changes: 2 additions & 0 deletions src/components/shared/Navbar/NavbarTeam.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { useNavigate } from "react-router-dom";
import axios from "axios";
import { useContext } from "react";
import UserContext from "../../../context/UserContext";
import ThemeToggleButton from "../ThemeToggleButton/ThemeToggleButton";

const NavbarTeam = () => {
const [toggle, setToggle] = useState(false);
Expand Down Expand Up @@ -111,6 +112,7 @@ const NavbarTeam = () => {
<NavLink to="/signup">SIGN UP</NavLink>
</li>
)}
<ThemeToggleButton />
</ul>
</nav>
);
Expand Down
46 changes: 46 additions & 0 deletions src/components/shared/ThemeToggleButton/ThemeToggleButton.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import React, { useContext } from "react";
import { FaMoon } from "react-icons/fa";
import { IoSunny } from "react-icons/io5";
import { ThemeContext } from "../../../context/ThemeContext";

const ThemeToggleButton = () => {
const { isDarkMode, toggleTheme } = useContext(ThemeContext);

return (
// <button onClick={toggleTheme} style={{ border: 'none', backgroundColor: 'transparent' }}>
// <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>
// {isDarkMode ? (
// <IoSunny size={isDarkMode ? 20 : 18} style={{ color: 'white' }} />
// ) : (
// <FaMoon size={isDarkMode ? 18 : 20} style={{ color: 'black' }} />
// )}
// </div>
// </button>
<button
onClick={toggleTheme}
style={{
border: "none",
backgroundColor: "transparent",
marginBottom: "15px",
}}
>
<div
style={{
width: "30px",
height: "30px",
display: "flex",
justifyContent: "center",
alignItems: "center",
}}
>
{isDarkMode ? (
<IoSunny size={isDarkMode ? 20 : 18} style={{ color: "white" }} />
) : (
<FaMoon size={isDarkMode ? 18 : 20} style={{ color: "black" }} />
)}
</div>
</button>
);
};

export default ThemeToggleButton;
87 changes: 87 additions & 0 deletions src/context/ThemeContext.jsx
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use UseEffect to update the document.body class and localStorage whenever isDarkMode changes.

Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import { useRef } from "react";
import { createContext, useState, useEffect } from "react";

const ThemeContext = createContext({
isDarkMode: false,
toggleTheme: () => {},
});

function ThemeContextProvider({ children }) {
let currentMode = localStorage.getItem("isDarkMode");

console.log(typeof currentMode);

// useEffect(() => {

// currentMode = localStorage.getItem("isDarkMode");

// if (currentMode == null) {
// currentMode = "false";
// localStorage.setItem("isDarkMode", "false");
// } else {
// if (currentMode == "false") {
// document.body.classList.remove("dark-theme");
// localStorage.setItem("isDarkMode", "false");
// } else {
// document.body.classList.add("dark-theme");
// localStorage.setItem("isDarkMode", "true");
// }
// }

// },[])
// }
// if (currentMode == null) {
// currentMode = "false";
// localStorage.setItem("isDarkMode", "false");
// } else {
// if (currentMode == "false") {
// document.body.classList.remove("dark-theme");
// localStorage.setItem("isDarkMode", "false");
// } else {
// document.body.classList.add("dark-theme");
// localStorage.setItem("isDarkMode", "true");
// }
// }

const [isDarkMode, setIsDarkMode] = useState(currentMode != "false");
if (isDarkMode) {
localStorage.setItem("isDarkMode", "true");
} else {
localStorage.setItem("isDarkMode", "false");
}

useEffect(() => {
const currentMode = localStorage.getItem("isDarkMode");

if (currentMode !== null) {
setIsDarkMode(currentMode === "true");
}

if (isDarkMode) {
document.body.classList.add("dark-theme");
} else {
document.body.classList.remove("dark-theme");
}
}, [isDarkMode]);
// const [isDarkMode, setIsDarkMode] = useState(currentMode != "false");
// if (isDarkMode) {
// localStorage.setItem("isDarkMode", "true");
// } else {
// localStorage.setItem("isDarkMode", "false");
// }
const toggleTheme = () => {
setIsDarkMode(!isDarkMode);
if (currentMode == "false") {
document.body.classList.remove("dark-theme");
} else {
document.body.classList.add("dark-theme");
}
};
return (
<ThemeContext.Provider value={{ isDarkMode, toggleTheme, setIsDarkMode }}>
{children}
</ThemeContext.Provider>
);
}

export { ThemeContext, ThemeContextProvider };
3 changes: 3 additions & 0 deletions src/pages/Events/Events.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ import "react-responsive-carousel/lib/styles/carousel.min.css";
import { Carousel } from "react-responsive-carousel";
// import UpcomingEvents from '../../components/EventsPage/UpcomingEvents';
import PastEvents from "../../components/EventsPage/PastEvents";
import { ThemeContext } from "../../context/ThemeContext";
import { useContext } from "react";
const Events = () => {
const { isDarkMode, setIsDarkMode } = useContext(ThemeContext);
useEffect(() => {
document.title = "Events | E-Cell NIT Silchar";
}, []);
Expand Down
3 changes: 3 additions & 0 deletions src/pages/Home/Home.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ import Footer from "../../components/shared/Footer/Footer";
import Footerconstant from "../../components/shared/FooterConstant/Footerconstant";
import Contactus from "../../components/Home/Contact/Contactus";
import ScrollToSection from "../../components/shared/ScrollToSection/Scroll";
import { ThemeContext } from "../../context/ThemeContext";
import { useContext } from "react";
const Home = () => {
const { isDarkMode, setIsDarkMode } = useContext(ThemeContext);
useEffect(() => {
document.title = "E-Cell | NIT Silchar";
}, []);
Expand Down
Loading