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)}
)}
);
}