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

Configure Feed

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

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