about summary refs log tree commit diff
path: root/src/lib/api/feed
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2024-09-27 22:50:32 +0100
committerGitHub <noreply@github.com>2024-09-28 00:50:32 +0300
commit4b5d6e6efb09a714d82e2093dec39c85400a2de6 (patch)
tree981d0e08b30549234e02be49dbb190e55740556f /src/lib/api/feed
parentf68b15219fd02e23d965015201400138ed69d59d (diff)
downloadvoidsky-4b5d6e6efb09a714d82e2093dec39c85400a2de6.tar.zst
Pinned posts (#5055)
* add to dropdown menu

* use normal profile mutation hook

* add pin as reason

* request pins

* shadow update

* rm logs

* get prev pinned from getProfile

* fix toasts

* invalidate after appview ready

* don't mutate params

* rm log

* use checkCommited rather than manual whenAppViewReady

* move to mutation

* even more optimistic optimistic update

* allow pins in `posts_and_author_threads`

* update @atproto/api

* add reasonPin type

* fix strange type error in unrelated query

* another missing type
Diffstat (limited to 'src/lib/api/feed')
-rw-r--r--src/lib/api/feed/author.ts13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/lib/api/feed/author.ts b/src/lib/api/feed/author.ts
index 56eff1881..50e6a447e 100644
--- a/src/lib/api/feed/author.ts
+++ b/src/lib/api/feed/author.ts
@@ -8,7 +8,7 @@ import {FeedAPI, FeedAPIResponse} from './types'
 
 export class AuthorFeedAPI implements FeedAPI {
   agent: BskyAgent
-  params: GetAuthorFeed.QueryParams
+  _params: GetAuthorFeed.QueryParams
 
   constructor({
     agent,
@@ -18,7 +18,13 @@ export class AuthorFeedAPI implements FeedAPI {
     feedParams: GetAuthorFeed.QueryParams
   }) {
     this.agent = agent
-    this.params = feedParams
+    this._params = feedParams
+  }
+
+  get params() {
+    const params = {...this._params}
+    params.includePins = params.filter !== 'posts_with_media'
+    return params
   }
 
   async peekLatest(): Promise<AppBskyFeedDefs.FeedViewPost> {
@@ -57,8 +63,9 @@ export class AuthorFeedAPI implements FeedAPI {
       return feed.filter(post => {
         const isReply = post.reply
         const isRepost = AppBskyFeedDefs.isReasonRepost(post.reason)
+        const isPin = AppBskyFeedDefs.isReasonPin(post.reason)
         if (!isReply) return true
-        if (isRepost) return true
+        if (isRepost || isPin) return true
         return isReply && isAuthorReplyChain(this.params.actor, post, feed)
       })
     }