import {View} from 'react-native' import {Plural, Trans, useLingui} from '@lingui/react/macro' import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name' import {logger} from '#/logger' import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useAddGroupMembers} from '#/state/queries/messages/add-group-members' import {useSession} from '#/state/session' import {atoms as a, useTheme} from '#/alf' import {AvatarBubbles} from '#/components/AvatarBubbles' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {AddMembersFlow} from '#/components/dms/AddMembersFlow' import {type ConvoWithDetails} from '#/components/dms/util' import {ChainLink_Stroke2_Corner0_Rounded as ChainLinkIcon} from '#/components/icons/ChainLink' import {PersonPlus_Stroke2_Corner0_Rounded as PersonPlusIcon} from '#/components/icons/Person' import * as Toast from '#/components/Toast' import {Text} from '#/components/Typography' import {InviteLinkDialog} from './InviteLinkDialog' export function MessagesListGroupInfoPanel({ convo, }: { convo: Extract }) { const t = useTheme() const {t: l} = useLingui() const moderationOpts = useModerationOpts() const convoId = convo.view.id const addMembersControl = Dialog.useDialogControl() const inviteLinkControl = Dialog.useDialogControl() const {currentAccount} = useSession() const {mutate: addGroupMembers} = useAddGroupMembers(convoId, { onSuccess: () => { addMembersControl.close() }, onError: e => { logger.error('Failed to add group chat members', {message: e}) Toast.show(l`Failed to add members`, {type: 'error'}) }, }) const isOwner = convo.primaryMember?.did === currentAccount?.did const isJoinLinkEnabled = isOwner || convo.details.joinLink?.enabledStatus === 'enabled' const members = (convo.members ?? []).filter( profile => profile.did !== currentAccount?.did, ) let names: React.ReactNode = null if (members.length === 1) { names = ( New chat with {createSanitizedDisplayName(members[0])} ) } else if (members.length === 2) { names = ( New chat with {createSanitizedDisplayName(members[0])} and{' '} {createSanitizedDisplayName(members[1])} ) } else if (members.length > 2) { const memberCount = convo.details.memberCount - 2 names = ( New chat with {createSanitizedDisplayName(members[0])},{' '} {createSanitizedDisplayName(members[1])}, and{' '} . ) } const isLocked = convo.details.lockStatus !== 'unlocked' const showButtons = !isLocked && (isOwner || isJoinLinkEnabled) return ( <> {convo.details.name ? ( {convo.details.name} ) : null} {names ? ( {names} ) : null} {showButtons ? ( {isOwner ? ( ) : null} {isJoinLinkEnabled ? ( ) : null} ) : null} {convo.primaryMember && moderationOpts && ( )} addGroupMembers({members, profiles}) } /> ) }