From 2d664a2df759cb3b1b0c3b84cbf87dbdce3ac893 Mon Sep 17 00:00:00 2001 From: warrickct Date: Tue, 23 Nov 2021 16:03:24 +1100 Subject: [PATCH] Applying PR changes. --- ts/components/ConversationListItem.tsx | 6 +- ts/components/LeftPane.tsx | 6 +- .../session/LeftPaneMessageSection.tsx | 2 - .../session/MessageRequestsBanner.tsx | 8 +- .../session/SessionClosableOverlay.tsx | 7 +- ts/receiver/queuedJob.ts | 8 +- ts/state/selectors/conversations.ts | 79 ++++++++++++++++--- ts/window.d.ts | 5 -- 8 files changed, 88 insertions(+), 33 deletions(-) diff --git a/ts/components/ConversationListItem.tsx b/ts/components/ConversationListItem.tsx index cba97902f..4cd52f7e8 100644 --- a/ts/components/ConversationListItem.tsx +++ b/ts/components/ConversationListItem.tsx @@ -377,15 +377,15 @@ const ConversationListItem = (props: Props) => { Block - Accept - + text={window.i18n('accept')} + > ) : null} diff --git a/ts/components/LeftPane.tsx b/ts/components/LeftPane.tsx index 30623f91f..81beaef98 100644 --- a/ts/components/LeftPane.tsx +++ b/ts/components/LeftPane.tsx @@ -8,7 +8,7 @@ import { LeftPaneSettingSection } from './session/LeftPaneSettingSection'; import { SessionTheme } from '../state/ducks/SessionTheme'; import { getFocusedSection } from '../state/selectors/section'; import { useSelector } from 'react-redux'; -import { getLeftPaneLists } from '../state/selectors/conversations'; +import { getConversationRequests, getLeftPaneLists } from '../state/selectors/conversations'; import { getQuery, getSearchResults, isSearching } from '../state/selectors/search'; import { SectionType } from '../state/ducks/section'; @@ -29,12 +29,14 @@ const InnerLeftPaneMessageSection = () => { const searchResults = showSearch ? useSelector(getSearchResults) : undefined; const lists = showSearch ? undefined : useSelector(getLeftPaneLists); + const conversationRequests = useSelector(getConversationRequests); + // tslint:disable: use-simple-attributes return ( diff --git a/ts/components/session/LeftPaneMessageSection.tsx b/ts/components/session/LeftPaneMessageSection.tsx index 89a17b140..c12ea5843 100644 --- a/ts/components/session/LeftPaneMessageSection.tsx +++ b/ts/components/session/LeftPaneMessageSection.tsx @@ -65,8 +65,6 @@ export class LeftPaneMessageSection extends React.Component { public constructor(props: Props) { super(props); - console.warn('convos updated'); - this.state = { loading: false, overlay: false, diff --git a/ts/components/session/MessageRequestsBanner.tsx b/ts/components/session/MessageRequestsBanner.tsx index f281bface..7e2f5408e 100644 --- a/ts/components/session/MessageRequestsBanner.tsx +++ b/ts/components/session/MessageRequestsBanner.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { useSelector } from 'react-redux'; import styled from 'styled-components'; -import { getLeftPaneLists } from '../../state/selectors/conversations'; +import { getConversationRequests } from '../../state/selectors/conversations'; import { SessionIcon, SessionIconSize, SessionIconType } from './icon'; const StyledMessageRequestBanner = styled.div` @@ -83,9 +83,9 @@ export const CirclularIcon = (props: { iconType: SessionIconType; iconSize: Sess export const MessageRequestsBanner = (props: { handleOnClick: () => any }) => { const { handleOnClick } = props; - const convos = useSelector(getLeftPaneLists).conversationRequests; + const conversationRequests = useSelector(getConversationRequests); - if (!convos.length) { + if (!conversationRequests.length) { return null; } @@ -94,7 +94,7 @@ export const MessageRequestsBanner = (props: { handleOnClick: () => any }) => { Message Requests -
{convos.length || 0}
+
{conversationRequests.length || 0}
); diff --git a/ts/components/session/SessionClosableOverlay.tsx b/ts/components/session/SessionClosableOverlay.tsx index ad4edeb0e..a533d09a2 100644 --- a/ts/components/session/SessionClosableOverlay.tsx +++ b/ts/components/session/SessionClosableOverlay.tsx @@ -10,7 +10,7 @@ import { ConversationTypeEnum } from '../../models/conversation'; import { SessionJoinableRooms } from './SessionJoinableDefaultRooms'; import { SpacerLG, SpacerMD } from '../basic/Text'; import { useSelector } from 'react-redux'; -import { getLeftPaneLists } from '../../state/selectors/conversations'; +import { getConversationRequests } from '../../state/selectors/conversations'; import { ConversationListItemProps, MemoConversationListItemWithDetails, @@ -295,11 +295,10 @@ export class SessionClosableOverlay extends React.Component { * @returns List of message request items */ const MessageRequestList = () => { - const lists = useSelector(getLeftPaneLists); - const validConversationRequests = lists?.conversationRequests; + const conversationRequests = useSelector(getConversationRequests); return (
- {validConversationRequests.map(conversation => { + {conversationRequests.map(conversation => { return ; })}
diff --git a/ts/receiver/queuedJob.ts b/ts/receiver/queuedJob.ts index cdf3cbd61..274770287 100644 --- a/ts/receiver/queuedJob.ts +++ b/ts/receiver/queuedJob.ts @@ -317,11 +317,13 @@ async function handleRegularMessage( updateReadStatus(message, conversation); } - if (type === 'outgoing' && window.lokiFeatureFlags.useMessageRequests) { + if (type === 'outgoing') { await handleSyncedReceipts(message, conversation); - // assumes sync receipts are always from linked device outgoings - await conversation.setIsApproved(true); + if (window.lokiFeatureFlags.useMessageRequests) { + // assumes sync receipts are always from linked device outgoings + await conversation.setIsApproved(true); + } } const conversationActiveAt = conversation.get('active_at'); diff --git a/ts/state/selectors/conversations.ts b/ts/state/selectors/conversations.ts index bf1f80567..ed0022ab4 100644 --- a/ts/state/selectors/conversations.ts +++ b/ts/state/selectors/conversations.ts @@ -429,7 +429,6 @@ export const _getLeftPaneLists = ( ): { conversations: Array; contacts: Array; - conversationRequests: Array; unreadCount: number; } => { const values = Object.values(lookup); @@ -437,7 +436,6 @@ export const _getLeftPaneLists = ( const conversations: Array = []; const directConversations: Array = []; - const conversationRequests: Array = []; let unreadCount = 0; for (let conversation of sorted) { @@ -459,7 +457,7 @@ export const _getLeftPaneLists = ( } let messageRequestsEnabled = false; - // TODO: if message requests toggle on and msg requesnt enable + if (window?.inboxStore?.getState()) { messageRequestsEnabled = window.inboxStore?.getState().userConfig.messageRequests === true && @@ -481,12 +479,9 @@ export const _getLeftPaneLists = ( directConversations.push(conversation); } - if (messageRequestsEnabled) { - if (!conversation.isApproved && !conversation.isBlocked) { - // dont increase unread counter, don't push to convo list. - conversationRequests.push(conversation); - continue; - } + if (messageRequestsEnabled && !conversation.isApproved && !conversation.isBlocked) { + // dont increase unread counter, don't push to convo list. + continue; } if ( @@ -504,11 +499,75 @@ export const _getLeftPaneLists = ( return { conversations, contacts: directConversations, - conversationRequests, unreadCount, }; }; +export const _getConversationRequests = ( + lookup: ConversationLookupType, + comparator: (left: ReduxConversationType, right: ReduxConversationType) => number, + selectedConversation?: string +): Array => { + const values = Object.values(lookup); + const sorted = values.sort(comparator); + + const conversationRequests: Array = []; + + for (let conversation of sorted) { + if (selectedConversation === conversation.id) { + conversation = { + ...conversation, + isSelected: true, + }; + } + + const isBlocked = + BlockedNumberController.isBlocked(conversation.id) || + BlockedNumberController.isGroupBlocked(conversation.id); + + if (isBlocked) { + conversation = { + ...conversation, + isBlocked: true, + }; + } + + let messageRequestsEnabled = false; + + if (window?.inboxStore?.getState()) { + messageRequestsEnabled = + window.inboxStore?.getState().userConfig.messageRequests === true && + window.lokiFeatureFlags?.useMessageRequests === true; + } + + // Add Open Group to list as soon as the name has been set + if (conversation.isPublic && (!conversation.name || conversation.name === 'Unknown group')) { + continue; + } + + // Remove all invalid conversations and conversatons of devices associated + // with cancelled attempted links + if (!conversation.isPublic && !conversation.activeAt) { + continue; + } + + if (messageRequestsEnabled && !conversation.isApproved && !conversation.isBlocked) { + // dont increase unread counter, don't push to convo list. + conversationRequests.push(conversation); + continue; + } + } + + return conversationRequests; +}; + +export const getConversationRequests = createSelector( + getConversationLookup, + getConversationComparator, + getSelectedConversationKey, + _getConversationRequests +); + export const getLeftPaneLists = createSelector( getConversationLookup, getConversationComparator, diff --git a/ts/window.d.ts b/ts/window.d.ts index 8ef04b728..389e29876 100644 --- a/ts/window.d.ts +++ b/ts/window.d.ts @@ -43,11 +43,6 @@ declare global { log: any; lokiFeatureFlags: { useOnionRequests: boolean; - useFileOnionRequests: boolean; - useFileOnionRequestsV2: boolean; - padOutgoingAttachments: boolean; - enablePinConversations: boolean; - useUnsendRequests: boolean; useMessageRequests: boolean; useCallMessage: boolean; };