import React from "react";
import PropTypes from "prop-types";
/**
* BadgeProgress component - displays progress bars for badges in progress
* @param {Array} badges - Array of badge objects with progress information
*/
const BadgeProgress = ({ badges }) => {
// Filter to show only badges that are in progress (not earned and have some progress)
const inProgressBadges = badges.filter(
(badge) => !badge.isEarned && badge.progress > 0 && badge.threshold > 0
);
if (inProgressBadges.length === 0) {
return (
Complete tasks and participate in events to earn badges!
);
}
return (
Badges In Progress
{inProgressBadges.map((badge) => {
const percentage = Math.round((badge.progress / badge.threshold) * 100);
return (
{badge.icon || "🏆"}
{badge.name}
{badge.description}
{badge.progress} / {badge.threshold}
= 75 ? "bg-success" : percentage >= 50 ? "bg-info" : "bg-warning"}`}
role="progressbar"
style={{ width: `${percentage}%` }}
aria-valuenow={badge.progress}
aria-valuemin="0"
aria-valuemax={badge.threshold}
>
{percentage}%
);
})}
);
};
BadgeProgress.propTypes = {
badges: PropTypes.arrayOf(
PropTypes.shape({
_id: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
description: PropTypes.string.isRequired,
icon: PropTypes.string,
progress: PropTypes.number.isRequired,
threshold: PropTypes.number.isRequired,
isEarned: PropTypes.bool.isRequired,
})
).isRequired,
};
export default BadgeProgress;