From 602280de42588727622027346e13aecbbe8b0726 Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Wed, 11 Dec 2024 12:13:32 +0100 Subject: [PATCH] reduce double iteration while filtering contacts --- .../Chat/SearchConversationsResults.tsx | 62 ++++++++++--------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/packages/mobile/src/components/Chat/SearchConversationsResults.tsx b/packages/mobile/src/components/Chat/SearchConversationsResults.tsx index 3c6caa20..60f4e827 100644 --- a/packages/mobile/src/components/Chat/SearchConversationsResults.tsx +++ b/packages/mobile/src/components/Chat/SearchConversationsResults.tsx @@ -45,34 +45,35 @@ export const SearchConversationResults = memo( const contactResults = useMemo( () => query && contacts - ? contacts - .map((contact) => contact.fileMetadata.appData.content) - .filter((contact) => { - return ( - contact.odinId && - (contact.odinId?.includes(query) || - contact.name?.displayName?.toLowerCase().includes(query) || - contact.name?.givenName?.toLowerCase().includes(query) || - contact.name?.surname?.toLowerCase().includes(query)) - ); - }) + ? contacts.filter((contacts) => { + const { odinId, name } = contacts.fileMetadata.appData.content; + const { displayName, givenName, surname } = name || {}; + return ( + odinId && + (odinId?.includes(query) || + displayName?.toLowerCase().includes(query) || + givenName?.toLowerCase().includes(query) || + surname?.toLowerCase().includes(query)) + ); + }) : [], [contacts, query] ); const contactsWithoutAConversation = useMemo( () => - contactResults.filter((contact) => { + contactResults.filter((contacts) => { // filter conversations which have should not have more than 1 recipient const singleConversations = conversationResults.filter((conversation) => { const content = conversation.fileMetadata.appData.content; return content.recipients.length === 2; }); + const { odinId } = contacts.fileMetadata.appData.content; return ( - contact.odinId && + odinId && !singleConversations.some((conversation) => { const content = conversation.fileMetadata.appData.content; - return content.recipients.includes(contact.odinId as string); + return content.recipients.includes(odinId as string); }) ); }), @@ -111,15 +112,15 @@ export const SearchConversationResults = memo( ) : ( {conversationResults?.length ? Chats : null} - {conversationResults.map((item) => ( + {conversationResults.map(({ fileId, fileMetadata }) => ( recipient !== identity )[0] } @@ -128,15 +129,18 @@ export const SearchConversationResults = memo( {contactsWithoutAConversation?.length ? ( Contacts ) : null} - {contactsWithoutAConversation.map((item) => ( - - ))} + {contactsWithoutAConversation.map((item) => { + const contact = item.fileMetadata.appData.content; + return ( + + ); + })} )}