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 type PropsWithChildren, 4 useCallback, 5 useContext, 6 useEffect, 7 useState, 8} from 'react' 9 10import * as persisted from '#/state/persisted' 11 12// Preference: disableReplyMetrics – when true, disables reply metrics on posts 13 14type StateContext = persisted.Schema['disableReplyMetrics'] 15// Same setter signature used across other preference modules 16type SetContext = (v: persisted.Schema['disableReplyMetrics']) => void 17 18const stateContext = createContext<StateContext>( 19 persisted.defaults.disableReplyMetrics, 20) 21const setContext = createContext<SetContext>( 22 (_: persisted.Schema['disableReplyMetrics']) => {}, 23) 24 25export function Provider({children}: PropsWithChildren<{}>) { 26 const [state, setState] = useState(persisted.get('disableReplyMetrics')) 27 28 const setStateWrapped = useCallback( 29 (value: persisted.Schema['disableReplyMetrics']) => { 30 setState(value) 31 persisted.write('disableReplyMetrics', value) 32 }, 33 [setState], 34 ) 35 36 useEffect(() => { 37 return persisted.onUpdate('disableReplyMetrics', next => { 38 setState(next) 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 useDisableReplyMetrics() { 52 return useContext(stateContext) 53} 54 55export function useSetDisableReplyMetrics() { 56 return useContext(setContext) 57}