commerce/components/store/themeContext.tsx
Samantha Kellow f571d7fab3 Fix sos page
2023-09-13 21:02:59 +01:00

63 lines
1.6 KiB
TypeScript

import { createContext, ReactElement, useEffect, useState } from "react";
const ThemeContext = createContext({
isDarkTheme: true,
toggleThemeHandler: () => {},
});
interface ThemePropsInterface {
children?: JSX.Element | Array<JSX.Element>;
}
export function MyThemeContextProvider(
props: ThemePropsInterface
): ReactElement {
const [isDarkTheme, setIsDarkTheme] = useState(true);
useEffect(() => initialThemeHandler());
function isLocalStorageEmpty(): boolean {
return !localStorage.getItem("isDarkTheme");
}
function initialThemeHandler(): void {
if (isLocalStorageEmpty()) {
localStorage.setItem("isDarkTheme", `true`);
document!.querySelector("body")!.classList.add("dark");
setIsDarkTheme(true);
} else {
const isDarkTheme: boolean = JSON.parse(
localStorage.getItem("isDarkTheme")!
);
isDarkTheme && document!.querySelector("body")!.classList.add("dark");
setIsDarkTheme(() => {
return isDarkTheme;
});
}
}
function toggleThemeHandler(): void {
const isDarkTheme: boolean = JSON.parse(
localStorage.getItem("isDarkTheme")!
);
setIsDarkTheme(!isDarkTheme);
toggleDarkClassToBody();
setValueToLocalStorage();
}
function toggleDarkClassToBody(): void {
document!.querySelector("body")!.classList.toggle("dark");
}
function setValueToLocalStorage(): void {
localStorage.setItem("isDarkTheme", `${!isDarkTheme}`);
}
return (
<ThemeContext.Provider value={{ isDarkTheme: true, toggleThemeHandler }}>
{props.children}
</ThemeContext.Provider>
);
}
export default ThemeContext;