From 9e2411ce300e327e33d0e1034c5d662246deeb67 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Thu, 4 Mar 2021 10:06:49 -0800 Subject: [PATCH] Remove getIsConversationEmptySelector in favor of messageCount --- ts/models/conversations.ts | 1 + ts/state/ducks/conversations.ts | 1 + ts/state/selectors/conversations.ts | 14 ---- ts/state/smart/CompositionArea.tsx | 15 ++-- ts/state/smart/ConversationHeader.tsx | 15 ++-- .../state/selectors/conversations_test.ts | 69 ------------------- 6 files changed, 18 insertions(+), 97 deletions(-) diff --git a/ts/models/conversations.ts b/ts/models/conversations.ts index 4fd817e53e..549a74980c 100644 --- a/ts/models/conversations.ts +++ b/ts/models/conversations.ts @@ -1336,6 +1336,7 @@ export class ConversationModel extends window.Backbone.Model< markedUnread: this.get('markedUnread')!, membersCount: this.getMembersCount(), memberships: this.getMemberships(), + messageCount: this.get('messageCount') || 0, pendingMemberships: this.getPendingMemberships(), pendingApprovalMemberships: this.getPendingApprovalMemberships(), messageRequestsEnabled, diff --git a/ts/state/ducks/conversations.ts b/ts/state/ducks/conversations.ts index b6767fa7aa..93280c47f4 100644 --- a/ts/state/ducks/conversations.ts +++ b/ts/state/ducks/conversations.ts @@ -91,6 +91,7 @@ export type ConversationType = { markedUnread?: boolean; phoneNumber?: string; membersCount?: number; + messageCount?: number; accessControlAddFromInviteLink?: number; accessControlAttributes?: number; accessControlMembers?: number; diff --git a/ts/state/selectors/conversations.ts b/ts/state/selectors/conversations.ts index 22db86a242..7a2227e883 100644 --- a/ts/state/selectors/conversations.ts +++ b/ts/state/selectors/conversations.ts @@ -181,20 +181,6 @@ export const getMessagesByConversation = createSelector( } ); -export const getIsConversationEmptySelector = createSelector( - getMessagesByConversation, - (messagesByConversation: MessagesByConversationType) => ( - conversationId: string - ): boolean => { - const messages = getOwn(messagesByConversation, conversationId); - if (!messages) { - assert(false, 'Could not find conversation with this ID'); - return true; - } - return messages.messageIds.length === 0; - } -); - const collator = new Intl.Collator(); // Note: we will probably want to put i18n and regionCode back when we are formatting diff --git a/ts/state/smart/CompositionArea.tsx b/ts/state/smart/CompositionArea.tsx index 1bed153beb..43b9722b3a 100644 --- a/ts/state/smart/CompositionArea.tsx +++ b/ts/state/smart/CompositionArea.tsx @@ -10,10 +10,7 @@ import { StateType } from '../reducer'; import { isShortName } from '../../components/emoji/lib'; import { getIntl } from '../selectors/user'; -import { - getConversationSelector, - getIsConversationEmptySelector, -} from '../selectors/conversations'; +import { getConversationSelector } from '../selectors/conversations'; import { getBlessedStickerPacks, getInstalledStickerPacks, @@ -81,10 +78,14 @@ const mapStateToProps = (state: StateType, props: ExternalProps) => { // Message Requests ...conversation, conversationType: conversation.type, - isMissingMandatoryProfileSharing: + isMissingMandatoryProfileSharing: Boolean( !conversation.profileSharing && - window.Signal.RemoteConfig.isEnabled('desktop.mandatoryProfileSharing') && - !getIsConversationEmptySelector(state)(id), + window.Signal.RemoteConfig.isEnabled( + 'desktop.mandatoryProfileSharing' + ) && + conversation.messageCount && + conversation.messageCount > 0 + ), }; }; diff --git a/ts/state/smart/ConversationHeader.tsx b/ts/state/smart/ConversationHeader.tsx index 53905d1da3..304d7c235a 100644 --- a/ts/state/smart/ConversationHeader.tsx +++ b/ts/state/smart/ConversationHeader.tsx @@ -7,10 +7,7 @@ import { ConversationHeader, OutgoingCallButtonStyle, } from '../../components/conversation/ConversationHeader'; -import { - getConversationSelector, - getIsConversationEmptySelector, -} from '../selectors/conversations'; +import { getConversationSelector } from '../selectors/conversations'; import { StateType } from '../reducer'; import { CallMode } from '../../types/Calling'; import { @@ -110,10 +107,14 @@ const mapStateToProps = (state: StateType, ownProps: OwnProps) => { 'groupVersion', ]), conversationTitle: state.conversations.selectedConversationTitle, - isMissingMandatoryProfileSharing: + isMissingMandatoryProfileSharing: Boolean( !conversation.profileSharing && - window.Signal.RemoteConfig.isEnabled('desktop.mandatoryProfileSharing') && - !getIsConversationEmptySelector(state)(id), + window.Signal.RemoteConfig.isEnabled( + 'desktop.mandatoryProfileSharing' + ) && + conversation.messageCount && + conversation.messageCount > 0 + ), i18n: getIntl(state), showBackButton: state.conversations.selectedConversationPanelDepth > 0, outgoingCallButtonStyle: getOutgoingCallButtonStyle(conversation, state), diff --git a/ts/test-both/state/selectors/conversations_test.ts b/ts/test-both/state/selectors/conversations_test.ts index 7afa0bcce6..06328ca12f 100644 --- a/ts/test-both/state/selectors/conversations_test.ts +++ b/ts/test-both/state/selectors/conversations_test.ts @@ -23,7 +23,6 @@ import { getComposerStep, getConversationSelector, getInvitedContactsForNewlyCreatedGroup, - getIsConversationEmptySelector, getMaximumGroupSizeModalState, getPlaceholderContact, getRecommendedGroupSizeModalState, @@ -257,74 +256,6 @@ describe('both/state/selectors/conversations', () => { }); }); - describe('#getIsConversationEmptySelector', () => { - it('returns a selector that returns true for conversations that have no messages', () => { - const state = { - ...getEmptyRootState(), - conversations: { - ...getEmptyState(), - messagesByConversation: { - abc123: { - heightChangeMessageIds: [], - isLoadingMessages: false, - messageIds: [], - metrics: { totalUnread: 0 }, - resetCounter: 0, - scrollToMessageCounter: 0, - }, - }, - }, - }; - const selector = getIsConversationEmptySelector(state); - - assert.isTrue(selector('abc123')); - }); - - it('returns a selector that returns true for conversations that have no messages, even if loading', () => { - const state = { - ...getEmptyRootState(), - conversations: { - ...getEmptyState(), - messagesByConversation: { - abc123: { - heightChangeMessageIds: [], - isLoadingMessages: true, - messageIds: [], - metrics: { totalUnread: 0 }, - resetCounter: 0, - scrollToMessageCounter: 0, - }, - }, - }, - }; - const selector = getIsConversationEmptySelector(state); - - assert.isTrue(selector('abc123')); - }); - - it('returns a selector that returns false for conversations that have messages', () => { - const state = { - ...getEmptyRootState(), - conversations: { - ...getEmptyState(), - messagesByConversation: { - abc123: { - heightChangeMessageIds: [], - isLoadingMessages: false, - messageIds: ['xyz'], - metrics: { totalUnread: 0 }, - resetCounter: 0, - scrollToMessageCounter: 0, - }, - }, - }, - }; - const selector = getIsConversationEmptySelector(state); - - assert.isFalse(selector('abc123')); - }); - }); - describe('#getComposerStep', () => { it("returns undefined if the composer isn't open", () => { const state = getEmptyRootState();