-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgatsby-ssr.js
40 lines (31 loc) · 1005 Bytes
/
gatsby-ssr.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const HtmlAttributes = {
lang: 'ko',
}
const setInitThemeMode = () => {
const mql = window.matchMedia('(prefers-color-scheme: dark)')
const prefersDarkFromMQ = mql.matches
const persistedPreference = localStorage.getItem('theme')
let colorMode = 'light'
const hasUsedToggle = typeof persistedPreference === 'string'
if (hasUsedToggle) {
colorMode = persistedPreference
} else {
colorMode = prefersDarkFromMQ ? 'dark' : 'light'
}
document.documentElement.classList.add(colorMode)
}
const functionToScript = (cb) => String(cb)
const setInitThemeModeScript = functionToScript(setInitThemeMode)
const codeRunOnClient = `(${setInitThemeModeScript})()`
const PreBodyScript = () => {
return (
<script
key="setInitThemeMode-script"
dangerouslySetInnerHTML={{ __html: codeRunOnClient }}
/>
)
}
export const onRenderBody = ({ setHtmlAttributes, setPreBodyComponents }) => {
setHtmlAttributes(HtmlAttributes)
setPreBodyComponents(<PreBodyScript />)
}