Skip to content

Commit

Permalink
Prep threadgate shadow hack (#4970)
Browse files Browse the repository at this point in the history
Co-authored-by: Hailey <[email protected]>
  • Loading branch information
estrattonbailey and haileyok authored Aug 22, 2024
1 parent 61f0be7 commit d5c78b9
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 23 deletions.
13 changes: 13 additions & 0 deletions src/state/cache/post-shadow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down Expand Up @@ -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,
Expand All @@ -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,
})
}

Expand Down
15 changes: 13 additions & 2 deletions src/state/queries/threadgate/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
})
},
})
}
20 changes: 20 additions & 0 deletions src/state/queries/threadgate/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
}
9 changes: 5 additions & 4 deletions src/view/com/post-thread/PostThread.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -129,17 +129,18 @@ export function PostThread({uri}: {uri: string | undefined}) {
currentAccount &&
rootPostUri &&
currentAccount?.did === new AtUri(rootPostUri).host
const initialThreadgateRecord = rootPost?.threadgate?.record as
| AppBskyFeedThreadgate.Record
| undefined
const {data: threadgateRecord} = useThreadgateRecordQuery({
/**
* If the user is the OP and the root post has a threadgate, we should load
* the threadgate record. Otherwise, fallback to initialData, which is taken
* from the response from `getPostThread`.
*/
enabled: Boolean(isOP && rootPostUri),
enabled: Boolean(isOP && rootPostUri && initialThreadgateRecord),
postUri: rootPostUri,
initialData: rootPost?.threadgate?.record as
| AppBskyFeedThreadgate.Record
| undefined,
initialData: initialThreadgateRecord,
})

const moderationOpts = useModerationOpts()
Expand Down
32 changes: 16 additions & 16 deletions src/view/com/post-thread/PostThreadItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -399,22 +399,6 @@ let PostThreadItemLoaded = ({
</Text>
</Link>
) : null}
{post.likeCount != null && post.likeCount !== 0 ? (
<Link
style={styles.expandedInfoItem}
href={likesHref}
title={likesTitle}>
<Text
testID="likeCount-expanded"
type="lg"
style={pal.textLight}>
<Text type="xl-bold" style={pal.text}>
{formatCount(post.likeCount)}
</Text>{' '}
<Plural value={post.likeCount} one="like" other="likes" />
</Text>
</Link>
) : null}
{post.quoteCount != null && post.quoteCount !== 0 ? (
<Link
style={styles.expandedInfoItem}
Expand All @@ -435,6 +419,22 @@ let PostThreadItemLoaded = ({
</Text>
</Link>
) : null}
{post.likeCount != null && post.likeCount !== 0 ? (
<Link
style={styles.expandedInfoItem}
href={likesHref}
title={likesTitle}>
<Text
testID="likeCount-expanded"
type="lg"
style={pal.textLight}>
<Text type="xl-bold" style={pal.text}>
{formatCount(post.likeCount)}
</Text>{' '}
<Plural value={post.likeCount} one="like" other="likes" />
</Text>
</Link>
) : null}
</View>
) : null}
<View style={[s.pl10, s.pr10]}>
Expand Down
2 changes: 1 addition & 1 deletion src/view/com/util/post-ctrls/PostCtrls.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ let PostCtrls = ({
<View style={big ? a.align_center : [a.flex_1, a.align_start]}>
<RepostButton
isReposted={!!post.viewer?.repost}
repostCount={post.repostCount}
repostCount={(post.repostCount ?? 0) + (post.quoteCount ?? 0)}
onRepost={onRepost}
onQuote={onQuote}
big={big}
Expand Down

0 comments on commit d5c78b9

Please sign in to comment.