import React from "react"; import { View, Text, StyleSheet, TouchableOpacity } from "react-native"; import { useRouter } from "expo-router"; import { useSelector } from "react-redux"; import { RootState } from "@/store/rootReducer"; import Header from "@/components/common/Header"; import CheckCircle from "@/assets/icons/check_circle.svg"; import Pending from "@/assets/icons/pending.svg"; import Failed from "@/assets/icons/cancel.svg"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { useTranslation } from "react-i18next"; const PaymentConfirmationScreen = () => { const router = useRouter(); const { paymentOrder, due_amount } = useSelector( (state: RootState) => state.payments ); const insets = useSafeAreaInsets(); // Get payment status - assuming it comes from paymentOrder.status const paymentStatus = paymentOrder?.status || "confirmed"; // Format amount with currency const formatAmount = (amount: number | null) => { if (!amount) return "₹0"; return `₹${amount.toLocaleString("en-IN")}`; }; // Format date const formatDate = (dateString?: string) => { if (!dateString) return new Date().toLocaleString("en-IN", { day: "numeric", month: "long", year: "numeric", hour: "numeric", minute: "2-digit", hour12: true, weekday: "long", }); return new Date(dateString).toLocaleString("en-IN", { day: "numeric", month: "long", year: "numeric", hour: "numeric", minute: "2-digit", hour12: true, weekday: "long", }); }; // Get icon and text based on status const getStatusDisplay = () => { switch (paymentStatus) { case "confirmed": return { icon: , text: "Payment successful", iconContainerStyle: styles.successIconContainer, }; case "failure": return { icon: , text: "Payment failed", iconContainerStyle: styles.failureIconContainer, }; case "pending": return { icon: , text: "Payment pending", iconContainerStyle: styles.pendingIconContainer, }; default: return { icon: , text: "Payment successful", iconContainerStyle: styles.successIconContainer, }; } }; const statusDisplay = getStatusDisplay(); // Helper function to display value or "--" if missing const displayValue = (value: any) => { return value ? String(value) : "--"; }; const { t } = useTranslation(); return (
{statusDisplay.icon} {formatAmount(paymentOrder?.amount || due_amount)} {statusDisplay.text} {formatDate(paymentOrder?.transaction_date)} {`${t( "payment.transaction-details" )}`} {`${t( "payment.payment-mode" )}`} {displayValue(paymentOrder?.payment_mode?.[0])} {`${t( "payment.paid-to" )}`} {displayValue(paymentOrder?.upi_handle)} {`${t( "payment.paid-by" )}`} {displayValue(paymentOrder?.paid_by_upi_handle)} {`${t( "payment.order-id" )}`} {displayValue(paymentOrder?.order_id)} {`${t( "payment.transaction-id" )}`} {displayValue( paymentOrder?.transaction_id || paymentOrder?.transaction_order_id )} RRN {displayValue(paymentOrder?.payment_reference_id)} router.replace("/(tabs)/payments")} > OK ); }; export default PaymentConfirmationScreen; const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: "#f3f4f6", // Light gray background }, contentFrame: { flex: 1, paddingHorizontal: 16, paddingBottom: 16, justifyContent: "space-between", marginTop: 8, }, qrFrame: { backgroundColor: "#fcfcfc", borderRadius: 8, padding: 16, paddingVertical: 32, }, paymentStatusContainer: { alignItems: "center", }, successIconContainer: { marginBottom: 16, alignItems: "center", }, failureIconContainer: { marginBottom: 16, alignItems: "center", }, pendingIconContainer: { marginBottom: 16, alignItems: "center", }, successIcon: { // Icon styling handled by Ionicons }, amountText: { fontSize: 20, fontWeight: "600", color: "#252a34", textAlign: "center", marginBottom: 16, }, statusContainer: { alignItems: "center", gap: 4, }, statusText: { fontSize: 14, color: "#252a34", textAlign: "center", }, dateText: { fontSize: 14, color: "#252a34", textAlign: "center", }, divider: { height: 1, backgroundColor: "#e5e9f0", marginVertical: 24, }, transactionContainer: { gap: 8, }, sectionHeader: { fontSize: 14, fontWeight: "600", color: "#252a34", }, detailRow: { flexDirection: "row", justifyContent: "space-between", alignItems: "flex-start", paddingVertical: 2, }, detailLabel: { fontSize: 14, color: "#252a34", flex: 1, }, detailValue: { fontSize: 14, fontWeight: "600", color: "#252a34", textAlign: "left", flex: 1, }, primaryButton: { backgroundColor: "#008761", height: 40, borderRadius: 4, justifyContent: "center", alignItems: "center", }, buttonText: { color: "#fcfcfc", fontSize: 14, fontWeight: "500", }, });