Bluesky app fork with some witchin' additions 馃挮
at main 51 lines 1.4 kB view raw
1import React from 'react' 2 3import * as persisted from '#/state/persisted' 4 5type StateContext = persisted.Schema['hideUnreplyablePosts'] 6type SetContext = (v: persisted.Schema['hideUnreplyablePosts']) => void 7 8const stateContext = React.createContext<StateContext>( 9 persisted.defaults.hideUnreplyablePosts, 10) 11const setContext = React.createContext<SetContext>( 12 (_: persisted.Schema['hideUnreplyablePosts']) => {}, 13) 14 15export function Provider({children}: React.PropsWithChildren<{}>) { 16 const [state, setState] = React.useState( 17 persisted.get('hideUnreplyablePosts'), 18 ) 19 20 const setStateWrapped = React.useCallback( 21 (hideUnreplyablePosts: persisted.Schema['hideUnreplyablePosts']) => { 22 setState(hideUnreplyablePosts) 23 persisted.write('hideUnreplyablePosts', hideUnreplyablePosts) 24 }, 25 [setState], 26 ) 27 28 React.useEffect(() => { 29 return persisted.onUpdate('hideUnreplyablePosts', nextValue => { 30 setState(nextValue) 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 useHideUnreplyablePosts() { 44 return ( 45 React.useContext(stateContext) ?? persisted.defaults.hideUnreplyablePosts 46 ) 47} 48 49export function useSetHideUnreplyablePosts() { 50 return React.useContext(setContext) 51}