diff --git a/ts/components/leftpane/conversation-list-item/InteractionItem.tsx b/ts/components/leftpane/conversation-list-item/InteractionItem.tsx index 2d81a2492..6a2ef801f 100644 --- a/ts/components/leftpane/conversation-list-item/InteractionItem.tsx +++ b/ts/components/leftpane/conversation-list-item/InteractionItem.tsx @@ -1,16 +1,16 @@ -import React, { useEffect, useState } from 'react'; import { isEmpty } from 'lodash'; +import React, { useEffect, useState } from 'react'; +import styled from 'styled-components'; import { useIsPrivate, useIsPublic } from '../../../hooks/useParamSelector'; -import { MessageBody } from '../../conversation/message/message-content/MessageBody'; -import { assertUnreachable } from '../../../types/sqlSharedTypes'; import { ConversationInteractionStatus, ConversationInteractionType, } from '../../../interactions/conversationInteractions'; -import styled from 'styled-components'; import { getConversationController } from '../../../session/conversations'; import { LastMessageType } from '../../../state/ducks/conversations'; +import { assertUnreachable } from '../../../types/sqlSharedTypes'; +import { MessageBody } from '../../conversation/message/message-content/MessageBody'; const StyledInteractionItemText = styled.div<{ isError: boolean }>` ${props => props.isError && 'color: var(--danger-color) !important;'} @@ -26,16 +26,6 @@ export const InteractionItem = (props: InteractionItemProps) => { const isGroup = !useIsPrivate(conversationId); const isCommunity = useIsPublic(conversationId); - if (!lastMessage) { - return null; - } - - const { interactionType, interactionStatus } = lastMessage; - - if (!interactionType || !interactionStatus) { - return null; - } - const [storedLastMessageText, setStoredLastMessageText] = useState(lastMessage?.text); const [storedLastMessageInteractionStatus, setStoredLastMessageInteractionStatus] = useState( lastMessage?.interactionStatus @@ -51,7 +41,17 @@ export const InteractionItem = (props: InteractionItemProps) => { setStoredLastMessageText(convo.get('lastMessage')); } } - }, [conversationId]); + }, [conversationId, storedLastMessageInteractionStatus]); + + if (!lastMessage) { + return null; + } + + const { interactionType, interactionStatus } = lastMessage || {}; + + if (!interactionType || !interactionStatus) { + return null; + } let text = storedLastMessageText || ''; let errorText = ''; diff --git a/ts/interactions/conversationInteractions.ts b/ts/interactions/conversationInteractions.ts index 7295933a8..de0509504 100644 --- a/ts/interactions/conversationInteractions.ts +++ b/ts/interactions/conversationInteractions.ts @@ -12,6 +12,7 @@ import { Data } from '../data/data'; import { SettingsKey } from '../data/settings-key'; import { uploadFileToFsWithOnionV4 } from '../session/apis/file_server_api/FileServerApi'; import { OpenGroupUtils } from '../session/apis/open_group_api/utils'; +import { GetNetworkTime } from '../session/apis/snode_api/getNetworkTime'; import { getConversationController } from '../session/conversations'; import { getSodiumRenderer } from '../session/crypto'; import { getDecryptedMediaUrl } from '../session/crypto/DecryptedAttachmentsManager'; @@ -45,7 +46,6 @@ import { encryptProfile } from '../util/crypto/profileEncrypter'; import { ReleasedFeatures } from '../util/releaseFeature'; import { Storage, setLastProfileUpdateTimestamp } from '../util/storage'; import { UserGroupsWrapperActions } from '../webworker/workers/browser/libsession_worker_interface'; -import { GetNetworkTime } from '../session/apis/snode_api/getNetworkTime'; export enum ConversationInteractionStatus { Start = 'start', @@ -395,20 +395,18 @@ export async function showLeaveGroupByConvoId(conversationId: string, name: stri // conversationId, // }) // ); - } else { - if (isPublic || (isClosedGroup && !isAdmin)) { - window?.inboxStore?.dispatch( - updateConfirmModal({ - title: isPublic ? window.i18n('leaveCommunity') : window.i18n('leaveGroup'), - message: window.i18n('leaveGroupConfirmation', name ? [name] : ['']), - onClickOk, - okText: window.i18n('leave'), - okTheme: SessionButtonColor.Danger, - onClickClose, - conversationId, - }) - ); - } + } else if (isPublic || (isClosedGroup && !isAdmin)) { + window?.inboxStore?.dispatch( + updateConfirmModal({ + title: isPublic ? window.i18n('leaveCommunity') : window.i18n('leaveGroup'), + message: window.i18n('leaveGroupConfirmation', name ? [name] : ['']), + onClickOk, + okText: window.i18n('leave'), + okTheme: SessionButtonColor.Danger, + onClickClose, + conversationId, + }) + ); } } diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index e53218308..ce7445fca 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -415,17 +415,17 @@ export class ConversationModel extends Backbone.Model { interactionType: lastMessageInteractionType, interactionStatus: lastMessageInteractionStatus, }; - } else { + } else if (lastMessageInteractionType && lastMessageInteractionStatus) { // if there is no last message, we still want to display the interaction status - if (lastMessageInteractionType && lastMessageInteractionStatus) { - toRet.lastMessage = { - text: '', - status: 'sent', - interactionType: lastMessageInteractionType, - interactionStatus: lastMessageInteractionStatus, - }; - } + + toRet.lastMessage = { + text: '', + status: 'sent', + interactionType: lastMessageInteractionType, + interactionStatus: lastMessageInteractionStatus, + }; } + return toRet; }