import { Award, Media } from "@/payload-types"; import { Item, ItemContent, ItemDescription, ItemHeader, ItemTitle } from "@/components/ui/item"; import { convertLexicalToPlaintext } from "@payloadcms/richtext-lexical/plaintext"; import { RibbonViewer } from "@/components/frontend/account/RibbonViewer"; import { RibbonDesign } from "@/components/admin/awards/RibbonDesigner"; import { cn } from "@/lib/utils"; const getExperiencePointsClass = (experiencePoints: number) => { if (experiencePoints >= 5000) return "award-xp-high"; if (experiencePoints >= 1000) return "text-emerald-400"; if (experiencePoints >= 501) return "text-lime-300"; if (experiencePoints >= 200) return "text-sky-300"; return "text-muted-foreground"; }; export default function AwardCard(props: { awardImage: Media | null; award: Award }) { const isCommendation = props.award.type === "commendation" || !props.award.type; const commendationColor = isCommendation && typeof props.award.commendationColor === "string" && /^#[0-9a-f]{6}$/i.test(props.award.commendationColor) ? props.award.commendationColor : null; return ( {props.award.ribbonDesign && ( )}
{props.awardImage?.url && ( {props.award.name} )}
{props.award.name} {props.award.type ?? "commendation"}
{props.award.description ? convertLexicalToPlaintext({ data: props.award.description }) : "No description."} {props.award.experiencePoints != null && ( +{props.award.experiencePoints} XP )}
); }