Bluesky app fork with some witchin' additions 💫
at feat/markdown-basic 55 lines 1.6 kB view raw
1import React from 'react' 2 3import * as persisted from '#/state/persisted' 4 5// Preference: discoverContextEnabled – when true, shows debug context for discover feed 6 7type StateContext = persisted.Schema['discoverContextEnabled'] 8// Same setter signature used across other preference modules 9type SetContext = (v: persisted.Schema['discoverContextEnabled']) => void 10 11const stateContext = React.createContext<StateContext>( 12 persisted.defaults.discoverContextEnabled, 13) 14const setContext = React.createContext<SetContext>( 15 (_: persisted.Schema['discoverContextEnabled']) => {}, 16) 17 18export function Provider({children}: React.PropsWithChildren<{}>) { 19 const [state, setState] = React.useState( 20 persisted.get('discoverContextEnabled'), 21 ) 22 23 const setStateWrapped = React.useCallback( 24 (discoverContextEnabled: persisted.Schema['discoverContextEnabled']) => { 25 setState(discoverContextEnabled) 26 persisted.write('discoverContextEnabled', discoverContextEnabled) 27 }, 28 [setState], 29 ) 30 31 React.useEffect(() => { 32 return persisted.onUpdate( 33 'discoverContextEnabled', 34 nextDiscoverContextEnabled => { 35 setState(nextDiscoverContextEnabled) 36 }, 37 ) 38 }, [setStateWrapped]) 39 40 return ( 41 <stateContext.Provider value={state}> 42 <setContext.Provider value={setStateWrapped}> 43 {children} 44 </setContext.Provider> 45 </stateContext.Provider> 46 ) 47} 48 49export function useDiscoverContextEnabled() { 50 return React.useContext(stateContext) 51} 52 53export function useSetDiscoverContextEnabled() { 54 return React.useContext(setContext) 55}