import React from 'react'; import { compact, flatten } from 'lodash'; import { Intl } from '../Intl'; import { missingCaseError } from '../../util/missingCaseError'; interface Contact { phoneNumber: string; profileName?: string; name?: string; } interface Change { type: 'add' | 'remove' | 'name' | 'general' | 'kicked'; isMe: boolean; newName?: string; contacts?: Array; } type Props = { changes: Array; }; // This component is used to display group updates in the conversation view. // This is a not a "notification" as the name suggests, but a message inside the conversation export const GroupNotification = (props: Props) => { function renderChange(change: Change) { const { isMe, contacts, type, newName } = change; const people = compact( flatten( (contacts || []).map((contact, index) => { const element = ( {contact.profileName || contact.phoneNumber} ); return [index > 0 ? ', ' : null, element]; }) ) ); switch (type) { case 'name': return `${window.i18n('titleIsNow', [newName || ''])}.`; case 'add': if (!contacts || !contacts.length) { throw new Error('Group update add is missing contacts'); } const joinKey = contacts.length > 1 ? 'multipleJoinedTheGroup' : 'joinedTheGroup'; return ; case 'remove': if (isMe) { return window.i18n('youLeftTheGroup'); } if (!contacts || !contacts.length) { throw new Error('Group update remove is missing contacts'); } const leftKey = contacts.length > 1 ? 'multipleLeftTheGroup' : 'leftTheGroup'; return ; case 'kicked': if (isMe) { return window.i18n('youGotKickedFromGroup'); } if (!contacts || !contacts.length) { throw new Error('Group update kicked is missing contacts'); } const kickedKey = contacts.length > 1 ? 'multipleKickedFromTheGroup' : 'kickedFromTheGroup'; return ; case 'general': return window.i18n('updatedTheGroup'); default: throw missingCaseError(type); } } const { changes } = props; return (
{(changes || []).map((change, index) => (
{renderChange(change)}
))}
); };