Don't follow self, blocks or mute when following all; don't show blocks in list (#4715)
* don't follow self when following all * also filter blocks * add more filtering to follow all * extract logic to functions
This commit is contained in:
		
							parent
							
								
									dc3c81c4e2
								
							
						
					
					
						commit
						6694a33603
					
				
					 3 changed files with 27 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -9,6 +9,7 @@ import {
 | 
			
		|||
import {InfiniteData, UseInfiniteQueryResult} from '@tanstack/react-query'
 | 
			
		||||
 | 
			
		||||
import {useBottomBarOffset} from 'lib/hooks/useBottomBarOffset'
 | 
			
		||||
import {isBlockedOrBlocking} from 'lib/moderation/blocked-and-muted'
 | 
			
		||||
import {isNative, isWeb} from 'platform/detection'
 | 
			
		||||
import {useSession} from 'state/session'
 | 
			
		||||
import {List, ListRef} from 'view/com/util/List'
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +48,7 @@ export const ProfilesList = React.forwardRef<SectionRef, ProfilesListProps>(
 | 
			
		|||
    // The server returns these sorted by descending creation date, so we want to invert
 | 
			
		||||
    const profiles = data?.pages
 | 
			
		||||
      .flatMap(p => p.items.map(i => i.subject))
 | 
			
		||||
      .filter(p => !p.associated?.labeler)
 | 
			
		||||
      .filter(p => !isBlockedOrBlocking(p) && !p.associated?.labeler)
 | 
			
		||||
      .reverse()
 | 
			
		||||
    const isOwn = new AtUri(listUri).host === currentAccount?.did
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										17
									
								
								src/lib/moderation/blocked-and-muted.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/lib/moderation/blocked-and-muted.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
import {AppBskyActorDefs} from '@atproto/api'
 | 
			
		||||
 | 
			
		||||
export function isBlockedOrBlocking(
 | 
			
		||||
  profile:
 | 
			
		||||
    | AppBskyActorDefs.ProfileViewBasic
 | 
			
		||||
    | AppBskyActorDefs.ProfileViewDetailed,
 | 
			
		||||
) {
 | 
			
		||||
  return profile.viewer?.blockedBy || profile.viewer?.blocking
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function isMuted(
 | 
			
		||||
  profile:
 | 
			
		||||
    | AppBskyActorDefs.ProfileViewBasic
 | 
			
		||||
    | AppBskyActorDefs.ProfileViewDetailed,
 | 
			
		||||
) {
 | 
			
		||||
  return profile.viewer?.muted || profile.viewer?.mutedByList
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -25,6 +25,7 @@ import {logger} from '#/logger'
 | 
			
		|||
import {useDeleteStarterPackMutation} from '#/state/queries/starter-packs'
 | 
			
		||||
import {batchedUpdates} from 'lib/batchedUpdates'
 | 
			
		||||
import {HITSLOP_20} from 'lib/constants'
 | 
			
		||||
import {isBlockedOrBlocking, isMuted} from 'lib/moderation/blocked-and-muted'
 | 
			
		||||
import {makeProfileLink, makeStarterPackLink} from 'lib/routes/links'
 | 
			
		||||
import {CommonNavigatorParams, NavigationProp} from 'lib/routes/types'
 | 
			
		||||
import {logEvent} from 'lib/statsig/statsig'
 | 
			
		||||
| 
						 | 
				
			
			@ -344,7 +345,13 @@ function Header({
 | 
			
		|||
        list: starterPack.list.uri,
 | 
			
		||||
      })
 | 
			
		||||
      const dids = list.data.items
 | 
			
		||||
        .filter(li => !li.subject.viewer?.following)
 | 
			
		||||
        .filter(
 | 
			
		||||
          li =>
 | 
			
		||||
            li.subject.did !== currentAccount?.did &&
 | 
			
		||||
            !isBlockedOrBlocking(li.subject) &&
 | 
			
		||||
            !isMuted(li.subject) &&
 | 
			
		||||
            !li.subject.viewer?.following,
 | 
			
		||||
        )
 | 
			
		||||
        .map(li => li.subject.did)
 | 
			
		||||
 | 
			
		||||
      const followUris = await bulkWriteFollows(agent, dids)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue