diff --git a/ts/components/session/conversation/SessionConversation.tsx b/ts/components/session/conversation/SessionConversation.tsx index c44a0fbf7..ea0b19387 100644 --- a/ts/components/session/conversation/SessionConversation.tsx +++ b/ts/components/session/conversation/SessionConversation.tsx @@ -183,19 +183,13 @@ export class SessionConversation extends React.Component { public componentDidMount() { // Pause thread to wait for rendering to complete setTimeout(() => { - this.setState( - { - doneInitialScroll: true, - }, - () => { - const div = this.messageContainerRef.current; - div?.addEventListener('dragenter', this.handleDragIn); - div?.addEventListener('dragleave', this.handleDragOut); - div?.addEventListener('dragover', this.handleDrag); - div?.addEventListener('drop', this.handleDrop); - } - ); - }, 100); + const div = this.messageContainerRef.current; + div?.addEventListener('dragenter', this.handleDragIn); + div?.addEventListener('dragleave', this.handleDragOut); + div?.addEventListener('dragover', this.handleDrag); + div?.addEventListener('drop', this.handleDrop); + }, + 100); } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -358,6 +352,10 @@ export class SessionConversation extends React.Component { ? Constants.CONVERSATION.MAX_MESSAGE_FETCH_COUNT : msgCount; + if (msgCount < Constants.CONVERSATION.DEFAULT_MESSAGE_FETCH_COUNT) { + msgCount = Constants.CONVERSATION.DEFAULT_MESSAGE_FETCH_COUNT; + } + const messageSet = await window.Signal.Data.getMessagesByConversation( conversationKey, { limit: msgCount, MessageCollection: window.Whisper.MessageCollection } @@ -379,14 +377,8 @@ export class SessionConversation extends React.Component { messages.push({ ...messageModels[i], firstMessageOfSeries }); previousSender = messageModels[i].authorPhoneNumber; } - const oldLen = this.state.messages.length; - const newLen = messages.length; - const previousTopMessage = this.state.messages[oldLen - 1]?.id; - const newTopMessage = messages[newLen - 1]?.id; this.setState({ messages }); - - return { newTopMessage, previousTopMessage }; } public getHeaderProps() { @@ -496,27 +488,28 @@ export class SessionConversation extends React.Component { } public getMessagesListProps() { - const { conversationKey } = this.state; - const conversation = window.ConversationController.getOrThrow( - conversationKey - ); - const conversationModel = window.ConversationController.getOrThrow( - conversationKey - ); + const { conversation } = this.props; + const { + conversationKey, + messages, + initialFetchComplete, + quotedMessageTimestamp, + doneInitialScroll, + selectedMessages, + } = this.state; return { - selectedMessages: this.state.selectedMessages, - conversationKey: this.state.conversationKey, - messages: this.state.messages, + selectedMessages, + conversationKey, + messages, resetSelection: this.resetSelection, - initialFetchComplete: this.state.initialFetchComplete, - quotedMessageTimestamp: this.state.quotedMessageTimestamp, - conversationModel: conversationModel, - conversation: conversation, + initialFetchComplete, + quotedMessageTimestamp, + conversation, selectMessage: this.selectMessage, getMessages: this.getMessages, replyToMessage: this.replyToMessage, - doneInitialScroll: this.state.doneInitialScroll, + doneInitialScroll, onClickAttachment: this.onClickAttachment, onDownloadAttachment: this.downloadAttachment, messageContainerRef: this.messageContainerRef, @@ -637,11 +630,11 @@ export class SessionConversation extends React.Component { public async deleteSelectedMessages() { // Get message objects - const { conversationKey } = this.state; + const { conversationKey, messages } = this.state; const conversationModel = window.ConversationController.getOrThrow( conversationKey ); - const selectedMessages = conversationModel.messageCollection.models.filter( + const selectedMessages = messages.filter( message => this.state.selectedMessages.find( selectedMessage => selectedMessage === message.id @@ -687,7 +680,7 @@ export class SessionConversation extends React.Component { m => m.key ); const isAllOurs = selectedMessages.every(message => - ourNumbers.includes(message.get('source')) + ourNumbers.includes(message.attributes.source) ); if (!isAllOurs && !isModerator) { diff --git a/ts/components/session/conversation/SessionConversationMessagesList.tsx b/ts/components/session/conversation/SessionConversationMessagesList.tsx index 61be6bea3..5e0d64557 100644 --- a/ts/components/session/conversation/SessionConversationMessagesList.tsx +++ b/ts/components/session/conversation/SessionConversationMessagesList.tsx @@ -11,6 +11,8 @@ import { ConversationModel } from '../../../../js/models/conversations'; import { contextMenu } from 'react-contexify'; import { AttachmentType } from '../../../types/Attachment'; import { GroupNotification } from '../../conversation/GroupNotification'; +import { GroupInvitation } from '../../conversation/GroupInvitation'; +import { ConversationType } from '../../../state/ducks/conversations'; interface State { isScrolledToBottom: boolean; @@ -23,11 +25,10 @@ interface Props { conversationKey: string; messages: Array; initialFetchComplete: boolean; - conversationModel: ConversationModel; - conversation: any; + conversation: ConversationType; messageContainerRef: React.RefObject; selectMessage: (messageId: string) => void; - getMessages: (numMessages: number) => Promise<{ previousTopMessage: string }>; + getMessages: (numMessages: number) => Promise; replyToMessage: (messageId: number) => Promise; onClickAttachment: (attachment: any, message: any) => void; onDownloadAttachment: ({ attachment }: { attachment: any }) => void; @@ -74,11 +75,6 @@ export class SessionConversationMessagesList extends React.Component< this.scrollToBottom(); // this.updateReadMessages(); } - - // New messages get from message collection. - const messageCollection = window.ConversationController.get( - this.props.conversationKey - )?.messageCollection; } public render() { @@ -116,14 +112,18 @@ export class SessionConversationMessagesList extends React.Component< const timerProps = message.propsForTimerNotification; const resetSessionProps = message.propsForResetSessionNotification; + const propsForGroupInvitation = message.propsForGroupInvitation; - const attachmentProps = message.propsForAttachment; const groupNotificationProps = message.propsForGroupNotification; if (groupNotificationProps) { return ; } + if (propsForGroupInvitation) { + return ; + } + if (resetSessionProps) { return ; } @@ -182,8 +182,6 @@ export class SessionConversationMessagesList extends React.Component< const { messages, conversationKey } = this.props; const { isScrolledToBottom } = this.state; - // If you're not friends, don't mark anything as read. Otherwise - // this will automatically accept friend request. const conversation = window.ConversationController.getOrThrow( conversationKey ); @@ -322,13 +320,13 @@ export class SessionConversationMessagesList extends React.Component< scrollTop <= Constants.UI.MESSAGE_CONTAINER_BUFFER_OFFSET_PX; if (shouldFetchMoreMessages) { + const { messages } = this.props; const numMessages = this.props.messages.length + Constants.CONVERSATION.DEFAULT_MESSAGE_FETCH_COUNT; + const previousTopMessage = messages[messages.length - 1]?.id; - const previousTopMessage = (await this.props.getMessages(numMessages)) - ?.previousTopMessage; - + await this.props.getMessages(numMessages); if (previousTopMessage) { this.scrollToMessage(previousTopMessage); }