Bluesky app fork with some witchin' additions 馃挮
0
fork

Configure Feed

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

at 3814f6b46054e082a4e28f04b257a9af4b3e7fd9 54 lines 1.5 kB view raw
1import React from 'react' 2 3import * as persisted from '#/state/persisted' 4 5type StateContext = persisted.Schema['requireAltTextEnabled'] 6type SetContext = (v: persisted.Schema['requireAltTextEnabled']) => void 7 8const stateContext = React.createContext<StateContext>( 9 persisted.defaults.requireAltTextEnabled, 10) 11stateContext.displayName = 'AltTextRequiredStateContext' 12const setContext = React.createContext<SetContext>( 13 (_: persisted.Schema['requireAltTextEnabled']) => {}, 14) 15setContext.displayName = 'AltTextRequiredSetContext' 16 17export function Provider({children}: React.PropsWithChildren<{}>) { 18 const [state, setState] = React.useState( 19 persisted.get('requireAltTextEnabled'), 20 ) 21 22 const setStateWrapped = React.useCallback( 23 (requireAltTextEnabled: persisted.Schema['requireAltTextEnabled']) => { 24 setState(requireAltTextEnabled) 25 persisted.write('requireAltTextEnabled', requireAltTextEnabled) 26 }, 27 [setState], 28 ) 29 30 React.useEffect(() => { 31 return persisted.onUpdate( 32 'requireAltTextEnabled', 33 nextRequireAltTextEnabled => { 34 setState(nextRequireAltTextEnabled) 35 }, 36 ) 37 }, [setStateWrapped]) 38 39 return ( 40 <stateContext.Provider value={state}> 41 <setContext.Provider value={setStateWrapped}> 42 {children} 43 </setContext.Provider> 44 </stateContext.Provider> 45 ) 46} 47 48export function useRequireAltTextEnabled() { 49 return React.useContext(stateContext) 50} 51 52export function useSetRequireAltTextEnabled() { 53 return React.useContext(setContext) 54}