diff --git a/ts/components/conversation/MessageContextMenu.tsx b/ts/components/conversation/MessageContextMenu.tsx index a1ad0402b..979cad391 100644 --- a/ts/components/conversation/MessageContextMenu.tsx +++ b/ts/components/conversation/MessageContextMenu.tsx @@ -101,7 +101,7 @@ export const MessageContextMenu = (props: PropsForMessageContextMenu) => { const saveAttachment = useCallback( (e: any) => { - e.stopPropagation(); + e.event.stopPropagation(); if (!attachments?.length) { return; } diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index 7cba013e7..c063918ec 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -825,7 +825,7 @@ export class ConversationModel extends Backbone.Model { _.defaults(options, { fromSync: false }); if (!expireTimer) { - expireTimer = null; + expireTimer = 0; } if (this.get('expireTimer') === expireTimer || (!expireTimer && !this.get('expireTimer'))) { return null; @@ -852,6 +852,7 @@ export class ConversationModel extends Backbone.Model { // indicator above it. We set it to 'unread' to trigger that placement. unread: isOutgoing ? 0 : 1, conversationId: this.id, + source, // No type; 'incoming' messages are specially treated by conversation.markRead() sent_at: timestamp, received_at: timestamp, diff --git a/ts/models/message.ts b/ts/models/message.ts index d8bdbc72c..7eb86a6da 100644 --- a/ts/models/message.ts +++ b/ts/models/message.ts @@ -513,6 +513,7 @@ export class MessageModel extends Backbone.Model { // isSelected: this.isSelected, id: this.id as string, conversationId: this.get('conversationId'), + source: this.get('source'), receivedAt: this.get('received_at'), snippet: this.get('snippet'), }; diff --git a/ts/models/messageType.ts b/ts/models/messageType.ts index aabea47b7..eb5ae7c28 100644 --- a/ts/models/messageType.ts +++ b/ts/models/messageType.ts @@ -115,7 +115,7 @@ export type PropsForDataExtractionNotification = DataExtractionNotificationMsg & export interface MessageAttributesOptionals { id?: string; - source?: string; + source: string; quote?: any; expireTimer?: number; received_at?: number; diff --git a/ts/receiver/contentMessage.ts b/ts/receiver/contentMessage.ts index 8ca06b0b4..5924660b6 100644 --- a/ts/receiver/contentMessage.ts +++ b/ts/receiver/contentMessage.ts @@ -515,6 +515,7 @@ export async function handleDataExtractionNotification( await convo.addSingleMessage({ conversationId: convo.get('id'), + source, type: 'outgoing', // mark it as outgoing just so it appears below our sent attachment sent_at: envelopeTimestamp, received_at: now, diff --git a/ts/session/group/index.ts b/ts/session/group/index.ts index 23ba35529..4e59db40b 100644 --- a/ts/session/group/index.ts +++ b/ts/session/group/index.ts @@ -164,8 +164,11 @@ export async function addUpdateMessage( const unread = type === 'incoming'; + const source = UserUtils.getOurPubKeyStrFromCache(); + const message = await convo.addSingleMessage({ conversationId: convo.get('id'), + source, type, sent_at: sentAt, received_at: now, @@ -313,9 +316,12 @@ export async function leaveClosedGroup(groupId: string) { convo.set({ groupAdmins: admins }); await convo.commit(); + const source = UserUtils.getOurPubKeyStrFromCache(); + const dbMessage = await convo.addSingleMessage({ group_update: { left: 'You' }, conversationId: groupId, + source, type: 'outgoing', sent_at: now, received_at: now, diff --git a/ts/state/ducks/conversations.ts b/ts/state/ducks/conversations.ts index 9ec7d65d1..0af0de3a3 100644 --- a/ts/state/ducks/conversations.ts +++ b/ts/state/ducks/conversations.ts @@ -128,6 +128,7 @@ export type PropsForSearchResults = { to: FindAndFormatContactType; id: string; conversationId: string; + source: string; receivedAt: number | undefined; snippet?: string; //not sure about the type of snippet };