Skip to content

Commit 6b88724

Browse files
add colorMode toggle
1 parent 2286122 commit 6b88724

File tree

2 files changed

+30
-45
lines changed

2 files changed

+30
-45
lines changed

beta/src/components/Layout/Nav/MobileNav.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
import * as React from 'react';
66
import cn from 'classnames';
7-
import {RouteItem} from 'components/Layout/useRouteMeta';
8-
import {useRouter} from 'next/router';
9-
import {SidebarRouteTree} from '../Sidebar';
7+
import { RouteItem } from 'components/Layout/useRouteMeta';
8+
import { useRouter } from 'next/router';
9+
import { SidebarRouteTree } from '../Sidebar';
1010
import sidebarHome from '../../../sidebarHome.json';
1111
import sidebarLearn from '../../../sidebarLearn.json';
1212
import sidebarReference from '../../../sidebarReference.json';
@@ -22,7 +22,7 @@ function inferSection(pathname: string): 'learn' | 'reference' | 'home' {
2222
}
2323

2424
export function MobileNav() {
25-
const {pathname} = useRouter();
25+
const { pathname } = useRouter();
2626
const [section, setSection] = React.useState(() => inferSection(pathname));
2727

2828
let tree = null;
@@ -40,7 +40,7 @@ export function MobileNav() {
4040

4141
return (
4242
<>
43-
<div className="sticky top-0 px-5 mb-2 bg-wash dark:bg-wash-dark flex justify-end border-b border-border dark:border-border-dark items-center self-center w-full z-10">
43+
<div className="sticky top-0 px-5 mb-2 bg-transparent flex justify-end border-b border-border dark:border-border-dark items-center self-center w-full z-10">
4444
<TabButton
4545
isActive={section === 'home'}
4646
onClick={() => setSection('home')}>

beta/src/components/Layout/Nav/Nav.tsx

Lines changed: 25 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
import * as React from 'react';
66
import cn from 'classnames';
77
import NextLink from 'next/link';
8-
import {useRouter} from 'next/router';
8+
import { useRouter } from 'next/router';
99

10-
import {IconClose} from 'components/Icon/IconClose';
11-
import {IconHamburger} from 'components/Icon/IconHamburger';
12-
import {Search} from 'components/Search';
13-
import {MenuContext} from 'components/useMenu';
14-
15-
import {Logo} from '../../Logo';
10+
import { IconClose } from 'components/Icon/IconClose';
11+
import { IconHamburger } from 'components/Icon/IconHamburger';
12+
import { Search } from 'components/Search';
13+
import { MenuContext } from 'components/useMenu';
14+
import { Logo } from '../../Logo';
1615
import NavLink from './NavLink';
16+
import { ColorMode, ThemeContext } from 'modules/ThemeProvider';
1717

1818
const feedbackIcon = (
1919
<svg
@@ -90,18 +90,19 @@ function inferSection(pathname: string): 'learn' | 'reference' | 'home' {
9090
}
9191

9292
export default function Nav() {
93-
const {pathname} = useRouter();
94-
const {isOpen, toggleOpen} = React.useContext(MenuContext);
95-
// TODO: persist
93+
const { pathname } = useRouter();
94+
const { isOpen, toggleOpen } = React.useContext(MenuContext);
9695
// TODO: respect system pref
97-
const [isDark, setIsDark] = React.useState(() => {
98-
if (typeof document === 'undefined') {
99-
return false;
100-
}
101-
return document.documentElement.classList.contains('dark');
102-
});
96+
97+
// get the current colorMode
98+
const { colorMode, setColorMode } = React.useContext(ThemeContext);
99+
103100
const section = inferSection(pathname);
104101

102+
const toggleColorMode = React.useCallback(() => {
103+
setColorMode(colorMode === ColorMode.dark ? ColorMode.light : ColorMode.dark)
104+
}, [colorMode])
105+
105106
function handleFeedback() {
106107
const nodes: any = document.querySelectorAll(
107108
'#_hj_feedback_container button'
@@ -115,7 +116,7 @@ export default function Nav() {
115116
}
116117

117118
return (
118-
<nav className="sticky top-0 items-center w-full flex lg:block justify-between bg-wash dark:bg-wash-dark pt-0 lg:pt-4 pr-5 lg:px-5 z-50">
119+
<nav className="sticky top-0 items-center w-full flex lg:block justify-between bg-transparent pt-0 lg:pt-4 pr-5 lg:px-5 z-50">
119120
<div className="xl:w-full xl:max-w-xs flex items-center">
120121
<button
121122
type="button"
@@ -139,18 +140,10 @@ export default function Nav() {
139140
</div>
140141
<button
141142
type="button"
142-
aria-label={isDark ? 'Use Light Mode' : 'Use Dark Mode'}
143-
onClick={() => {
144-
if (isDark) {
145-
document.documentElement.classList.remove('dark');
146-
setIsDark(false);
147-
} else {
148-
document.documentElement.classList.add('dark');
149-
setIsDark(true);
150-
}
151-
}}
143+
aria-label={colorMode === ColorMode.dark ? 'Use Light Mode' : 'Use Dark Mode'}
144+
onClick={toggleColorMode}
152145
className="hidden lg:flex items-center h-full pr-2">
153-
{isDark ? lightIcon : darkIcon}
146+
{colorMode === ColorMode.dark ? lightIcon : darkIcon}
154147
</button>
155148
</div>
156149
<div className="px-0 pt-2 w-full 2xl:max-w-xs hidden lg:flex items-center self-center border-b-0 lg:border-b border-border dark:border-border-dark">
@@ -174,20 +167,12 @@ export default function Nav() {
174167
</button>
175168
<button
176169
type="button"
177-
aria-label={isDark ? 'Use Light Mode' : 'Use Dark Mode'}
178-
onClick={() => {
179-
if (isDark) {
180-
document.documentElement.classList.remove('dark');
181-
setIsDark(false);
182-
} else {
183-
document.documentElement.classList.add('dark');
184-
setIsDark(true);
185-
}
186-
}}
170+
aria-label={colorMode === ColorMode.dark ? 'Use Light Mode' : 'Use Dark Mode'}
171+
onClick={toggleColorMode}
187172
className="flex lg:hidden items-center p-1 h-full ml-4 lg:ml-6">
188-
{isDark ? lightIcon : darkIcon}
173+
{colorMode === ColorMode.dark ? lightIcon : darkIcon}
189174
</button>
190175
</div>
191176
</nav>
192177
);
193-
}
178+
}

0 commit comments

Comments
 (0)