-
Notifications
You must be signed in to change notification settings - Fork 0
/
goDarkMode.js
27 lines (23 loc) · 936 Bytes
/
goDarkMode.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
// Turn on the dark mode
const updateModeToDark = () => {
localStorage.theme = 'dark'
document.documentElement.classList.add('dark')
}
// Turn off the dark mode
const updateModeToLight = () => {
localStorage.theme = 'light'
document.documentElement.classList.remove('dark')
}
/**
* Manage Dark theme based on User choice or default OS theme.
* @param {string} mode Theme mode with auto, dark, and light as possible values.
* @returns {string} Returns the mode for the applied theme.
*/
export default function goDarkMode(mode) {
// If the user did not request a change, then pick
// their saved choice if available, otherwise choose
// a theme based on the users default OS theme.
!(mode === 'dark' || mode === 'light') && (mode = localStorage.theme || (window.matchMedia('(prefers-color-scheme: dark)').matches && 'dark' || 'light'))
mode === 'dark' ? updateModeToDark() : updateModeToLight()
return mode
}