import React, { useState } from "react"; import { View, ScrollView, Image, TouchableOpacity } from "react-native"; import { router, useLocalSearchParams } from "expo-router"; import ScreenWrapper from "~/components/ui/ScreenWrapper"; import BackButton from "~/components/ui/backButton"; import { Text } from "~/components/ui/text"; import { Button } from "~/components/ui/button"; import { ROUTES } from "~/lib/routes"; import { Icons } from "~/assets/icons"; import { Check } from "lucide-react-native"; import { useAuthWithProfile } from "~/lib/hooks/useAuthWithProfile"; import { useTranslation } from "react-i18next"; const campaigns = [ { id: "1", title: "Fresh Fruits for Improving Children’s Health", image: Icons.profileImage, progress: 0.8, raised: "$54,090", timeLeft: "8 Hours left", }, { id: "2", title: "Support Local Farmers Market Initiative", image: Icons.mainBG, progress: 0.45, raised: "$21,400", timeLeft: "2 Days left", }, { id: "3", title: "School Meal Program for Kids", image: Icons.qrImage, progress: 0.62, raised: "$33,250", timeLeft: "1 Day left", }, ]; export default function DonationScreen() { const { t } = useTranslation(); const params = useLocalSearchParams>(); const { profile } = useAuthWithProfile(); const amountInCents = Number(params.amount ?? "0"); const baseAmount = isNaN(amountInCents) ? "0.00" : (amountInCents / 100).toFixed(2); const [donationType, setDonationType] = useState<"one-time" | "monthly">( "monthly" ); const [donationAmount, setDonationAmount] = useState(baseAmount); const [donateAnonymously, setDonateAnonymously] = useState(false); const [selectedCampaignId, setSelectedCampaignId] = useState( null ); const isCampaignSelected = !!selectedCampaignId; const displayName = donateAnonymously ? t("donation.anonymousLabel") : profile?.fullName || t("donation.displayNameFallback"); const goToConfirm = (options?: { skipped?: boolean }) => { const selectedCampaign = campaigns.find((c) => c.id === selectedCampaignId); router.push({ pathname: ROUTES.TRANSACTION_CONFIRM, params: { ...params, donationSkipped: options?.skipped ? "true" : "false", donationType, donationAmount, donateAnonymously: donateAnonymously ? "true" : "false", donationCampaignId: selectedCampaign?.id ?? "", donationCampaignTitle: selectedCampaign?.title ?? "", fromSelectRecipientFlow: "true", }, }); }; const handleSkip = () => { goToConfirm({ skipped: true }); }; const handleDonate = () => { goToConfirm({ skipped: false }); }; return ( {t("donation.title")} {t("donation.subtitle")} {campaigns.map((campaign) => { const isSelected = selectedCampaignId === campaign.id; return ( setSelectedCampaignId(campaign.id)} > {/* Content */} {campaign.title} {/* Progress bar */} {t("donation.donationRaisedLabel")} {Math.round(campaign.progress * 100)}% {campaign.raised} {campaign.timeLeft} ); })} {t("donation.chooseAmountTitle")} {/* One-Time / Monthly toggle */} setDonationType("one-time")} > {t("donation.donationTypeOneTime")} setDonationType("monthly")} > {t("donation.donationTypeMonthly")} {/* Amount row */} {donationAmount} {/* Quick amount chips */} {["5", "10", "25", "50", "100"].map((value) => { const isActive = donationAmount === value; return ( setDonationAmount(value)} > ${value} ); })} setDonateAnonymously(!donateAnonymously)} > {donateAnonymously && } {t("donation.donateAnonymouslyLabel")} {displayName} ); }