this repo has no description
0
fork

Configure Feed

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

at main 48 lines 1.3 kB view raw
1import { 2 createContext, 3 useCallback, 4 useContext, 5 useEffect, 6 useState, 7} from 'react' 8 9import * as persisted from '#/state/persisted' 10 11type StateContext = boolean 12type SetContext = (v: boolean) => void 13 14const stateContext = createContext<StateContext>( 15 Boolean(persisted.defaults.disableHaptics), 16) 17stateContext.displayName = 'DisableHapticsStateContext' 18const setContext = createContext<SetContext>((_: boolean) => {}) 19setContext.displayName = 'DisableHapticsSetContext' 20 21export function Provider({children}: {children: React.ReactNode}) { 22 const [state, setState] = useState(Boolean(persisted.get('disableHaptics'))) 23 24 const setStateWrapped = useCallback( 25 (hapticsEnabled: persisted.Schema['disableHaptics']) => { 26 setState(Boolean(hapticsEnabled)) 27 persisted.write('disableHaptics', hapticsEnabled) 28 }, 29 [setState], 30 ) 31 32 useEffect(() => { 33 return persisted.onUpdate('disableHaptics', nextDisableHaptics => { 34 setState(Boolean(nextDisableHaptics)) 35 }) 36 }, [setStateWrapped]) 37 38 return ( 39 <stateContext.Provider value={state}> 40 <setContext.Provider value={setStateWrapped}> 41 {children} 42 </setContext.Provider> 43 </stateContext.Provider> 44 ) 45} 46 47export const useHapticsDisabled = () => useContext(stateContext) 48export const useSetHapticsDisabled = () => useContext(setContext)