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 93 lines 2.6 kB view raw
1import React from 'react' 2 3import * as persisted from '#/state/persisted' 4 5type StateContext = persisted.Schema['deerVerification'] 6type SetContext = (v: persisted.Schema['deerVerification']) => void 7 8const stateContext = React.createContext<StateContext>( 9 persisted.defaults.deerVerification, 10) 11const setContext = React.createContext<SetContext>( 12 (_: persisted.Schema['deerVerification']) => {}, 13) 14 15export function Provider({children}: React.PropsWithChildren<{}>) { 16 const [state, setState] = React.useState(persisted.get('deerVerification')) 17 18 const setStateWrapped = React.useCallback( 19 (deerVerification: persisted.Schema['deerVerification']) => { 20 setState(deerVerification) 21 persisted.write('deerVerification', deerVerification) 22 }, 23 [setState], 24 ) 25 26 React.useEffect(() => { 27 return persisted.onUpdate('deerVerification', nextDeerVerification => { 28 setState(nextDeerVerification) 29 }) 30 }, [setStateWrapped]) 31 32 return ( 33 <stateContext.Provider value={state}> 34 <setContext.Provider value={setStateWrapped}> 35 {children} 36 </setContext.Provider> 37 </stateContext.Provider> 38 ) 39} 40 41export function useDeerVerification() { 42 return React.useContext(stateContext) ?? persisted.defaults.deerVerification! 43} 44 45export function useDeerVerificationEnabled() { 46 return useDeerVerification().enabled 47} 48 49export function useDeerVerificationTrusted( 50 mandatory: string | undefined = undefined, 51) { 52 const trusted = new Set(useDeerVerification().trusted) 53 if (mandatory) { 54 trusted.add(mandatory) 55 } 56 return trusted 57} 58 59export function useSetDeerVerification() { 60 return React.useContext(setContext) 61} 62 63export function useSetDeerVerificationEnabled() { 64 const deerVerification = useDeerVerification() 65 const setDeerVerification = useSetDeerVerification() 66 67 return React.useMemo( 68 () => (enabled: boolean) => 69 setDeerVerification({...deerVerification, enabled}), 70 [deerVerification, setDeerVerification], 71 ) 72} 73 74export function useSetDeerVerificationTrust() { 75 const deerVerification = useDeerVerification() 76 const setDeerVerification = useSetDeerVerification() 77 78 return React.useMemo( 79 () => ({ 80 add: (add: string) => { 81 const trusted = new Set(deerVerification.trusted) 82 trusted.add(add) 83 setDeerVerification({...deerVerification, trusted: Array.from(trusted)}) 84 }, 85 remove: (remove: string) => { 86 const trusted = new Set(deerVerification.trusted) 87 trusted.delete(remove) 88 setDeerVerification({...deerVerification, trusted: Array.from(trusted)}) 89 }, 90 }), 91 [deerVerification, setDeerVerification], 92 ) 93}