homepage/src/utils/color-context.jsx

45 lines
1.1 KiB
React
Raw Normal View History

2022-09-07 16:53:24 +03:00
import { createContext, useState, useEffect, useMemo } from "react";
2022-08-25 11:14:17 +03:00
let lastColor = false;
const getInitialColor = () => {
if (typeof window !== "undefined" && window.localStorage) {
const storedPrefs = window.localStorage.getItem("theme-color");
if (typeof storedPrefs === "string") {
lastColor = storedPrefs;
return storedPrefs;
}
}
return "slate"; // slate as the default color;
};
export const ColorContext = createContext();
2022-09-07 16:53:24 +03:00
export function ColorProvider({ initialTheme, children }) {
2022-08-25 11:14:17 +03:00
const [color, setColor] = useState(getInitialColor);
const rawSetColor = (rawColor) => {
const root = window.document.documentElement;
root.classList.remove(`theme-${lastColor}`);
root.classList.add(`theme-${rawColor}`);
localStorage.setItem("theme-color", rawColor);
lastColor = rawColor;
};
if (initialTheme) {
rawSetColor(initialTheme);
}
useEffect(() => {
rawSetColor(color);
}, [color]);
2022-09-07 16:53:24 +03:00
const value = useMemo(() => ({ color, setColor }), [color]);
return <ColorContext.Provider value={value}>{children}</ColorContext.Provider>;
}