about summary refs log tree commit diff
path: root/src/state/messages
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/messages')
-rw-r--r--src/state/messages/convo.ts80
1 files changed, 57 insertions, 23 deletions
diff --git a/src/state/messages/convo.ts b/src/state/messages/convo.ts
index 4bc9913f8..c3d5ffc28 100644
--- a/src/state/messages/convo.ts
+++ b/src/state/messages/convo.ts
@@ -106,6 +106,7 @@ export class Convo {
     string,
     {id: string; message: ChatBskyConvoSendMessage.InputSchema['message']}
   > = new Map()
+  private deletedMessages: Set<string> = new Set()
   private footerItems: Map<string, ConvoItem> = new Map()
 
   private pendingEventIngestion: Promise<void> | undefined
@@ -278,6 +279,8 @@ export class Convo {
                *   this.pastMessages.set(log.message.id, log.message)
                */
               this.pastMessages.delete(log.message.id)
+              this.newMessages.delete(log.message.id)
+              this.deletedMessages.delete(log.message.id)
             }
           }
         }
@@ -411,6 +414,30 @@ export class Convo {
     }
   }
 
+  async deleteMessage(messageId: string) {
+    this.deletedMessages.add(messageId)
+    this.commit()
+
+    try {
+      await this.agent.api.chat.bsky.convo.deleteMessageForSelf(
+        {
+          convoId: this.convoId,
+          messageId,
+        },
+        {
+          encoding: 'application/json',
+          headers: {
+            Authorization: this.__tempFromUserDid,
+          },
+        },
+      )
+    } catch (e) {
+      this.deletedMessages.delete(messageId)
+      this.commit()
+      throw e
+    }
+  }
+
   /*
    * Items in reverse order, since FlatList inverts
    */
@@ -474,36 +501,43 @@ export class Convo {
       }
     })
 
-    return items.map((item, i) => {
-      let nextMessage = null
-      const isMessage = isConvoItemMessage(item)
-
-      if (isMessage) {
-        if (
-          isMessage &&
-          (ChatBskyConvoDefs.isMessageView(item.message) ||
-            ChatBskyConvoDefs.isDeletedMessageView(item.message))
-        ) {
-          const next = items[i - 1]
+    return items
+      .filter(item => {
+        if (isConvoItemMessage(item)) {
+          return !this.deletedMessages.has(item.message.id)
+        }
+        return true
+      })
+      .map((item, i) => {
+        let nextMessage = null
+        const isMessage = isConvoItemMessage(item)
 
+        if (isMessage) {
           if (
-            isConvoItemMessage(next) &&
-            next &&
-            (ChatBskyConvoDefs.isMessageView(next.message) ||
-              ChatBskyConvoDefs.isDeletedMessageView(next.message))
+            isMessage &&
+            (ChatBskyConvoDefs.isMessageView(item.message) ||
+              ChatBskyConvoDefs.isDeletedMessageView(item.message))
           ) {
-            nextMessage = next.message
+            const next = items[i - 1]
+
+            if (
+              isConvoItemMessage(next) &&
+              next &&
+              (ChatBskyConvoDefs.isMessageView(next.message) ||
+                ChatBskyConvoDefs.isDeletedMessageView(next.message))
+            ) {
+              nextMessage = next.message
+            }
           }
-        }
 
-        return {
-          ...item,
-          nextMessage,
+          return {
+            ...item,
+            nextMessage,
+          }
         }
-      }
 
-      return item
-    })
+        return item
+      })
   }
 
   destroy() {