-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgatsby-ssr.js
37 lines (30 loc) ยท 1.48 KB
/
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
import React from 'react'
const functionToScript = callbackFn => String(callbackFn)
const setInitThemeMode = () => {
if (typeof window !== 'undefined') {
const $body = document.querySelector('body')
// prefers-color-scheme ๊ฐ์ ํ์ธ ํด ์์คํ
์ ์ปฌ๋ฌ๋ชจ๋ ์ด๊ธฐ๊ฐ์ผ๋ก ์ฌ์ฉ
const prefersColorScheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
// ์ด์ ์ ๋ฐฉ๋ฌธํ๋ค๋ฉด local storage์ theme ๊ฐ์ด ์ ์ฅ๋์ด ์์ ์์
const localTheme = localStorage.getItem('theme')
/**
* local storage์ ์ ์ฅ๋ ๊ฐ์ด ์์ผ๋ฉด os์ ์ง์ ๋ prefers-color-scheme์ ๋ฐ๋ผ ํ
๋ง๋ฅผ ์ ํํ๊ธฐ
*/
const initialTheme = localTheme || prefersColorScheme
$body?.classList.add(initialTheme)
}
}
const setInitThemeModeScript = functionToScript(setInitThemeMode)
const codeRunOnClient = `(${setInitThemeModeScript})()`
const MagicScriptTag = () => {
return <script dangerouslySetInnerHTML={{ __html: codeRunOnClient }} />
}
// ์ฃผ๋ก ์ฌ์ฉํ๋ ํฐํธ๋ค
const FONTS = ['/fonts/AppleSDGothicNeoR.woff2', '/fonts/AppleSDGothicNeoM.woff2', '/fonts/AppleSDGothicNeoB.woff2']
const fontsLinks = FONTS.map(font => (
<link rel="preload" href={font} as="font" type="font/woff2" crossOrigin="anonymous" key="interFont" />
))
export const onRenderBody = ({ setHeadComponents, setPreBodyComponents }) => {
// setHeadComponents(fontsLinks),
setPreBodyComponents(<MagicScriptTag key="setInitThemeMode-script" />)
}