refactor: use @nuxtjs/color-mode to manage ssr (#612)

This commit is contained in:
Daniel Roe 2022-12-29 13:26:08 +01:00 committed by GitHub
parent 6fdcc558fc
commit 7a36fb8efd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 43 additions and 215 deletions

10
plugins/color-mode.ts Normal file
View file

@ -0,0 +1,10 @@
export default defineNuxtPlugin(() => {
const colorMode = useColorMode()
useHead({
meta: [{
id: 'theme-color',
name: 'theme-color',
content: () => colorMode.value === 'dark' ? '#111111' : '#ffffff',
}],
})
})

View file

@ -1,41 +0,0 @@
import type { ColorMode } from '~/types'
import { InjectionKeyColorMode } from '~/constants/symbols'
import { COOKIE_KEY_COLOR_MODE, COOKIE_MAX_AGE } from '~/constants'
export default defineNuxtPlugin((nuxt) => {
const cookieColorMode = useCookie<ColorMode | null>(COOKIE_KEY_COLOR_MODE, { maxAge: COOKIE_MAX_AGE })
const preferColorMode = process.server ? computed(() => 'light') : usePreferredColorScheme()
const colorMode = computed<ColorMode>({
get() {
return cookieColorMode.value || preferColorMode.value as ColorMode
},
set(value) {
cookieColorMode.value = value
},
})
nuxt.vueApp.provide(InjectionKeyColorMode, colorMode)
if (process.server) {
useHead({
htmlAttrs: {
class: colorMode,
},
})
}
else {
watchEffect(() => {
document.documentElement.classList.toggle('dark', colorMode.value === 'dark')
document.documentElement.classList.toggle('light', colorMode.value === 'light')
})
}
useHead({
meta: [{
id: 'theme-color',
name: 'theme-color',
content: computed(() => colorMode.value === 'dark' ? '#111111' : '#ffffff'),
}],
})
})