import React, { useEffect, useState } from "react"; import { View, Text, ScrollView, Image } from "react-native"; import ScreenWrapper from "~/components/ui/ScreenWrapper"; import BackButton from "~/components/ui/backButton"; import { Button } from "~/components/ui/button"; import { Icons } from "~/assets/icons"; import { useTranslation } from "react-i18next"; import { getPointsState, type PointsActivityEntry, } from "~/lib/services/pointsService"; export default function PointsActivityScreen() { const { t } = useTranslation(); const [activities, setActivities] = useState([]); useEffect(() => { let cancelled = false; (async () => { try { const state = await getPointsState(); if (!cancelled) { setActivities(state.activities); } } catch (error) { if (__DEV__) { console.warn("[PointsActivity] Failed to load points state", error); } } })(); return () => { cancelled = true; }; }, []); const renderPointsPill = (points: number) => { const isPositive = points >= 0; const backgroundColor = isPositive ? "#0F7B4A" : "#EF4444"; const sign = isPositive ? "+" : "-"; const absPoints = Math.abs(points); return ( {t("pointsactivity.pointsPill", { sign, points: absPoints })} ); }; return ( {t("pointsactivity.title")} {activities.map((item) => { const date = new Date(item.timestamp); const formattedDate = `${date.toLocaleDateString()} • ${date.toLocaleTimeString( [], { hour: "numeric", minute: "2-digit", } )}`; let titleKey: string; switch (item.type) { case "contact_sync": titleKey = "Contact Sync"; break; case "send_money": titleKey = "Send Money"; break; case "login": titleKey = "Login"; break; case "purchase_ticket": titleKey = "Purchase Ticket"; break; case "add_recipient": titleKey = "Add Recipient"; break; case "share_event": titleKey = "Share Event"; break; case "make_request": titleKey = "Make Request"; break; case "referral_link": titleKey = "Referral Link"; break; default: titleKey = item.type; } return ( {titleKey} {formattedDate} {renderPointsPill(item.points)} ); })} ); }