Skip to content

Commit 4930c3b

Browse files
[website] Fix lighthouse issues
Improve the experience on the pages.
1 parent de106f1 commit 4930c3b

File tree

3 files changed

+42
-46
lines changed

3 files changed

+42
-46
lines changed

docs/src/components/header/ThemeModeToggle.tsx

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import IconButton from '@mui/material/IconButton';
44
import Tooltip from '@mui/material/Tooltip';
55
import DarkModeOutlined from '@mui/icons-material/DarkModeOutlined';
66
import LightModeOutlined from '@mui/icons-material/LightModeOutlined';
7+
import useMediaQuery from '@mui/material/useMediaQuery';
8+
import { useChangeTheme } from 'docs/src/modules/components/ThemeContext';
79

810
function CssVarsModeToggle(props: { onChange: (checked: boolean) => void }) {
911
const [mounted, setMounted] = React.useState(false);
@@ -34,29 +36,55 @@ function CssVarsModeToggle(props: { onChange: (checked: boolean) => void }) {
3436
);
3537
}
3638

37-
export default function ThemeModeToggle(props: {
38-
checked: boolean;
39-
onChange: (checked: boolean) => void;
40-
}) {
39+
export default function ThemeModeToggle() {
4140
const theme = useTheme();
41+
const changeTheme = useChangeTheme();
42+
const [mode, setMode] = React.useState<string | null>(null);
43+
const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
44+
45+
React.useEffect(() => {
46+
let initialMode = 'system';
47+
try {
48+
initialMode = localStorage.getItem('mui-mode') || initialMode;
49+
} catch (error) {
50+
// do nothing
51+
}
52+
setMode(initialMode);
53+
}, []);
54+
55+
const handleChangeThemeMode = (checked: boolean) => {
56+
const paletteMode = checked ? 'dark' : 'light';
57+
setMode(paletteMode);
58+
59+
try {
60+
localStorage.setItem('mui-mode', paletteMode); // syncing with homepage, can be removed once all pages are migrated to CSS variables
61+
} catch (error) {
62+
// do nothing
63+
}
64+
changeTheme({ paletteMode });
65+
};
66+
67+
if (mode === null) {
68+
return <IconButton color="primary" disableTouchRipple />;
69+
}
70+
4271
if (theme.vars) {
4372
// Temporarily renders conditionally because `useColorScheme` could not be used in the pages that haven't migrated to CSS theme variables.
44-
return <CssVarsModeToggle {...props} />;
73+
return <CssVarsModeToggle onChange={handleChangeThemeMode} />;
4574
}
75+
76+
const checked = mode === 'system' ? prefersDarkMode : mode === 'dark';
77+
4678
return (
47-
<Tooltip title={props.checked ? 'Turn on the light' : 'Turn off the light'}>
79+
<Tooltip title={checked ? 'Turn on the light' : 'Turn off the light'}>
4880
<IconButton
4981
color="primary"
5082
disableTouchRipple
5183
onClick={() => {
52-
props.onChange(!props.checked);
84+
handleChangeThemeMode(!checked);
5385
}}
5486
>
55-
{props.checked ? (
56-
<LightModeOutlined fontSize="small" />
57-
) : (
58-
<DarkModeOutlined fontSize="small" />
59-
)}
87+
{checked ? <LightModeOutlined fontSize="small" /> : <DarkModeOutlined fontSize="small" />}
6088
</IconButton>
6189
</Tooltip>
6290
);

docs/src/layouts/AppHeader.tsx

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import * as React from 'react';
22
import { styled, alpha } from '@mui/material/styles';
3-
import useMediaQuery from '@mui/material/useMediaQuery';
43
import GlobalStyles from '@mui/material/GlobalStyles';
54
import Box from '@mui/material/Box';
65
import Stack from '@mui/material/Stack';
@@ -12,7 +11,6 @@ import SvgMuiLogomark from 'docs/src/icons/SvgMuiLogomark';
1211
import HeaderNavBar from 'docs/src/components/header/HeaderNavBar';
1312
import HeaderNavDropdown from 'docs/src/components/header/HeaderNavDropdown';
1413
import ThemeModeToggle from 'docs/src/components/header/ThemeModeToggle';
15-
import { useChangeTheme } from 'docs/src/modules/components/ThemeContext';
1614
import Link from 'docs/src/modules/components/Link';
1715
import { DeferredAppSearch } from 'docs/src/modules/components/AppFrame';
1816
import { useTranslate } from 'docs/src/modules/utils/i18n';
@@ -41,34 +39,9 @@ interface AppHeaderProps {
4139

4240
export default function AppHeader(props: AppHeaderProps) {
4341
const { gitHubRepository = 'https://github.com/mui' } = props;
44-
const changeTheme = useChangeTheme();
45-
const [mode, setMode] = React.useState<string | null>(null);
46-
const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
4742

4843
const t = useTranslate();
4944

50-
React.useEffect(() => {
51-
let initialMode = 'system';
52-
try {
53-
initialMode = localStorage.getItem('mui-mode') || initialMode;
54-
} catch (error) {
55-
// do nothing
56-
}
57-
setMode(initialMode);
58-
}, []);
59-
60-
const handleChangeThemeMode = (checked: boolean) => {
61-
const paletteMode = checked ? 'dark' : 'light';
62-
setMode(paletteMode);
63-
64-
try {
65-
localStorage.setItem('mui-mode', paletteMode); // syncing with homepage, can be removed once all pages are migrated to CSS variables
66-
} catch (error) {
67-
// do nothing
68-
}
69-
changeTheme({ paletteMode });
70-
};
71-
7245
return (
7346
<Header>
7447
<GlobalStyles
@@ -101,12 +74,7 @@ export default function AppHeader(props: AppHeaderProps) {
10174
<GitHubIcon fontSize="small" />
10275
</IconButton>
10376
</Tooltip>
104-
{mode !== null ? (
105-
<ThemeModeToggle
106-
checked={mode === 'system' ? prefersDarkMode : mode === 'dark'}
107-
onChange={handleChangeThemeMode}
108-
/>
109-
) : null}
77+
<ThemeModeToggle />
11078
</Stack>
11179
<Box sx={{ display: { md: 'none' }, ml: 1 }}>
11280
<HeaderNavDropdown />

docs/src/modules/components/AppSearch.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ export default function AppSearch(props) {
332332
})}
333333
/>
334334
<SearchLabel id="app-search-label">{search}</SearchLabel>
335-
<Shortcut>
335+
<Shortcut aria-hidden="true">
336336
{/* eslint-disable-next-line material-ui/no-hardcoded-labels */}
337337
{macOS ? '⌘' : 'Ctrl+'}K
338338
</Shortcut>

0 commit comments

Comments
 (0)