mirror of
https://github.com/StanGirard/quivr.git
synced 2024-12-18 16:11:45 +03:00
253e866a86
# Description Hope ya'll don't mind, I updated the User Profile's UI to be a bit more readable. Kept the design neutral to not impose styles. I also kept the original toggle buttons for Theme and Language in case we still want to use those in other places in the app, where a select menu isn't necessary. ## Checklist before requesting a review Please delete options that are not relevant. - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my code - [ ] I have commented hard-to-understand areas - [ ] I have ideally added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged ## Screenshots (if appropriate): https://github.com/StanGirard/quivr/assets/64866427/d0320852-ece1-4002-a180-0005df132e71 https://github.com/StanGirard/quivr/assets/64866427/be3c67ec-8d42-44f9-8131-35a70aec20ef --------- Co-authored-by: Zineb El Bachiri <100568984+gozineb@users.noreply.github.com> Co-authored-by: Stan Girard <girard.stanislas@gmail.com>
45 lines
936 B
TypeScript
45 lines
936 B
TypeScript
import { useEffect, useLayoutEffect, useState } from "react";
|
|
|
|
export type Theme = "dark" | "light" | "system";
|
|
|
|
/**
|
|
* @todo implement "system" theme
|
|
*/
|
|
export const useTheme = (): {
|
|
isDark: boolean;
|
|
isLight: boolean;
|
|
theme: Theme;
|
|
setTheme: (t: Theme) => void;
|
|
} => {
|
|
const [theme, setTheme] = useState<Theme>("light");
|
|
const isDark = theme === "dark";
|
|
const isLight = theme === "light";
|
|
|
|
useLayoutEffect(() => {
|
|
const savedTheme = localStorage.getItem("theme");
|
|
|
|
if (savedTheme === "dark") {
|
|
document.body.parentElement?.classList.add("dark");
|
|
|
|
setTheme(savedTheme);
|
|
}
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (isDark) {
|
|
document.body.parentElement?.classList.add("dark");
|
|
} else {
|
|
document.body.parentElement?.classList.remove("dark");
|
|
}
|
|
|
|
localStorage.setItem("theme", theme);
|
|
}, [theme, isDark]);
|
|
|
|
return {
|
|
isDark,
|
|
isLight,
|
|
theme,
|
|
setTheme,
|
|
};
|
|
};
|