import React, { useCallback, useState } from 'react'; import { View, Text } from 'react-native'; import Svg, { Path } from 'react-native-svg'; import type { TransactionDetails } from '../types/algorand'; import { formatAddress, formatCurrency, formatRelativeTime } from '../utils/format'; import { SearchSheet } from '../ui/SearchSheet'; function CheckCircleIcon({ size = 12, color = '#34d399' }: { size?: number; color?: string }) { return ( ); } function ClockIcon({ size = 12, color = '#facc15' }: { size?: number; color?: string }) { return ( ); } const TYPE_LABELS: Record = { payment: 'Payment', 'asset-transfer': 'Asset Transfer', 'application-call': 'App Call', 'asset-config': 'Asset Config', 'key-registration': 'Key Registration', 'asset-freeze': 'Asset Freeze', }; interface TransactionSearchProps { data: TransactionDetails[]; onSelect?: (transaction: TransactionDetails) => void; placeholder?: string; className?: string; } export function TransactionSearch({ data, onSelect, placeholder = 'Search transactions...', className, }: TransactionSearchProps) { const [selected, setSelected] = useState(null); const handleSelect = useCallback( (transaction: TransactionDetails) => { setSelected(transaction); onSelect?.(transaction); }, [onSelect], ); const renderItem = useCallback( (transaction: TransactionDetails) => ( {transaction.confirmed ? ( ) : ( )} {formatAddress(transaction.id)} {TYPE_LABELS[transaction.type] || 'Transaction'} - {formatRelativeTime(transaction.timestamp)} {transaction.amount !== undefined && ( {transaction.asset ? formatCurrency(transaction.amount, transaction.asset.unitName) : formatCurrency(transaction.amount / 1_000_000, 'ALGO')} )} ), [], ); return ( {selected && ( Selected Transaction {renderItem(selected)} )} ); }