Skip to content

Commit

Permalink
Filter non-self threads from profile view (#1757)
Browse files Browse the repository at this point in the history
  • Loading branch information
estrattonbailey authored Oct 31, 2023
1 parent 4075298 commit ddf0a1c
Showing 1 changed file with 47 additions and 1 deletion.
48 changes: 47 additions & 1 deletion src/lib/api/feed/author.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,57 @@ export class AuthorFeedAPI implements FeedAPI {
this.cursor = res.data.cursor
return {
cursor: res.data.cursor,
feed: res.data.feed,
feed: this._filter(res.data.feed),
}
}
return {
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
}

0 comments on commit ddf0a1c

Please sign in to comment.