File tree Expand file tree Collapse file tree 2 files changed +49
-21
lines changed Expand file tree Collapse file tree 2 files changed +49
-21
lines changed Original file line number Diff line number Diff line change @@ -102,13 +102,10 @@ export default function Nav() {
102
102
} ) ;
103
103
104
104
React . useEffect ( ( ) => {
105
- if ( window . matchMedia && window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ) {
106
- document . documentElement . classList . add ( 'dark' ) ;
107
- setIsDark ( true ) ;
108
- } else {
109
- setIsDark ( false ) ;
110
- }
111
- } , [ ] ) ;
105
+ window . __onThemeChange = ( ) => {
106
+ setIsDark ( window . __theme === 'dark' ? true : false ) ;
107
+ } ;
108
+ } , [ ] ) ;
112
109
113
110
const section = inferSection ( pathname ) ;
114
111
@@ -151,13 +148,9 @@ export default function Nav() {
151
148
type = "button"
152
149
aria-label = { isDark ? 'Use Light Mode' : 'Use Dark Mode' }
153
150
onClick = { ( ) => {
154
- if ( isDark ) {
155
- document . documentElement . classList . remove ( 'dark' ) ;
156
- setIsDark ( false ) ;
157
- } else {
158
- document . documentElement . classList . add ( 'dark' ) ;
159
- setIsDark ( true ) ;
160
- }
151
+ window . __setPreferredTheme (
152
+ window . __theme === 'light' ? 'dark' : 'light'
153
+ ) ;
161
154
} }
162
155
className = "hidden lg:flex items-center h-full pr-2" >
163
156
{ isDark ? lightIcon : darkIcon }
@@ -186,13 +179,9 @@ export default function Nav() {
186
179
type = "button"
187
180
aria-label = { isDark ? 'Use Light Mode' : 'Use Dark Mode' }
188
181
onClick = { ( ) => {
189
- if ( isDark ) {
190
- document . documentElement . classList . remove ( 'dark' ) ;
191
- setIsDark ( false ) ;
192
- } else {
193
- document . documentElement . classList . add ( 'dark' ) ;
194
- setIsDark ( true ) ;
195
- }
182
+ window . __setPreferredTheme (
183
+ window . __theme === 'light' ? 'dark' : 'light'
184
+ ) ;
196
185
} }
197
186
className = "flex lg:hidden items-center p-1 h-full ml-4 lg:ml-6" >
198
187
{ isDark ? lightIcon : darkIcon }
Original file line number Diff line number Diff line change @@ -12,6 +12,45 @@ class MyDocument extends Document {
12
12
< Html lang = "en" >
13
13
< Head />
14
14
< body className = "font-sans antialiased text-lg bg-wash dark:bg-wash-dark text-secondary dark:text-secondary-dark leading-base" >
15
+ < script
16
+ dangerouslySetInnerHTML = { {
17
+ __html : `(function () {
18
+ window.__onThemeChange = function () {};
19
+ function setTheme(newTheme) {
20
+ window.__theme = newTheme;
21
+ preferredTheme = newTheme;
22
+
23
+ document.documentElement.className = newTheme;
24
+ window.__onThemeChange(newTheme);
25
+ }
26
+
27
+ var preferredTheme;
28
+ try {
29
+ preferredTheme = localStorage.getItem("theme");
30
+ } catch (err) {
31
+ console.error("Couldn't fetch theme from local storage")
32
+
33
+ }
34
+
35
+ window.__setPreferredTheme = function (newTheme) {
36
+ setTheme(newTheme);
37
+ try {
38
+ localStorage.setItem("theme", newTheme);
39
+ } catch (err) {
40
+ console.error("Couldn't set theme in local storage")
41
+ }
42
+ };
43
+
44
+ var darkQuery = window.matchMedia("(prefers-color-scheme: dark)");
45
+ darkQuery.addListener(function (e) {
46
+ window.__setPreferredTheme(e.matches ? "dark" : "light");
47
+ });
48
+
49
+ setTheme(preferredTheme || (darkQuery.matches ? "dark" : "light"));
50
+ })();
51
+ ` ,
52
+ } }
53
+ />
15
54
< Main />
16
55
< NextScript />
17
56
</ body >
You can’t perform that action at this time.
0 commit comments