You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/components/AvatarPlaceHolder/ClosedGroupAvatar.tsx

95 lines
2.5 KiB
TypeScript

import React from 'react';
import { Avatar } from '../Avatar';
import { LocalizerType } from '../../types/Util';
import { ConversationAttributes } from '../../../js/models/conversations';
interface Props {
size: number;
conversations: Array<ConversationAttributes>;
i18n: LocalizerType;
}
export class ClosedGroupAvatar extends React.PureComponent<Props> {
public render() {
const { conversations, size, i18n } = this.props;
if (conversations.length === 1) {
const conv = conversations[0];
return (
<Avatar
avatarPath={conv.avatarPath}
noteToSelf={conv.isMe}
conversationType="direct"
i18n={i18n}
name={name}
phoneNumber={conv.id}
profileName={conv.name}
size={size}
isPublic={false}
/>
);
} else if (conversations.length > 1) {
// in a closed group avatar, each visible avatar member size is 2/3 of the group avatar in size
// Always use the size directly under the one requested
let avatarsDiameter = 0;
switch (size) {
case 36: {
avatarsDiameter = 28;
break;
}
case 48: {
avatarsDiameter = 36;
break;
}
case 64: {
avatarsDiameter = 48;
break;
}
case 80: {
avatarsDiameter = 64;
break;
}
case 300: {
avatarsDiameter = 80;
break;
}
default:
throw new Error(
`Invalid size request for closed group avatar: ${size}`
);
}
const conv1 = conversations[0];
const conv2 = conversations[1];
// use the 2 first members as group avatars
return (
<div className="module-avatar__icon-closed">
<Avatar
avatarPath={conv1.avatarPath}
noteToSelf={conv1.isMe}
conversationType="direct"
i18n={i18n}
name={name}
phoneNumber={conv1.id}
profileName={conv1.name}
size={avatarsDiameter}
isPublic={false}
/>
<Avatar
avatarPath={conv2.avatarPath}
noteToSelf={conv2.isMe}
conversationType="direct"
i18n={i18n}
name={name}
phoneNumber={conv2.id}
profileName={conv2.name}
size={avatarsDiameter}
isPublic={false}
/>
</div>
);
} else {
return <></>;
}
}
}