import clsx from "clsx"; import * as React from "react"; import { useTranslation } from "react-i18next"; import { Badge } from "~/components/Badge"; import { Button } from "~/components/Button"; import { TrashIcon } from "~/components/icons/Trash"; import type { Tables } from "~/db/tables"; import type { Unpacked } from "~/utils/types"; import { badgeExplanationText } from "../badges-utils"; interface BadgeDisplayProps { badges: Array & { count?: number }>; onBadgeRemove?: (badgeId: number) => void; } export function BadgeDisplay({ badges: _badges, onBadgeRemove, }: BadgeDisplayProps) { const { t } = useTranslation("badges"); const [badges, setBadges] = React.useState(_badges); const [bigBadge, ...smallBadges] = badges; if (!bigBadge) return null; const setBadgeFirst = (badge: Unpacked) => { setBadges( badges.map((b, i) => { if (i === 0) return badge; if (b.code === badge.code) return badges[0]; return b; }), ); }; return (
{smallBadges.length > 0 ? (
{smallBadges.map((badge) => (
setBadgeFirst(badge)} size={48} isAnimated /> {badge.count && badge.count > 1 ? (
×{badge.count}
) : null}
))}
) : null}
{badgeExplanationText(t, bigBadge)} {onBadgeRemove ? (
); }