this repo has no description
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)