diff options
author | Francisco Nascimento <fnascimento1284@gmail.com> | 2025-06-11 14:21:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-11 06:21:31 -0700 |
commit | 269105371b22f2de6e8017862a783aaec340948b (patch) | |
tree | 82173e1672fdc3a3015128549a62dee0048da9d2 /src | |
parent | 1380c5ac67c937b84dd5d7172fbb660c45d0c87c (diff) | |
download | voidsky-269105371b22f2de6e8017862a783aaec340948b.tar.zst |
Instant Feed Update on Mute or Moderation Action (#8463)
* Implemented #2406: Instant Feed Update on Mute or Moderation Action Posts from muted or blocked users are now removed immediately from the feed. This is achieved by extending the usePostShadow hook to check if the post author is muted or blocked and return POST_TOMBSTONE accordingly. A unit test was also added to validate the new logic. Co-authored-by: Pedro Macedo <pedrosantosmacedo@tecnico.ulisboa.pt> * remove useless tests --------- Co-authored-by: Pedro Macedo <pedrosantosmacedo@tecnico.ulisboa.pt> Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/state/cache/post-shadow.ts | 12 | ||||
-rw-r--r-- | src/state/queries/profile.ts | 4 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/state/cache/post-shadow.ts b/src/state/cache/post-shadow.ts index 923e5c000..3f9644879 100644 --- a/src/state/cache/post-shadow.ts +++ b/src/state/cache/post-shadow.ts @@ -14,6 +14,7 @@ import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from '#/state/qu import {findAllPostsInQueryData as findAllPostsInQuoteQueryData} from '#/state/queries/post-quotes' import {findAllPostsInQueryData as findAllPostsInThreadQueryData} from '#/state/queries/post-thread' import {findAllPostsInQueryData as findAllPostsInSearchQueryData} from '#/state/queries/search-posts' +import {useProfileShadow} from './profile-shadow' import {castAsShadow, type Shadow} from './types' export type {Shadow} from './types' @@ -43,6 +44,10 @@ export function usePostShadow( setShadow(shadows.get(post)) } + const authorShadow = useProfileShadow(post.author) + const wasMuted = !!authorShadow.viewer?.muted + const wasBlocked = !!authorShadow.viewer?.blocking + useEffect(() => { function onUpdate() { setShadow(shadows.get(post)) @@ -54,15 +59,18 @@ export function usePostShadow( }, [post, setShadow]) return useMemo(() => { + if (wasMuted || wasBlocked) { + return POST_TOMBSTONE + } if (shadow) { return mergeShadow(post, shadow) } else { return castAsShadow(post) } - }, [post, shadow]) + }, [post, shadow, wasMuted, wasBlocked]) } -function mergeShadow( +export function mergeShadow( post: AppBskyFeedDefs.PostView, shadow: Partial<PostShadow>, ): Shadow<AppBskyFeedDefs.PostView> | typeof POST_TOMBSTONE { diff --git a/src/state/queries/profile.ts b/src/state/queries/profile.ts index eb65fef7c..b0af57c4a 100644 --- a/src/state/queries/profile.ts +++ b/src/state/queries/profile.ts @@ -499,9 +499,10 @@ function useProfileBlockMutation() { {subject: did, createdAt: new Date().toISOString()}, ) }, - onSuccess(_, {did}) { + onSuccess(data, {did}) { queryClient.invalidateQueries({queryKey: RQKEY_MY_BLOCKED()}) resetProfilePostsQueries(queryClient, did, 1000) + updateProfileShadow(queryClient, did, {blockingUri: data.uri}) }, }) } @@ -523,6 +524,7 @@ function useProfileUnblockMutation() { }, onSuccess(_, {did}) { resetProfilePostsQueries(queryClient, did, 1000) + updateProfileShadow(queryClient, did, {blockingUri: undefined}) }, }) } |