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

Configure Feed

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

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