Divide Conversation into ConversationInfos, ConversationMember, and ConversationSummary

- ConversationSummary is used to display ConversationList.
- Having the three separated will help managing queries.
- Adding ConversationSummary required to solve some inconsistencies in ConversationList, which was mixing contacts and conversations. ContactSearchResultList has been added as a quick fix . It will need more work.
- Some tools to uniformize conversation names have been introduced. They will need more work.

Note the diplaying of ConversationList is left broken in this commit.

Change-Id: I29337906cc43781a9c4790735490a6ee2cc51cb0
diff --git a/client/src/components/ConversationView.tsx b/client/src/components/ConversationView.tsx
index 51c0899..9216249 100644
--- a/client/src/components/ConversationView.tsx
+++ b/client/src/components/ConversationView.tsx
@@ -16,18 +16,14 @@
  * <https://www.gnu.org/licenses/>.
  */
 import { Divider, Stack, Typography } from '@mui/material';
-import { useContext, useMemo } from 'react';
-import { useTranslation } from 'react-i18next';
+import { useContext } from 'react';
 
-import { useAuthContext } from '../contexts/AuthProvider';
 import { CallManagerContext } from '../contexts/CallManagerProvider';
 import { useCallContext } from '../contexts/CallProvider';
 import { useConversationContext } from '../contexts/ConversationProvider';
 import { useWebRtcContext } from '../contexts/WebRtcProvider';
-import { ConversationMember } from '../models/conversation';
 import CallInterface from '../pages/CallInterface';
 import ChatInterface from '../pages/ChatInterface';
-import { translateEnumeration, TranslateEnumerationOptions } from '../utils/translations';
 import { AddParticipantButton, ShowOptionsMenuButton, StartAudioCallButton, StartVideoCallButton } from './Button';
 
 const ConversationView = () => {
@@ -54,42 +50,14 @@
 };
 
 const ConversationHeader = () => {
-  const { account } = useAuthContext();
-  const { conversation, conversationId } = useConversationContext();
+  const { conversationId, conversationDisplayName } = useConversationContext();
   const { startCall } = useContext(CallManagerContext);
-  const { t } = useTranslation();
-
-  const members = conversation.members;
-  const adminTitle = conversation.infos.title as string;
-
-  const title = useMemo(() => {
-    if (adminTitle) {
-      return adminTitle;
-    }
-
-    const options: TranslateEnumerationOptions<ConversationMember> = {
-      elementPartialKey: 'member',
-      getElementValue: (member) => getMemberName(member),
-      translaters: [
-        () =>
-          // The user is chatting with themself
-          t('conversation_title_one', { member0: account?.getDisplayName() }),
-        (interpolations) => t('conversation_title_one', interpolations),
-        (interpolations) => t('conversation_title_two', interpolations),
-        (interpolations) => t('conversation_title_three', interpolations),
-        (interpolations) => t('conversation_title_four', interpolations),
-        (interpolations) => t('conversation_title_more', interpolations),
-      ],
-    };
-
-    return translateEnumeration<ConversationMember>(members, options);
-  }, [account, members, adminTitle, t]);
 
   return (
     <Stack direction="row" padding="16px" overflow="hidden">
       <Stack flex={1} justifyContent="center" whiteSpace="nowrap" overflow="hidden">
         <Typography variant="h3" textOverflow="ellipsis">
-          {title}
+          {conversationDisplayName}
         </Typography>
       </Stack>
       <Stack direction="row" spacing="20px">
@@ -102,9 +70,4 @@
   );
 };
 
-const getMemberName = (member: ConversationMember) => {
-  const contact = member.contact;
-  return contact.getDisplayName();
-};
-
 export default ConversationView;