diff options
author | Eric Bailey <git@esb.lol> | 2024-08-21 22:16:03 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-21 20:16:03 -0700 |
commit | d5c78b9183ac78620f59538fed61c8130ae1c47a (patch) | |
tree | 53ad7c63b9263e508df587aa6d837c4036f394e9 /src/state | |
parent | 61f0be705d614a31331945e1c4b9361d71b81403 (diff) | |
download | voidsky-d5c78b9183ac78620f59538fed61c8130ae1c47a.tar.zst |
Prep threadgate shadow hack (#4970)
Co-authored-by: Hailey <me@haileyok.com>
Diffstat (limited to 'src/state')
-rw-r--r-- | src/state/cache/post-shadow.ts | 13 | ||||
-rw-r--r-- | src/state/queries/threadgate/index.ts | 15 | ||||
-rw-r--r-- | src/state/queries/threadgate/util.ts | 20 |
3 files changed, 46 insertions, 2 deletions
diff --git a/src/state/cache/post-shadow.ts b/src/state/cache/post-shadow.ts index 65300a8ef..4d848ccc4 100644 --- a/src/state/cache/post-shadow.ts +++ b/src/state/cache/post-shadow.ts @@ -21,6 +21,7 @@ export interface PostShadow { repostUri: string | undefined isDeleted: boolean embed: AppBskyEmbedRecord.View | AppBskyEmbedRecordWithMedia.View | undefined + threadgateView: AppBskyFeedDefs.ThreadgateView | undefined } export const POST_TOMBSTONE = Symbol('PostTombstone') @@ -104,6 +105,16 @@ function mergeShadow( } } + let threadgateView: typeof post.threadgate + if ('threadgateView' in shadow && !post.threadgate) { + if ( + AppBskyFeedDefs.isThreadgateView(shadow.threadgateView) || + shadow.threadgateView === undefined + ) { + threadgateView = shadow.threadgateView + } + } + return castAsShadow({ ...post, embed: embed || post.embed, @@ -114,6 +125,8 @@ function mergeShadow( like: 'likeUri' in shadow ? shadow.likeUri : post.viewer?.like, repost: 'repostUri' in shadow ? shadow.repostUri : post.viewer?.repost, }, + // always prefer real post data + threadgate: post.threadgate || threadgateView, }) } diff --git a/src/state/queries/threadgate/index.ts b/src/state/queries/threadgate/index.ts index a88197cd5..faa166e2c 100644 --- a/src/state/queries/threadgate/index.ts +++ b/src/state/queries/threadgate/index.ts @@ -9,10 +9,12 @@ import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query' import {networkRetry, retry} from '#/lib/async/retry' import {until} from '#/lib/async/until' +import {updatePostShadow} from '#/state/cache/post-shadow' import {STALE} from '#/state/queries' import {RQKEY_ROOT as postThreadQueryKeyRoot} from '#/state/queries/post-thread' import {ThreadgateAllowUISetting} from '#/state/queries/threadgate/types' import { + createTempThreadgateView, createThreadgateRecord, mergeThreadgateRecords, threadgateAllowUISettingToAllowRecordValue, @@ -342,17 +344,26 @@ export function useToggleReplyVisibilityMutation() { } }) }, - onSuccess() { + onSuccess(_, {postUri, replyUri}) { + updatePostShadow(queryClient, postUri, { + threadgateView: createTempThreadgateView({ + postUri, + hiddenReplies: [replyUri], + }), + }) queryClient.invalidateQueries({ queryKey: [threadgateRecordQueryKeyRoot], }) }, - onError(_, {replyUri, action}) { + onError(_, {postUri, replyUri, action}) { if (action === 'hide') { hiddenReplies.removeHiddenReplyUri(replyUri) } else if (action === 'show') { hiddenReplies.addHiddenReplyUri(replyUri) } + updatePostShadow(queryClient, postUri, { + threadgateView: undefined, + }) }, }) } diff --git a/src/state/queries/threadgate/util.ts b/src/state/queries/threadgate/util.ts index 09ae0a0c1..35c33875e 100644 --- a/src/state/queries/threadgate/util.ts +++ b/src/state/queries/threadgate/util.ts @@ -139,3 +139,23 @@ export function createThreadgateRecord( hiddenReplies: threadgate.hiddenReplies || [], } } + +export function createTempThreadgateView({ + postUri, + hiddenReplies, +}: Pick<AppBskyFeedThreadgate.Record, 'hiddenReplies'> & { + postUri: string +}): AppBskyFeedDefs.ThreadgateView { + const record: AppBskyFeedThreadgate.Record = { + $type: 'app.bsky.feed.threadgate', + post: postUri, + allow: undefined, + hiddenReplies, + createdAt: new Date().toISOString(), + } + return { + $type: 'app.bsky.feed.defs#threadgateView', + uri: postUri, + record, + } +} |