import { AlarmData } from "@/app/(tabs)"; import { ThemedText } from "@/components/themed-text"; import { formatTimestamp } from "@/services/time_service"; import { Ionicons } from "@expo/vector-icons"; import { useCallback } from "react"; import { FlatList, TouchableOpacity, View } from "react-native"; // ============ Types ============ type AlarmType = "approaching" | "entered" | "fishing"; interface AlarmCardProps { alarm: AlarmData; onPress?: () => void; } // ============ Config ============ const ALARM_CONFIG: Record< AlarmType, { icon: keyof typeof Ionicons.glyphMap; label: string; bgColor: string; borderColor: string; iconBgColor: string; iconColor: string; labelColor: string; } > = { entered: { icon: "warning", label: "Xâm nhập", bgColor: "bg-red-50", borderColor: "border-red-200", iconBgColor: "bg-red-100", iconColor: "#DC2626", labelColor: "text-red-600", }, approaching: { icon: "alert-circle", label: "Tiếp cận", bgColor: "bg-amber-50", borderColor: "border-amber-200", iconBgColor: "bg-amber-100", iconColor: "#D97706", labelColor: "text-amber-600", }, fishing: { icon: "fish", label: "Đánh bắt", bgColor: "bg-orange-50", borderColor: "border-orange-200", iconBgColor: "bg-orange-100", iconColor: "#EA580C", labelColor: "text-orange-600", }, }; // ============ AlarmCard Component ============ const AlarmCard = ({ alarm, onPress }: AlarmCardProps) => { const config = ALARM_CONFIG[alarm.type]; return ( {/* Icon Container */} {/* Content */} {/* Header: Ship name + Badge */} {alarm.ship_name || alarm.thing_id} {config.label} {/* Zone Info */} {alarm.zone.message || alarm.zone.zone_name} {/* Footer: Zone ID + Time */} {formatTimestamp(alarm.zone.gps_time)} ); }; // ============ Main Component ============ interface AlarmListProps { data: AlarmData[]; onPress?: (alarm: AlarmData) => void; } export default function AlarmList({ data, onPress }: AlarmListProps) { const renderItem = useCallback( ({ item }: { item: AlarmData }) => ( onPress?.(item)} /> ), [onPress] ); const keyExtractor = useCallback( (item: AlarmData, index: number) => `${item.thing_id}-${index}`, [] ); const ItemSeparator = useCallback(() => , []); return ( ); }