import { memo } from "react";
import { StyleSheet, Text, View, type ViewStyle } from "react-native";
import { native, useThemedStyles } from "../lib/native";
import { BotAvatar } from "./bot-avatar";
export interface GroupAvatarMember {
botId?: string;
name?: string;
color: string;
status?: string;
}
export const GroupAvatar = memo(function GroupAvatar({
members,
size = 54,
}: {
members: GroupAvatarMember[];
size?: number;
}) {
const styles = useThemedStyles(createGroupAvatarStyles);
const firstMember = members[0];
if (!firstMember) {
return (
👥
);
}
if (members.length === 1) {
return (
);
}
const pair = members.length === 2;
const miniSize = Math.round(size * (pair ? 0.65 : 0.54));
const positions: ViewStyle[] = pair
? [
{ top: 0, left: 0 },
{ right: 0, bottom: 0 },
]
: [
{ top: 0, left: (size - miniSize) / 2 },
{ bottom: 0, left: 0 },
{ right: 0, bottom: 0 },
];
const visibleMembers = members.slice(0, pair || members.length === 3 ? members.length : 2);
return (
{visibleMembers.map((member, index) => (
))}
{members.length > 3 ? (
+{members.length - 2}
) : null}
);
});
function createGroupAvatarStyles() {
return StyleSheet.create({
fallback: {
backgroundColor: native.fillPressed,
alignItems: "center",
justifyContent: "center",
},
fallbackText: {
color: native.secondaryLabel,
},
});
}