diff options
Diffstat (limited to 'src/state/preferences')
-rw-r--r-- | src/state/preferences/disable-haptics.tsx | 42 | ||||
-rw-r--r-- | src/state/preferences/index.tsx | 10 |
2 files changed, 49 insertions, 3 deletions
diff --git a/src/state/preferences/disable-haptics.tsx b/src/state/preferences/disable-haptics.tsx new file mode 100644 index 000000000..af2c55a18 --- /dev/null +++ b/src/state/preferences/disable-haptics.tsx @@ -0,0 +1,42 @@ +import React from 'react' + +import * as persisted from '#/state/persisted' + +type StateContext = boolean +type SetContext = (v: boolean) => void + +const stateContext = React.createContext<StateContext>( + Boolean(persisted.defaults.disableHaptics), +) +const setContext = React.createContext<SetContext>((_: boolean) => {}) + +export function Provider({children}: {children: React.ReactNode}) { + const [state, setState] = React.useState( + Boolean(persisted.get('disableHaptics')), + ) + + const setStateWrapped = React.useCallback( + (hapticsEnabled: persisted.Schema['disableHaptics']) => { + setState(Boolean(hapticsEnabled)) + persisted.write('disableHaptics', hapticsEnabled) + }, + [setState], + ) + + React.useEffect(() => { + return persisted.onUpdate(() => { + setState(Boolean(persisted.get('disableHaptics'))) + }) + }, [setStateWrapped]) + + return ( + <stateContext.Provider value={state}> + <setContext.Provider value={setStateWrapped}> + {children} + </setContext.Provider> + </stateContext.Provider> + ) +} + +export const useHapticsDisabled = () => React.useContext(stateContext) +export const useSetHapticsDisabled = () => React.useContext(setContext) diff --git a/src/state/preferences/index.tsx b/src/state/preferences/index.tsx index cf1d90151..804d0fc31 100644 --- a/src/state/preferences/index.tsx +++ b/src/state/preferences/index.tsx @@ -1,11 +1,12 @@ import React from 'react' -import {Provider as LanguagesProvider} from './languages' + import {Provider as AltTextRequiredProvider} from '../preferences/alt-text-required' import {Provider as HiddenPostsProvider} from '../preferences/hidden-posts' +import {Provider as DisableHapticsProvider} from './disable-haptics' import {Provider as ExternalEmbedsProvider} from './external-embeds-prefs' import {Provider as InAppBrowserProvider} from './in-app-browser' +import {Provider as LanguagesProvider} from './languages' -export {useLanguagePrefs, useLanguagePrefsApi} from './languages' export { useRequireAltTextEnabled, useSetRequireAltTextEnabled, @@ -16,6 +17,7 @@ export { } from './external-embeds-prefs' export * from './hidden-posts' export {useLabelDefinitions} from './label-defs' +export {useLanguagePrefs, useLanguagePrefsApi} from './languages' export function Provider({children}: React.PropsWithChildren<{}>) { return ( @@ -23,7 +25,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { <AltTextRequiredProvider> <ExternalEmbedsProvider> <HiddenPostsProvider> - <InAppBrowserProvider>{children}</InAppBrowserProvider> + <InAppBrowserProvider> + <DisableHapticsProvider>{children}</DisableHapticsProvider> + </InAppBrowserProvider> </HiddenPostsProvider> </ExternalEmbedsProvider> </AltTextRequiredProvider> |