about summary refs log tree commit diff
path: root/src/state/models/feed-view.ts
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-01-18 16:45:48 -0600
committerPaul Frazee <pfrazee@gmail.com>2023-01-18 16:45:48 -0600
commitebc2033d186af6cf81f9533082857ee4a8fa6822 (patch)
treee3438b8bb28d8b8459a6f6346f363628d8cdc623 /src/state/models/feed-view.ts
parentace0e6bfd963305c140ecc97d9e82b749066a394 (diff)
downloadvoidsky-ebc2033d186af6cf81f9533082857ee4a8fa6822.tar.zst
Handle post deletions by removing from active views (close #37)
Diffstat (limited to 'src/state/models/feed-view.ts')
-rw-r--r--src/state/models/feed-view.ts25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/state/models/feed-view.ts b/src/state/models/feed-view.ts
index 5697108a1..2b3fba64c 100644
--- a/src/state/models/feed-view.ts
+++ b/src/state/models/feed-view.ts
@@ -166,6 +166,7 @@ export class FeedItemModel {
       did: this.post.author.did,
       rkey: new AtUri(this.post.uri).rkey,
     })
+    this.rootStore.emitPostDeleted(this.post.uri)
   }
 }
 
@@ -256,6 +257,14 @@ export class FeedModel {
   }
 
   /**
+   * Register any event listeners. Returns a cleanup function.
+   */
+  registerListeners() {
+    const sub = this.rootStore.onPostDeleted(this.onPostDeleted.bind(this))
+    return () => sub.remove()
+  }
+
+  /**
    * Reset and load
    */
   async refresh() {
@@ -303,7 +312,7 @@ export class FeedModel {
   }
 
   /**
-   * Check if new postrs are available
+   * Check if new posts are available
    */
   async checkForLatest() {
     if (this.hasNewLatest) {
@@ -322,6 +331,20 @@ export class FeedModel {
     this.setHasNewLatest(hasNewLatest)
   }
 
+  /**
+   * Removes posts from the feed upon deletion.
+   */
+  onPostDeleted(uri: string) {
+    console.log('hit', uri)
+    let i
+    do {
+      i = this.feed.findIndex(item => item.post.uri === uri)
+      if (i !== -1) {
+        this.feed.splice(i, 1)
+      }
+    } while (i !== -1)
+  }
+
   // state transitions
   // =