about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorHailey <me@haileyok.com>2024-07-02 19:50:04 -0700
committerGitHub <noreply@github.com>2024-07-03 03:50:04 +0100
commit6694a33603544511441474819216d51482d19827 (patch)
tree3f393e3598ec4f9928d637b179ed2307d2b3daf4 /src
parentdc3c81c4e2923e0ab884adf119bd33c510db1f4a (diff)
downloadvoidsky-6694a33603544511441474819216d51482d19827.tar.zst
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
Diffstat (limited to 'src')
-rw-r--r--src/components/StarterPack/Main/ProfilesList.tsx3
-rw-r--r--src/lib/moderation/blocked-and-muted.ts17
-rw-r--r--src/screens/StarterPack/StarterPackScreen.tsx9
3 files changed, 27 insertions, 2 deletions
diff --git a/src/components/StarterPack/Main/ProfilesList.tsx b/src/components/StarterPack/Main/ProfilesList.tsx
index 7691e7222..0cc911d66 100644
--- a/src/components/StarterPack/Main/ProfilesList.tsx
+++ b/src/components/StarterPack/Main/ProfilesList.tsx
@@ -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
 
diff --git a/src/lib/moderation/blocked-and-muted.ts b/src/lib/moderation/blocked-and-muted.ts
new file mode 100644
index 000000000..18e6ef3e3
--- /dev/null
+++ b/src/lib/moderation/blocked-and-muted.ts
@@ -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
+}
diff --git a/src/screens/StarterPack/StarterPackScreen.tsx b/src/screens/StarterPack/StarterPackScreen.tsx
index b80687aff..2b6f673b1 100644
--- a/src/screens/StarterPack/StarterPackScreen.tsx
+++ b/src/screens/StarterPack/StarterPackScreen.tsx
@@ -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)