import type { AvatarShape } from "@rakazo/contracts";
import { botAvatarImageSrc } from "@rakazo/core";
import { memo } from "react";
import { StyleSheet, Text, View, type ViewStyle } from "react-native";
import { BotAvatar } from "./bot-avatar";
export interface GroupAvatarMember {
botId?: string;
name?: string;
color: string;
status?: string;
avatarShape?: AvatarShape | null;
hasAvatarImage?: boolean;
updatedAt?: string;
}
export const GroupAvatar = memo(function GroupAvatar({
members,
size = 54,
}: {
members: GroupAvatarMember[];
size?: number;
}) {
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}
);
});
const styles = StyleSheet.create({
fallback: {
backgroundColor: "#202024",
alignItems: "center",
justifyContent: "center",
},
fallbackText: {
color: "#9A9AA2",
},
});