about summary refs log tree commit diff
path: root/src/state/models/feeds/algo
diff options
context:
space:
mode:
authorAnsh Nanda <anshnanda10@gmail.com>2023-05-16 16:07:07 -0700
committerAnsh Nanda <anshnanda10@gmail.com>2023-05-16 16:07:07 -0700
commit3f41d3db2603e75b6443487ce261a05f8e14076d (patch)
tree866d4e4aab297a23b39a60f383ac32a59fca7499 /src/state/models/feeds/algo
parentf2e39d8ad24041637810327ca28ad78f9f36bf2f (diff)
downloadvoidsky-3f41d3db2603e75b6443487ce261a05f8e14076d.tar.zst
make sure state is being synced across components
Diffstat (limited to 'src/state/models/feeds/algo')
-rw-r--r--src/state/models/feeds/algo/algo-item.ts28
-rw-r--r--src/state/models/feeds/algo/saved.ts18
2 files changed, 21 insertions, 25 deletions
diff --git a/src/state/models/feeds/algo/algo-item.ts b/src/state/models/feeds/algo/algo-item.ts
index 39bc760ac..8291b6d86 100644
--- a/src/state/models/feeds/algo/algo-item.ts
+++ b/src/state/models/feeds/algo/algo-item.ts
@@ -67,30 +67,12 @@ export class AlgoItemModel {
     }
   }
 
-  // public apis
-  // =
-  async save() {
-    try {
-      this.toggleSaved = true
-      await this.rootStore.agent.app.bsky.feed.saveFeed({
-        feed: this.data.uri,
-      })
-    } catch (e: any) {
-      this.rootStore.log.error('Failed to save feed', e)
-    }
-  }
-
-  async unsave() {
-    try {
-      this.toggleSaved = false
-      await this.rootStore.agent.app.bsky.feed.unsaveFeed({
-        feed: this.data.uri,
-      })
-    } catch (e: any) {
-      this.rootStore.log.error('Failed to unsanve feed', e)
-    }
+  private rewriteData(data: AppBskyFeedDefs.GeneratorView) {
+    this.data = data
   }
 
+  // public apis
+  // =
   async like() {
     try {
       const res = await this.rootStore.agent.app.bsky.feed.like.create(
@@ -151,7 +133,7 @@ export class AlgoItemModel {
     const res = await this.rootStore.agent.app.bsky.feed.getFeedGenerator({
       feed: this.data.uri,
     })
-    this.data = res.data.view
+    this.rewriteData(res.data.view)
   }
 
   serialize() {
diff --git a/src/state/models/feeds/algo/saved.ts b/src/state/models/feeds/algo/saved.ts
index 15859fe0c..97d75820d 100644
--- a/src/state/models/feeds/algo/saved.ts
+++ b/src/state/models/feeds/algo/saved.ts
@@ -71,6 +71,12 @@ export class SavedFeedsModel {
     )
   }
 
+  get listOfPinnedFeedNames() {
+    return this.pinned.map(
+      f => f.data.displayName ?? f.data.creator.displayName + "'s feed",
+    )
+  }
+
   get savedFeedsWithoutPinned() {
     return this.feeds.filter(
       f => !this.pinned.find(p => p.data.uri === f.data.uri),
@@ -81,10 +87,14 @@ export class SavedFeedsModel {
     if (!this.isPinned(feed)) {
       this.pinned.push(feed)
     } else {
-      this.pinned = this.pinned.filter(f => f.data.uri !== feed.data.uri)
+      this.removePinnedFeed(feed.data.uri)
     }
   }
 
+  removePinnedFeed(uri: string) {
+    this.pinned = this.pinned.filter(f => f.data.uri !== uri)
+  }
+
   reorderPinnedFeeds(temp: AlgoItemModel[]) {
     this.pinned = temp
   }
@@ -144,18 +154,22 @@ export class SavedFeedsModel {
       await this.rootStore.agent.app.bsky.feed.saveFeed({
         feed: algoItem.getUri,
       })
+      algoItem.toggleSaved = true
       this.addFeed(algoItem)
     } catch (e: any) {
       this.rootStore.log.error('Failed to save feed', e)
     }
   }
 
-  async unsave(uri: string) {
+  async unsave(algoItem: AlgoItemModel) {
+    const uri = algoItem.getUri
     try {
       await this.rootStore.agent.app.bsky.feed.unsaveFeed({
         feed: uri,
       })
+      algoItem.toggleSaved = false
       this.removeFeed(uri)
+      this.removePinnedFeed(uri)
     } catch (e: any) {
       this.rootStore.log.error('Failed to unsanve feed', e)
     }