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

Configure Feed

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

at cb7e2ab976d9e2e8e2d13356b79bba7e6870a9fd 113 lines 3.2 kB view raw
1import {useMemo} from 'react' 2 3import {usePreferencesQuery} from '#/state/queries/preferences' 4import {useCurrentAccountProfile} from '#/state/queries/useCurrentAccountProfile' 5import {useSession} from '#/state/session' 6import type * as bsky from '#/types/bsky' 7 8export type FullVerificationState = { 9 profile: { 10 role: 'default' | 'verifier' 11 isVerified: boolean 12 wasVerified: boolean 13 isViewer: boolean 14 showBadge: boolean 15 } 16 viewer: 17 | { 18 role: 'default' 19 isVerified: boolean 20 } 21 | { 22 role: 'verifier' 23 isVerified: boolean 24 hasIssuedVerification: boolean 25 } 26} 27 28export function useFullVerificationState({ 29 profile, 30}: { 31 profile: bsky.profile.AnyProfileView 32}): FullVerificationState { 33 const {currentAccount} = useSession() 34 const currentAccountProfile = useCurrentAccountProfile() 35 const profileState = useSimpleVerificationState({profile}) 36 const viewerState = useSimpleVerificationState({ 37 profile: currentAccountProfile, 38 }) 39 40 return useMemo(() => { 41 const verifications = profile.verification?.verifications || [] 42 const wasVerified = 43 profileState.role === 'default' && 44 !profileState.isVerified && 45 verifications.length > 0 46 const hasIssuedVerification = Boolean( 47 viewerState && 48 viewerState.role === 'verifier' && 49 profileState.role === 'default' && 50 verifications.find(v => v.issuer === currentAccount?.did), 51 ) 52 53 return { 54 profile: { 55 ...profileState, 56 wasVerified, 57 isViewer: profile.did === currentAccount?.did, 58 showBadge: profileState.showBadge, 59 }, 60 viewer: 61 viewerState.role === 'verifier' 62 ? { 63 role: 'verifier', 64 isVerified: viewerState.isVerified, 65 hasIssuedVerification, 66 } 67 : { 68 role: 'default', 69 isVerified: viewerState.isVerified, 70 }, 71 } 72 }, [profile, currentAccount, profileState, viewerState]) 73} 74 75export type SimpleVerificationState = { 76 role: 'default' | 'verifier' 77 isVerified: boolean 78 showBadge: boolean 79} 80 81export function useSimpleVerificationState({ 82 profile, 83}: { 84 profile?: bsky.profile.AnyProfileView 85}): SimpleVerificationState { 86 const preferences = usePreferencesQuery() 87 const prefs = useMemo( 88 () => preferences.data?.verificationPrefs || {hideBadges: false}, 89 [preferences.data?.verificationPrefs], 90 ) 91 return useMemo(() => { 92 if (!profile || !profile.verification) { 93 return { 94 role: 'default', 95 isVerified: false, 96 showBadge: false, 97 } 98 } 99 100 const {verifiedStatus, trustedVerifierStatus} = profile.verification 101 const isVerifiedUser = ['valid', 'invalid'].includes(verifiedStatus) 102 const isVerifierUser = ['valid', 'invalid'].includes(trustedVerifierStatus) 103 const isVerified = 104 (isVerifiedUser && verifiedStatus === 'valid') || 105 (isVerifierUser && trustedVerifierStatus === 'valid') 106 107 return { 108 role: isVerifierUser ? 'verifier' : 'default', 109 isVerified, 110 showBadge: prefs.hideBadges ? false : isVerified, 111 } 112 }, [profile, prefs]) 113}