mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at verify-code 74 lines 1.9 kB view raw
1import React from 'react' 2 3import * as persisted from '#/state/persisted' 4 5type StateContext = { 6 colorMode: persisted.Schema['colorMode'] 7 darkTheme: persisted.Schema['darkTheme'] 8} 9type SetContext = { 10 setColorMode: (v: persisted.Schema['colorMode']) => void 11 setDarkTheme: (v: persisted.Schema['darkTheme']) => void 12} 13 14const stateContext = React.createContext<StateContext>({ 15 colorMode: 'system', 16 darkTheme: 'dark', 17}) 18const setContext = React.createContext<SetContext>({} as SetContext) 19 20export function Provider({children}: React.PropsWithChildren<{}>) { 21 const [colorMode, setColorMode] = React.useState(persisted.get('colorMode')) 22 const [darkTheme, setDarkTheme] = React.useState(persisted.get('darkTheme')) 23 24 const stateContextValue = React.useMemo( 25 () => ({ 26 colorMode, 27 darkTheme, 28 }), 29 [colorMode, darkTheme], 30 ) 31 32 const setContextValue = React.useMemo( 33 () => ({ 34 setColorMode: (_colorMode: persisted.Schema['colorMode']) => { 35 setColorMode(_colorMode) 36 persisted.write('colorMode', _colorMode) 37 }, 38 setDarkTheme: (_darkTheme: persisted.Schema['darkTheme']) => { 39 setDarkTheme(_darkTheme) 40 persisted.write('darkTheme', _darkTheme) 41 }, 42 }), 43 [], 44 ) 45 46 React.useEffect(() => { 47 const unsub1 = persisted.onUpdate('darkTheme', nextDarkTheme => { 48 setDarkTheme(nextDarkTheme) 49 }) 50 const unsub2 = persisted.onUpdate('colorMode', nextColorMode => { 51 setColorMode(nextColorMode) 52 }) 53 return () => { 54 unsub1() 55 unsub2() 56 } 57 }, []) 58 59 return ( 60 <stateContext.Provider value={stateContextValue}> 61 <setContext.Provider value={setContextValue}> 62 {children} 63 </setContext.Provider> 64 </stateContext.Provider> 65 ) 66} 67 68export function useThemePrefs() { 69 return React.useContext(stateContext) 70} 71 72export function useSetThemePrefs() { 73 return React.useContext(setContext) 74}