import React from 'react'; import { IonIcon } from '@ionic/react'; import { cartOutline, medkitOutline, flashOutline, phonePortraitOutline, timeOutline, checkmarkCircleOutline, removeCircleOutline, } from 'ionicons/icons'; import momImage from '../assets/mom.jpg'; import dadImage from '../assets/dad.jpg'; interface ActivityListItemProps { id: string; eventType: string; title: string; subtitle: string; amount?: number; statusText?: string; isSuccess?: boolean; avatarLabel?: string; avatarTone?: string; avatarImage?: string; redeemedAmount?: number; remainingAmount?: number; onClick?: (id: string) => void; } const ActivityListItem: React.FC = ({ id, eventType, title, subtitle, amount, statusText, isSuccess = true, avatarLabel, avatarTone = 'brand', avatarImage, redeemedAmount, remainingAmount, onClick, }) => { const getIconAndColor = () => { if ( eventType.includes('grocery') || title.toLowerCase().includes('grocer') ) { return { icon: cartOutline, badgeClass: 'grocery', }; } if ( eventType.includes('medication') || title.toLowerCase().includes('medic') ) { return { icon: medkitOutline, badgeClass: 'medication', }; } if ( eventType.includes('airtime') || title.toLowerCase().includes('airtime') ) { return { icon: phonePortraitOutline, badgeClass: 'airtime', }; } return { icon: flashOutline, badgeClass: 'electricity', }; }; const { icon, badgeClass } = getIconAndColor(); const getStatusTheme = () => { const text = statusText?.toLowerCase() ?? ''; if ( text.includes('delivered') || text.includes('ready') || (text.includes('redeemed') && !text.includes('partial')) ) { return 'success'; } if ( text.includes('awaiting') || text.includes('ready') || text.includes('collect') ) { return 'info'; } if (text.includes('expir') || text.includes('warn')) { return 'warning'; } if (text.includes('cancel') || text.includes('fail')) { return 'danger'; } return 'brand'; }; const statusTheme = getStatusTheme(); const getStatusIcon = () => { switch (statusTheme) { case 'success': return checkmarkCircleOutline; case 'info': case 'warning': return timeOutline; case 'danger': return removeCircleOutline; default: return timeOutline; } }; const statusIcon = getStatusIcon(); const resolvedAvatar = avatarImage ?? (title.toLowerCase().includes('mum') ? momImage : title.toLowerCase().includes('dad') ? dadImage : undefined); const hasVoucherBreakdown = redeemedAmount !== undefined || remainingAmount !== undefined; return ( ); }; export default ActivityListItem;