import { ConvoHub } from '../session/conversations'; import { UserUtils } from '../session/utils'; import type { LocalizerComponentPropsObject } from '../types/localizer'; // to remove after merge with groups function usAndXOthers(arr: Array) { const us = UserUtils.getOurPubKeyStrFromCache(); if (arr.includes(us)) { return { us: true, others: arr.filter(m => m !== us) }; } return { us: false, others: arr }; } export function getKickedGroupUpdateStr( kicked: Array, groupName: string ): LocalizerComponentPropsObject { const { others, us } = usAndXOthers(kicked); const othersNames = others.map( ConvoHub.use().getContactProfileNameOrShortenedPubKey ); if (us) { switch (others.length) { case 0: return { token: 'groupRemovedYou', args: { group_name: groupName } }; case 1: return { token: 'groupRemovedYouTwo', args: { other_name: othersNames[0] } }; default: return { token: 'groupRemovedYouMultiple', args: { count: othersNames.length } }; } } switch (othersNames.length) { case 0: throw new Error('kicked without anyone in it.'); case 1: return { token: 'groupRemoved', args: { name: othersNames[0] } }; case 2: return { token: 'groupRemovedTwo', args: { name: othersNames[0], other_name: othersNames[1], }, }; default: return { token: 'groupRemovedMultiple', args: { name: othersNames[0], count: othersNames.length - 1, }, }; } } export function getGroupNameChangeStr(newName: string): LocalizerComponentPropsObject { return newName ? { token: 'groupNameNew', args: { group_name: newName }} : { token: 'groupNameUpdated' }; } export function getLeftGroupUpdateChangeStr( left: Array, ):LocalizerComponentPropsObject { const { others, us } = usAndXOthers(left); if (left.length !== 1) { throw new Error('left.length should never be more than 1'); } return us ? { token: 'groupMemberYouLeft' } : { token: 'groupMemberLeft', args: { name: ConvoHub.use().getContactProfileNameOrShortenedPubKey(others[0]), }, } ; } export function getJoinedGroupUpdateChangeStr( joined: Array, groupv2: boolean, addedWithHistory: boolean, _groupName: string ): LocalizerComponentPropsObject { const { others, us } = usAndXOthers(joined); const othersNames = others.map( ConvoHub.use().getContactProfileNameOrShortenedPubKey ); if (groupv2) { if (us) { switch (othersNames.length) { case 0: return { token: addedWithHistory ? 'groupMemberNewYou' : 'groupInviteYou' } ; case 1: return addedWithHistory ? { token: 'groupMemberNewYouHistoryTwo', args: { name: othersNames[0] } } : {token: 'legacyGroupMemberNewYouOther', args: {other_name: othersNames[0]}}; default: return addedWithHistory ? { token: 'groupMemberNewYouHistoryMultiple', args: { count: othersNames.length } } : {token: 'groupInviteYouAndMoreNew', args: {count: othersNames.length}}; } } switch (othersNames.length) { case 0: return { token: addedWithHistory ? 'groupInviteYouHistory' : 'groupInviteYou' } ; case 1: return addedWithHistory ? { token: 'groupMemberNewYouHistoryTwo', args: { name: othersNames[0] } } : {token: 'legacyGroupMemberNewYouOther', args: {other_name: othersNames[0]}}; default: return addedWithHistory ? { token: 'groupMemberNewHistoryMultiple', args: { name: othersNames[0], count: othersNames.length -1 } } : {token: 'groupMemberNewMultiple', args: { name: othersNames[0], count: othersNames.length -1 }}; } } if (us) { switch (othersNames.length) { case 0: return { token: 'legacyGroupMemberYouNew' }; case 1: return { token: 'legacyGroupMemberNewYouOther', args: { other_name: othersNames[0] } }; default: return { token: 'legacyGroupMemberNewYouMultiple', args: { count: othersNames.length } }; } } switch (othersNames.length) { case 0: throw new Error('joined without anyone in it.'); case 1: return { token: 'legacyGroupMemberNew', args: { name: othersNames[0] } }; case 2: return { token: 'legacyGroupMemberTwoNew', args: { name: othersNames[0], other_name: othersNames[1], }, }; default: return { token: 'legacyGroupMemberNewMultiple', args: { name: othersNames[0], count: othersNames.length - 1, }, }; } } export function getPromotedGroupUpdateChangeStr( joined: Array, ): LocalizerComponentPropsObject { const { others, us } = usAndXOthers(joined); const othersNames = others.map( ConvoHub.use().getContactProfileNameOrShortenedPubKey ); if (us) { switch (othersNames.length) { case 0: return { token: 'groupPromotedYou' }; case 1: return { token: 'groupPromotedYouTwo', args: { name: othersNames[0] } }; default: return { token: 'groupPromotedYouMultiple', args: { count: othersNames.length } }; } } switch (othersNames.length) { case 0: throw new Error('joined without anyone in it.'); case 1: return { token: 'adminPromotedToAdmin', args: { name: othersNames[0] } }; case 2: return { token: 'adminTwoPromotedToAdmin', args: { name: othersNames[0], other_name: othersNames[1], }, }; default: return { token: 'adminMorePromotedToAdmin', args: { name: othersNames[0], count: othersNames.length - 1, }, }; } }