🐛 (builder) Fix system color mode not syncing properly
This commit is contained in:
@ -38,17 +38,22 @@ export const UserProvider = ({ children }: { children: ReactNode }) => {
|
|||||||
const { setColorMode } = useColorMode()
|
const { setColorMode } = useColorMode()
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (
|
|
||||||
!user?.preferredAppAppearance ||
|
|
||||||
user.preferredAppAppearance === 'system'
|
|
||||||
)
|
|
||||||
return
|
|
||||||
const currentColorScheme = localStorage.getItem('chakra-ui-color-mode') as
|
const currentColorScheme = localStorage.getItem('chakra-ui-color-mode') as
|
||||||
| 'light'
|
| 'light'
|
||||||
| 'dark'
|
| 'dark'
|
||||||
| null
|
| null
|
||||||
if (currentColorScheme === user.preferredAppAppearance) return
|
if (!currentColorScheme) return
|
||||||
setColorMode(user.preferredAppAppearance)
|
const systemColorScheme = window.matchMedia('(prefers-color-scheme: dark)')
|
||||||
|
.matches
|
||||||
|
? 'dark'
|
||||||
|
: 'light'
|
||||||
|
const userPrefersSystemMode =
|
||||||
|
!user?.preferredAppAppearance || user.preferredAppAppearance === 'system'
|
||||||
|
const computedColorMode = userPrefersSystemMode
|
||||||
|
? systemColorScheme
|
||||||
|
: user?.preferredAppAppearance
|
||||||
|
if (computedColorMode === currentColorScheme) return
|
||||||
|
setColorMode(computedColorMode)
|
||||||
}, [setColorMode, user?.preferredAppAppearance])
|
}, [setColorMode, user?.preferredAppAppearance])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -28,7 +28,7 @@ const localeHumanReadable = {
|
|||||||
|
|
||||||
export const UserPreferencesForm = () => {
|
export const UserPreferencesForm = () => {
|
||||||
const scopedT = useScopedI18n('account.preferences')
|
const scopedT = useScopedI18n('account.preferences')
|
||||||
const { colorMode, setColorMode } = useColorMode()
|
const { colorMode } = useColorMode()
|
||||||
const { user, updateUser } = useUser()
|
const { user, updateUser } = useUser()
|
||||||
const changeLocale = useChangeLocale()
|
const changeLocale = useChangeLocale()
|
||||||
const currentLocale = useCurrentLocale()
|
const currentLocale = useCurrentLocale()
|
||||||
@ -43,7 +43,6 @@ export const UserPreferencesForm = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const changeAppearance = async (value: string) => {
|
const changeAppearance = async (value: string) => {
|
||||||
setColorMode(value)
|
|
||||||
updateUser({ preferredAppAppearance: value })
|
updateUser({ preferredAppAppearance: value })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user