diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-06-19 22:32:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-20 00:32:44 +0300 |
commit | 0f931933a7b7b72505fbab6e1f25860f7a84e59c (patch) | |
tree | f0ca1407e9fabd8cac7d1e2af0c7c09678a92a92 /src/state/preferences/large-alt-badge.tsx | |
parent | 22c5aa4da4e8835f2694e1590c27b2e5783d3cc4 (diff) | |
download | voidsky-0f931933a7b7b72505fbab6e1f25860f7a84e59c.tar.zst |
Option for large alt badges (#4571)
* add pref for large alt badge * add to settings * do the large badge bit * Tweak wording --------- Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
Diffstat (limited to 'src/state/preferences/large-alt-badge.tsx')
-rw-r--r-- | src/state/preferences/large-alt-badge.tsx | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/state/preferences/large-alt-badge.tsx b/src/state/preferences/large-alt-badge.tsx new file mode 100644 index 000000000..b3d597c5c --- /dev/null +++ b/src/state/preferences/large-alt-badge.tsx @@ -0,0 +1,49 @@ +import React from 'react' + +import * as persisted from '#/state/persisted' + +type StateContext = persisted.Schema['largeAltBadgeEnabled'] +type SetContext = (v: persisted.Schema['largeAltBadgeEnabled']) => void + +const stateContext = React.createContext<StateContext>( + persisted.defaults.largeAltBadgeEnabled, +) +const setContext = React.createContext<SetContext>( + (_: persisted.Schema['largeAltBadgeEnabled']) => {}, +) + +export function Provider({children}: React.PropsWithChildren<{}>) { + const [state, setState] = React.useState( + persisted.get('largeAltBadgeEnabled'), + ) + + const setStateWrapped = React.useCallback( + (largeAltBadgeEnabled: persisted.Schema['largeAltBadgeEnabled']) => { + setState(largeAltBadgeEnabled) + persisted.write('largeAltBadgeEnabled', largeAltBadgeEnabled) + }, + [setState], + ) + + React.useEffect(() => { + return persisted.onUpdate(() => { + setState(persisted.get('largeAltBadgeEnabled')) + }) + }, [setStateWrapped]) + + return ( + <stateContext.Provider value={state}> + <setContext.Provider value={setStateWrapped}> + {children} + </setContext.Provider> + </stateContext.Provider> + ) +} + +export function useLargeAltBadgeEnabled() { + return React.useContext(stateContext) +} + +export function useSetLargeAltBadgeEnabled() { + return React.useContext(setContext) +} |