Skip to content

Commit 88fcc1b

Browse files
committed
refactor(useColorModes): add SSR support
1 parent 7449d0c commit 88fcc1b

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

packages/coreui-vue/src/composables/useColorModes.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import { onBeforeMount, ref, watch } from 'vue'
22

3-
const getStoredTheme = (localStorageItemName: string) => localStorage.getItem(localStorageItemName)
3+
const getStoredTheme = (localStorageItemName: string) =>
4+
typeof window !== 'undefined' && localStorage.getItem(localStorageItemName)
45
const setStoredTheme = (localStorageItemName: string, colorMode: string) =>
56
localStorage.setItem(localStorageItemName, colorMode)
67

78
const getPreferredColorScheme = (localStorageItemName: string) => {
9+
if (typeof window === 'undefined') {
10+
return
11+
}
12+
813
const storedTheme = getStoredTheme(localStorageItemName)
914

1015
if (storedTheme) {
@@ -28,23 +33,23 @@ export const useColorModes = (localStorageItemName = 'coreui-vue-color-scheme')
2833
const colorMode = ref(getPreferredColorScheme(localStorageItemName))
2934

3035
watch(colorMode, () => {
31-
setStoredTheme(localStorageItemName, colorMode.value)
32-
setTheme(colorMode.value)
36+
if (colorMode.value) {
37+
setStoredTheme(localStorageItemName, colorMode.value)
38+
setTheme(colorMode.value)
39+
}
3340
})
3441

3542
onBeforeMount(() => {
36-
if (typeof getStoredTheme(localStorageItemName) === 'string') {
43+
if (typeof getStoredTheme(localStorageItemName) === 'string' && colorMode.value) {
3744
setTheme(colorMode.value)
3845
}
3946

4047
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
4148
const storedTheme = getStoredTheme(localStorageItemName)
42-
if (storedTheme !== 'light' && storedTheme !== 'dark') {
49+
if (storedTheme !== 'light' && storedTheme !== 'dark' && colorMode.value) {
4350
setTheme(colorMode.value)
4451
}
4552
})
46-
47-
watch(colorMode, () => setTheme(colorMode.value))
4853
})
4954

5055
return {

0 commit comments

Comments
 (0)