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

Configure Feed

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

at theme-changes 62 lines 2.0 kB view raw
1import {createContext, useContext, useMemo} from 'react' 2import {type PropsWithChildren} from 'react' 3import {BskyAgent, type ModerationOpts} from '@atproto/api' 4 5import {useHiddenPosts, useLabelDefinitions} from '#/state/preferences' 6import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation' 7import {useSession} from '#/state/session' 8import {usePreferencesQuery} from '../queries/preferences' 9 10export const moderationOptsContext = createContext<ModerationOpts | undefined>( 11 undefined, 12) 13moderationOptsContext.displayName = 'ModerationOptsContext' 14 15// used in the moderation state devtool 16export const moderationOptsOverrideContext = createContext< 17 ModerationOpts | undefined 18>(undefined) 19moderationOptsOverrideContext.displayName = 'ModerationOptsOverrideContext' 20 21export function useModerationOpts() { 22 return useContext(moderationOptsContext) 23} 24 25export function Provider({children}: PropsWithChildren<{}>) { 26 const override = useContext(moderationOptsOverrideContext) 27 const {currentAccount} = useSession() 28 const prefs = usePreferencesQuery() 29 const {labelDefs} = useLabelDefinitions() 30 const hiddenPosts = useHiddenPosts() // TODO move this into pds-stored prefs 31 32 const userDid = currentAccount?.did 33 const moderationPrefs = prefs.data?.moderationPrefs 34 const value = useMemo<ModerationOpts | undefined>(() => { 35 if (override) { 36 return override 37 } 38 if (!moderationPrefs) { 39 return undefined 40 } 41 return { 42 userDid, 43 prefs: { 44 ...moderationPrefs, 45 labelers: moderationPrefs.labelers.length 46 ? moderationPrefs.labelers 47 : BskyAgent.appLabelers.map(did => ({ 48 did, 49 labels: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES, 50 })), 51 hiddenPosts: hiddenPosts || [], 52 }, 53 labelDefs, 54 } 55 }, [override, userDid, labelDefs, moderationPrefs, hiddenPosts]) 56 57 return ( 58 <moderationOptsContext.Provider value={value}> 59 {children} 60 </moderationOptsContext.Provider> 61 ) 62}