diff --git a/src/state/queries/usePostThread/index.ts b/src/state/queries/usePostThread/index.ts index 194a85e264..fff265e2ab 100644 --- a/src/state/queries/usePostThread/index.ts +++ b/src/state/queries/usePostThread/index.ts @@ -43,8 +43,8 @@ export function usePostThread({ queryKey, async queryFn() { const {data} = await agent.app.bsky.unspecced.getPostThreadV2({ - uri: uri!, - nestedBranchingFactor: params.view === 'linear' ? 1 : 10, + anchor: uri!, + branchingFactor: params.view === 'linear' ? 1 : 10, below: 10, sorting: mapSortOptionsToSortID(params.sort), }) diff --git a/src/state/queries/usePostThread/traversal.ts b/src/state/queries/usePostThread/traversal.ts index f614ed7cdf..d60481278d 100644 --- a/src/state/queries/usePostThread/traversal.ts +++ b/src/state/queries/usePostThread/traversal.ts @@ -193,8 +193,9 @@ export function sort( moderationOpts, }) const postMod = getModerationState(post.moderation) - const postIsHidden = threadgateHiddenReplies.has(item.uri) - const postIsModerated = postIsHidden || postMod.blurred || postMod.muted + const postIsHiddenByThreadgate = threadgateHiddenReplies.has(item.uri) + const postIsModerated = + postIsHiddenByThreadgate || postMod.blurred || postMod.muted if (!postIsModerated) { /* @@ -233,15 +234,20 @@ export function sort( oneDown: thread[ci + 1], moderationOpts, }) - const childMod = getModerationState(childPost.moderation) - const childIsHidden = threadgateHiddenReplies.has(child.uri) + const childPostMod = getModerationState(childPost.moderation) + const childPostIsHiddenByThreadgate = + threadgateHiddenReplies.has(child.uri) /* * If a child is hidden in any way, drop it an its sub-branch * entirely. To reveal these, the user must navigate to the * parent post directly. */ - if (childMod.blurred || childMod.muted || childIsHidden) { + if ( + childPostMod.blurred || + childPostMod.muted || + childPostIsHiddenByThreadgate + ) { ci = getBranch(thread, ci, child.depth).end } else { sortArray.push(childPost) diff --git a/src/state/queries/usePostThread/types.ts b/src/state/queries/usePostThread/types.ts index e06940f705..d3adffeb9b 100644 --- a/src/state/queries/usePostThread/types.ts +++ b/src/state/queries/usePostThread/types.ts @@ -1,4 +1,6 @@ import { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + type APP_BSKY_UNSPECCED, type AppBskyFeedDefs, type AppBskyFeedPost, type AppBskyUnspeccedGetPostThreadV2, @@ -14,7 +16,7 @@ export const createPostThreadQueryKey = ( export type PostThreadParams = { view: 'tree' | 'linear' - sort: 'hotness' | 'oldest' | 'newest' | 'most-likes' | 'random' | string + sort: 'top' | 'oldest' | 'newest' | string prioritizeFollows: BskyThreadViewPreference['prioritizeFollowedUsers'] } @@ -44,6 +46,12 @@ export type Slice = } } moderation: ModerationDecision + /** + * Reference via {@link APP_BSKY_UNSPECCED} + */ + annotations: Set< + AppBskyUnspeccedGetPostThreadV2.ThreadItemPost['annotations'][number] + > ui: { isAnchor: boolean showParentReplyLine: boolean diff --git a/src/state/queries/usePostThread/utils.ts b/src/state/queries/usePostThread/utils.ts index daef2e7d89..7e7b274a63 100644 --- a/src/state/queries/usePostThread/utils.ts +++ b/src/state/queries/usePostThread/utils.ts @@ -12,16 +12,14 @@ import * as bsky from '#/types/bsky' export function mapSortOptionsToSortID(sort: PostThreadParams['sort']) { switch (sort) { - case 'hotness': - return APP_BSKY_UNSPECCED.GetPostThreadV2Hotness + case 'top': + return APP_BSKY_UNSPECCED.GetPostThreadV2Top case 'oldest': return APP_BSKY_UNSPECCED.GetPostThreadV2Oldest case 'newest': return APP_BSKY_UNSPECCED.GetPostThreadV2Newest - case 'most-likes': - return APP_BSKY_UNSPECCED.GetPostThreadV2MostLikes default: - return APP_BSKY_UNSPECCED.GetPostThreadV2Hotness + return APP_BSKY_UNSPECCED.GetPostThreadV2Top } } diff --git a/src/state/queries/usePostThread/views.ts b/src/state/queries/usePostThread/views.ts index 4af5b27c03..ee1d32d1f4 100644 --- a/src/state/queries/usePostThread/views.ts +++ b/src/state/queries/usePostThread/views.ts @@ -90,6 +90,7 @@ export function threadPost({ record: AppBskyFeedPost.Record }, }, + annotations: new Set(value.annotations), moderation: moderatePost(value.post, moderationOpts), ui: { isAnchor: depth === 0, @@ -99,8 +100,6 @@ export function threadPost({ } } -// export function threadPostNoOp({ }) - export function postViewToThreadPlaceholder( post: AppBskyFeedDefs.PostView, ): $Typed< @@ -115,12 +114,7 @@ export function postViewToThreadPlaceholder( value: { $type: 'app.bsky.unspecced.getPostThreadV2#threadItemPost', post, - isOPThread: false, // unknown - hasOPLike: false, // unknown - // @ts-expect-error - hasUnhydratedReplies: false, // unknown - // TODO test - hasUnhydratedParents: !!(post.record as AppBskyFeedPost.Record).reply, // unknown + annotations: [], }, } } diff --git a/src/view/screens/PostThread.tsx b/src/view/screens/PostThread.tsx index 95232e82d5..7db047b7af 100644 --- a/src/view/screens/PostThread.tsx +++ b/src/view/screens/PostThread.tsx @@ -447,14 +447,14 @@ function ThreadMenu({