import React, { useEffect, useRef } from 'react'; import { View, Text, StyleSheet, Animated, Easing, } from 'react-native'; import LucideIcon from '../components/common/LucideIcon'; import CustomModal from '../components/common/CustomModal'; import { responsiveFontSize } from 'react-native-responsive-dimensions'; import { useTheme } from '../hooks/ui/useTheme'; import FontsFamily from '../constents/FontsFamily'; interface ContributionProps { data: any; visible: boolean; onClose: () => void; onConfirm: () => void; } const ContributionDetails: React.FC = ({ data, visible, onClose, onConfirm, }) => { const theme = useTheme(); // Animations const fadeAnim = useRef(new Animated.Value(0)).current; const slideAnim = useRef(new Animated.Value(20)).current; useEffect(() => { if (visible) { Animated.parallel([ Animated.timing(fadeAnim, { toValue: 1, duration: 400, useNativeDriver: true, }), Animated.timing(slideAnim, { toValue: 0, duration: 400, easing: Easing.out(Easing.quad), useNativeDriver: true, }), ]).start(); } else { fadeAnim.setValue(0); slideAnim.setValue(20); } }, [visible]); return ( {/* Info Card */} ₹{data?.totalPayable || data?.baseAmount} {/* Status Card */} Cycle {data?.cycleNumber} {data?.alreadyPaid && ( Payment Already Completed )} ); }; const InfoItem = ({ label, value }: { label: string; value: string | number }) => { const theme = useTheme(); return ( {label} {value} ); }; export default ContributionDetails; const styles = StyleSheet.create({ card: { padding: 20, borderRadius: 16, borderWidth: 1, marginBottom: 12, }, headerRow: { flexDirection: 'row', alignItems: 'center', gap: 12, marginBottom: 20, }, amount: { fontSize: responsiveFontSize(2.8), fontFamily: FontsFamily.nunitoBold, }, infoGrid: { flexDirection: 'row', flexWrap: 'wrap', gap: 16, }, infoItem: { width: '45%', }, miniCard: { padding: 16, borderRadius: 12, borderWidth: 1, flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', }, label: { fontSize: responsiveFontSize(1.2), fontFamily: FontsFamily.nunitoMedium, textTransform: 'uppercase', letterSpacing: 0.5, }, value: { fontSize: responsiveFontSize(1.6), fontFamily: FontsFamily.nunitoBold, marginTop: 2, }, statusText: { fontSize: responsiveFontSize(1.4), fontFamily: FontsFamily.nunitoBold, }, });