cleanup duplicated code between Conversation and ConversationList

pull/1387/head
Audric Ackermann 5 years ago
parent 35d9e2a207
commit dd93a849d7
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -183,19 +183,13 @@ export class SessionConversation extends React.Component<Props, State> {
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);
},
100);
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -358,6 +352,10 @@ export class SessionConversation extends React.Component<Props, State> {
? 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<Props, State> {
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<Props, State> {
}
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<Props, State> {
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<Props, State> {
m => m.key
);
const isAllOurs = selectedMessages.every(message =>
ourNumbers.includes(message.get('source'))
ourNumbers.includes(message.attributes.source)
);
if (!isAllOurs && !isModerator) {

@ -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<any>;
initialFetchComplete: boolean;
conversationModel: ConversationModel;
conversation: any;
conversation: ConversationType;
messageContainerRef: React.RefObject<any>;
selectMessage: (messageId: string) => void;
getMessages: (numMessages: number) => Promise<{ previousTopMessage: string }>;
getMessages: (numMessages: number) => Promise<void>;
replyToMessage: (messageId: number) => Promise<void>;
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 <GroupNotification {...groupNotificationProps} />;
}
if (propsForGroupInvitation) {
return <GroupInvitation {...propsForGroupInvitation} />;
}
if (resetSessionProps) {
return <ResetSessionNotification {...resetSessionProps} />;
}
@ -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);
}

Loading…
Cancel
Save