Skip to content

Commit

Permalink
More theme related fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
domhhv committed Feb 8, 2024
1 parent 447b95a commit 35f4586
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
12 changes: 3 additions & 9 deletions src/components/header/ThemeToggle.tsx
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
import { ThemeModes, useTheme } from '@hooks';
import LightModeRoundedIcon from '@mui/icons-material/LightModeRounded';
import NightlightRoundRoundedIcon from '@mui/icons-material/NightlightRoundRounded';
import { Button, useColorScheme } from '@mui/joy';
import React from 'react';

import { StyledToggleModeIconButton } from './styled';

const ThemeToggle = () => {
useTheme();
const { mode, setMode } = useColorScheme();

const handleToggleMode = () => {
setMode(mode === ThemeModes.LIGHT ? ThemeModes.DARK : ThemeModes.LIGHT);
};
const { theme, toggleTheme } = useTheme();

return (
<>
<StyledToggleModeIconButton onClick={handleToggleMode}>
{mode === ThemeModes.LIGHT ? (
<StyledToggleModeIconButton onClick={toggleTheme}>
{theme === ThemeModes.LIGHT ? (
<NightlightRoundRoundedIcon />
) : (
<LightModeRoundedIcon />
Expand Down
32 changes: 25 additions & 7 deletions src/hooks/useTheme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,20 @@ export enum ThemeModes {

const useTheme = () => {
const { setMode } = useColorScheme();
const [theme, setTheme] = React.useState<ThemeModes>(ThemeModes.LIGHT);
const [theme, setTheme] = React.useState<ThemeModes>();
console.log({ theme });

const darkThemeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
const toggleTheme = () => {
setTheme((prevTheme) =>
prevTheme === ThemeModes.LIGHT ? ThemeModes.DARK : ThemeModes.LIGHT
);
};

React.useEffect(() => {
const darkThemeMediaQuery = window.matchMedia(
'(prefers-color-scheme: dark)'
);

const userTheme = localStorage.getItem(
USER_THEME_STORAGE_KEY
) as ThemeModes | null;
Expand All @@ -26,7 +35,19 @@ const useTheme = () => {
darkThemeMediaQuery.matches ? ThemeModes.DARK : ThemeModes.LIGHT
);
}
}, [darkThemeMediaQuery.matches]);

const eventListener = (mediaQueryListEvent: MediaQueryListEvent) => {
setTheme(
mediaQueryListEvent.matches ? ThemeModes.DARK : ThemeModes.LIGHT
);
};

darkThemeMediaQuery.addEventListener('change', eventListener);

return () => {
darkThemeMediaQuery.removeEventListener('change', eventListener);
};
}, []);

React.useEffect(() => {
if (theme) {
Expand All @@ -35,12 +56,9 @@ const useTheme = () => {
}
}, [theme, setMode]);

darkThemeMediaQuery.addEventListener('change', (mediaQueryListEvent) => {
setTheme(mediaQueryListEvent.matches ? ThemeModes.DARK : ThemeModes.LIGHT);
});

return {
theme,
toggleTheme,
};
};

Expand Down

0 comments on commit 35f4586

Please sign in to comment.