about summary refs log tree commit diff
path: root/src/state/shell/color-mode.tsx
diff options
context:
space:
mode:
authorHailey <me@haileyok.com>2024-02-06 21:16:50 -0800
committerGitHub <noreply@github.com>2024-02-06 21:16:50 -0800
commit573cf31d865044b0cc442a7390ecbda15c9ba1d0 (patch)
treee08b33af016a585da2ee6b0fefaac010497a6236 /src/state/shell/color-mode.tsx
parentdc6603a1b978122238108792c9de2d4f3b040396 (diff)
downloadvoidsky-573cf31d865044b0cc442a7390ecbda15c9ba1d0.tar.zst
fix theme cross-tab write loop (#2774)
* don't write on onUpdate, memoize

* refac useColorModeTheme
Diffstat (limited to 'src/state/shell/color-mode.tsx')
-rw-r--r--src/state/shell/color-mode.tsx44
1 files changed, 23 insertions, 21 deletions
diff --git a/src/state/shell/color-mode.tsx b/src/state/shell/color-mode.tsx
index 4f0391aa6..f3339d240 100644
--- a/src/state/shell/color-mode.tsx
+++ b/src/state/shell/color-mode.tsx
@@ -20,36 +20,38 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
   const [colorMode, setColorMode] = React.useState(persisted.get('colorMode'))
   const [darkTheme, setDarkTheme] = React.useState(persisted.get('darkTheme'))
 
-  const setColorModeWrapped = React.useCallback(
-    (_colorMode: persisted.Schema['colorMode']) => {
-      setColorMode(_colorMode)
-      persisted.write('colorMode', _colorMode)
-    },
-    [setColorMode],
+  const stateContextValue = React.useMemo(
+    () => ({
+      colorMode,
+      darkTheme,
+    }),
+    [colorMode, darkTheme],
   )
 
-  const setDarkThemeWrapped = React.useCallback(
-    (_darkTheme: persisted.Schema['darkTheme']) => {
-      setDarkTheme(_darkTheme)
-      persisted.write('darkTheme', _darkTheme)
-    },
-    [setDarkTheme],
+  const setContextValue = React.useMemo(
+    () => ({
+      setColorMode: (_colorMode: persisted.Schema['colorMode']) => {
+        setColorMode(_colorMode)
+        persisted.write('colorMode', _colorMode)
+      },
+      setDarkTheme: (_darkTheme: persisted.Schema['darkTheme']) => {
+        setDarkTheme(_darkTheme)
+        persisted.write('darkTheme', _darkTheme)
+      },
+    }),
+    [],
   )
 
   React.useEffect(() => {
     return persisted.onUpdate(() => {
-      setColorModeWrapped(persisted.get('colorMode'))
-      setDarkThemeWrapped(persisted.get('darkTheme'))
+      setColorMode(persisted.get('colorMode'))
+      setDarkTheme(persisted.get('darkTheme'))
     })
-  }, [setColorModeWrapped, setDarkThemeWrapped])
+  }, [])
 
   return (
-    <stateContext.Provider value={{colorMode, darkTheme}}>
-      <setContext.Provider
-        value={{
-          setDarkTheme: setDarkThemeWrapped,
-          setColorMode: setColorModeWrapped,
-        }}>
+    <stateContext.Provider value={stateContextValue}>
+      <setContext.Provider value={setContextValue}>
         {children}
       </setContext.Provider>
     </stateContext.Provider>