1+ import { useTheme } from "$/utils/react-theme" ;
12import { useColorMode as chakraUseColorMode } from "@chakra-ui/react" ;
2- import { useTheme } from "next-themes" ;
3- import { useEffect , useState } from "react" ;
4- import { ColorModeContext , defaultColorMode } from "$/utils/context.js" ;
3+ import { createElement , useEffect } from "react" ;
4+ import { ColorModeContext , defaultColorMode } from "$/utils/context" ;
55
66export default function ChakraColorModeProvider ( { children } ) {
77 const { theme, resolvedTheme, setTheme } = useTheme ( ) ;
8- const { colorMode, toggleColorMode } = chakraUseColorMode ( ) ;
9- const [ resolvedColorMode , setResolvedColorMode ] = useState ( colorMode ) ;
8+ const { colorMode : chakraColorMode , toggleColorMode : toggleChakraColorMode } =
9+ chakraUseColorMode ( ) ;
1010
1111 useEffect ( ( ) => {
12- if ( colorMode != resolvedTheme ) {
13- toggleColorMode ( ) ;
12+ if ( chakraColorMode != resolvedTheme ) {
13+ toggleChakraColorMode ( ) ;
1414 }
15- setResolvedColorMode ( resolvedTheme ) ;
1615 } , [ theme , resolvedTheme ] ) ;
1716
18- const rawColorMode = colorMode ;
17+ const toggleColorMode = ( ) => {
18+ setTheme ( resolvedTheme === "light" ? "dark" : "light" ) ;
19+ } ;
20+
1921 const setColorMode = ( mode ) => {
2022 const allowedModes = [ "light" , "dark" , "system" ] ;
2123 if ( ! allowedModes . includes ( mode ) ) {
@@ -26,11 +28,17 @@ export default function ChakraColorModeProvider({ children }) {
2628 }
2729 setTheme ( mode ) ;
2830 } ;
29- return (
30- < ColorModeContext . Provider
31- value = { { rawColorMode, resolvedColorMode, toggleColorMode, setColorMode } }
32- >
33- { children }
34- </ ColorModeContext . Provider >
31+
32+ return createElement (
33+ ColorModeContext . Provider ,
34+ {
35+ value : {
36+ rawColorMode : theme ,
37+ resolvedColorMode : resolvedTheme ,
38+ toggleColorMode,
39+ setColorMode,
40+ } ,
41+ } ,
42+ children
3543 ) ;
3644}
0 commit comments