Filter non-self threads from profile view (#1757)
parent
40752982da
commit
ddf0a1cced
|
@ -35,11 +35,57 @@ export class AuthorFeedAPI implements FeedAPI {
|
||||||
this.cursor = res.data.cursor
|
this.cursor = res.data.cursor
|
||||||
return {
|
return {
|
||||||
cursor: res.data.cursor,
|
cursor: res.data.cursor,
|
||||||
feed: res.data.feed,
|
feed: this._filter(res.data.feed),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
feed: [],
|
feed: [],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_filter(feed: AppBskyFeedDefs.FeedViewPost[]) {
|
||||||
|
if (this.params.filter === 'posts_no_replies') {
|
||||||
|
return feed.filter(post => {
|
||||||
|
const isReply = post.reply
|
||||||
|
const isRepost = AppBskyFeedDefs.isReasonRepost(post.reason)
|
||||||
|
if (!isReply) return true
|
||||||
|
if (isRepost) return true
|
||||||
|
return isReply && isAuthorReplyChain(this.params.actor, post, feed)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return feed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function isAuthorReplyChain(
|
||||||
|
actor: string,
|
||||||
|
post: AppBskyFeedDefs.FeedViewPost,
|
||||||
|
posts: AppBskyFeedDefs.FeedViewPost[],
|
||||||
|
): boolean {
|
||||||
|
// current post is by a different user (shouldn't happen)
|
||||||
|
if (post.post.author.handle !== actor) return false
|
||||||
|
|
||||||
|
const replyParent = post.reply?.parent
|
||||||
|
|
||||||
|
if (AppBskyFeedDefs.isPostView(replyParent)) {
|
||||||
|
// reply parent is by a different user
|
||||||
|
if (replyParent.author.handle !== actor) return false
|
||||||
|
|
||||||
|
// A top-level post that matches the parent of the current post.
|
||||||
|
const parentPost = posts.find(p => p.post.uri === replyParent.uri)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Either we haven't fetched the parent at the top level, or the only
|
||||||
|
* record we have is on feedItem.reply.parent, which we've already checked
|
||||||
|
* above.
|
||||||
|
*/
|
||||||
|
if (!parentPost) return true
|
||||||
|
|
||||||
|
// Walk up to parent
|
||||||
|
return isAuthorReplyChain(actor, parentPost, posts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Just default to showing it
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue