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/SendMessageForm.tsx b/client/src/components/SendMessageForm.tsx
index 7bb7a7f..a94ab56 100644
--- a/client/src/components/SendMessageForm.tsx
+++ b/client/src/components/SendMessageForm.tsx
@@ -21,7 +21,8 @@
 import { useTranslation } from 'react-i18next';
 
 import { useAuthContext } from '../contexts/AuthProvider';
-import { ConversationMember } from '../models/conversation';
+import { useConversationContext } from '../contexts/ConversationProvider';
+import { ConversationMember } from '../models/conversation-member';
 import { translateEnumeration, TranslateEnumerationOptions } from '../utils/translations';
 import {
   RecordVideoMessageButton,
@@ -32,12 +33,12 @@
 } from './Button';
 
 type SendMessageFormProps = {
-  members: ConversationMember[];
   onSend: (message: string) => void;
   openFilePicker: () => void;
 };
 
-export default function SendMessageForm({ members, onSend, openFilePicker }: SendMessageFormProps) {
+export default function SendMessageForm({ onSend, openFilePicker }: SendMessageFormProps) {
+  const { members } = useConversationContext();
   const [currentMessage, setCurrentMessage] = useState('');
   const placeholder = usePlaceholder(members);
 
@@ -97,7 +98,7 @@
   return useMemo(() => {
     const options: TranslateEnumerationOptions<ConversationMember> = {
       elementPartialKey: 'member',
-      getElementValue: (member) => getMemberName(member),
+      getElementValue: (member) => member.getDisplayName(),
       translaters: [
         () =>
           // The user is chatting with themself
@@ -113,8 +114,3 @@
     return translateEnumeration<ConversationMember>(members, options);
   }, [account, members, t]);
 };
-
-const getMemberName = (member: ConversationMember) => {
-  const contact = member.contact;
-  return contact.getDisplayName();
-};