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 functionszio/stable
parent
dc3c81c4e2
commit
6694a33603
|
@ -9,6 +9,7 @@ import {
|
||||||
import {InfiniteData, UseInfiniteQueryResult} from '@tanstack/react-query'
|
import {InfiniteData, UseInfiniteQueryResult} from '@tanstack/react-query'
|
||||||
|
|
||||||
import {useBottomBarOffset} from 'lib/hooks/useBottomBarOffset'
|
import {useBottomBarOffset} from 'lib/hooks/useBottomBarOffset'
|
||||||
|
import {isBlockedOrBlocking} from 'lib/moderation/blocked-and-muted'
|
||||||
import {isNative, isWeb} from 'platform/detection'
|
import {isNative, isWeb} from 'platform/detection'
|
||||||
import {useSession} from 'state/session'
|
import {useSession} from 'state/session'
|
||||||
import {List, ListRef} from 'view/com/util/List'
|
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
|
// The server returns these sorted by descending creation date, so we want to invert
|
||||||
const profiles = data?.pages
|
const profiles = data?.pages
|
||||||
.flatMap(p => p.items.map(i => i.subject))
|
.flatMap(p => p.items.map(i => i.subject))
|
||||||
.filter(p => !p.associated?.labeler)
|
.filter(p => !isBlockedOrBlocking(p) && !p.associated?.labeler)
|
||||||
.reverse()
|
.reverse()
|
||||||
const isOwn = new AtUri(listUri).host === currentAccount?.did
|
const isOwn = new AtUri(listUri).host === currentAccount?.did
|
||||||
|
|
||||||
|
|
|
@ -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 {useDeleteStarterPackMutation} from '#/state/queries/starter-packs'
|
||||||
import {batchedUpdates} from 'lib/batchedUpdates'
|
import {batchedUpdates} from 'lib/batchedUpdates'
|
||||||
import {HITSLOP_20} from 'lib/constants'
|
import {HITSLOP_20} from 'lib/constants'
|
||||||
|
import {isBlockedOrBlocking, isMuted} from 'lib/moderation/blocked-and-muted'
|
||||||
import {makeProfileLink, makeStarterPackLink} from 'lib/routes/links'
|
import {makeProfileLink, makeStarterPackLink} from 'lib/routes/links'
|
||||||
import {CommonNavigatorParams, NavigationProp} from 'lib/routes/types'
|
import {CommonNavigatorParams, NavigationProp} from 'lib/routes/types'
|
||||||
import {logEvent} from 'lib/statsig/statsig'
|
import {logEvent} from 'lib/statsig/statsig'
|
||||||
|
@ -344,7 +345,13 @@ function Header({
|
||||||
list: starterPack.list.uri,
|
list: starterPack.list.uri,
|
||||||
})
|
})
|
||||||
const dids = list.data.items
|
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)
|
.map(li => li.subject.did)
|
||||||
|
|
||||||
const followUris = await bulkWriteFollows(agent, dids)
|
const followUris = await bulkWriteFollows(agent, dids)
|
||||||
|
|
Loading…
Reference in New Issue