import { CleanlinessIcon } from '../../Icons/CleanlinessIcon'; import { FacilityIcon } from '../../Icons/FacilityIcon'; import { AccessIcon } from '../../Icons/AccessIcon'; import { ServiceIcon } from '../../Icons/ServiceIcon'; interface RatingData { score: number; count: number; } interface DetailRatings { environment: number; cleanliness: number; price: number; facility: number; } interface UserLocationDetailRatingsCardProps { data: T; getCriticData: (data: T) => RatingData; getUserData: (data: T) => RatingData; getCriticDetails?: (data: T) => DetailRatings; getUserDetails?: (data: T) => DetailRatings; } const UserLocationDetailRatingsCard = ({ data, getUserData, getUserDetails }: UserLocationDetailRatingsCardProps) => { const userData = getUserData(data); const userDetails = getUserDetails?.(data); const formatCount = (count: number): string | number => { return count >= 1000 ? `${(count / 1000).toFixed(1).replace(/\.0$/, '')}k` : count; }; const calculateScore = (score: number, count: number): string | number => { return count !== 0 ? Math.floor(score / count) : "NR"; }; const detailItems = userDetails ? [ { label: 'Akses', value: userDetails.environment, icon: }, { label: 'Pelayanan', value: userDetails.price, icon: }, { label: 'Kebersihan', value: userDetails.cleanliness, icon: }, { label: 'Fasilitas', value: userDetails.facility, icon: }, ] : []; return (
{/* USER SCORE card */}
USER SCORE
{userData.count !== 0 && (
Based on {formatCount(userData.count)} reviews
)}
{calculateScore(userData.score, userData.count)}
{/* Detail rating cards — all in one row */} {detailItems.map((item) => (
{item.icon}
{item.label}
{item.value}
Based on {formatCount(userData.count)} reviews
))}
); }; export default UserLocationDetailRatingsCard;