import React, { useState } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Activity, Download, Search, TrendingUp, TrendingDown, ExternalLink, Clock } from 'lucide-react'; // Mock trade data const mockTrades = [ { id: '1', timestamp: new Date('2024-01-07T14:30:00Z'), targetWallet: '9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM', pair: 'SOL/USDC', type: 'BUY', amount: 2.5, price: 98.45, pnl: 156.80, status: 'completed', signature: '2uJYB9jKzZi8YMFQWyJ8UvBdJLnVcP9q3HrXj6K4T7N8L9R1' }, { id: '2', timestamp: new Date('2024-01-07T13:15:00Z'), targetWallet: '9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM', pair: 'RAY/SOL', type: 'SELL', amount: 150, price: 0.045, pnl: -23.40, status: 'completed', signature: '3vKYC0jLzZi9YNGRXyK9VvCeKMoWdQ0r4IsYk7L5U8O9M0S2' }, { id: '3', timestamp: new Date('2024-01-07T12:45:00Z'), targetWallet: 'BQWf2RqVVJ8ZfP4HuRr6nF2jN8Y5K3L9R1T7U4W6X2B5M9S8', pair: 'ORCA/USDC', type: 'BUY', amount: 85.2, price: 1.23, pnl: 45.60, status: 'completed', signature: '4wLYD1kMzZj0YOHSYyL0WwDfLNpXeR1s5JtZl8M6V9P0N1T3' }, { id: '4', timestamp: new Date('2024-01-07T11:20:00Z'), targetWallet: 'BQWf2RqVVJ8ZfP4HuRr6nF2jN8Y5K3L9R1T7U4W6X2B5M9S8', pair: 'SOL/USDC', type: 'BUY', amount: 1.8, price: 97.20, pnl: 0, status: 'pending', signature: '5xMYE2lNzZk1YPITZyM1XxEgMOqYfS2t6KuAm9N7W0Q1O2U4' }, { id: '5', timestamp: new Date('2024-01-07T10:05:00Z'), targetWallet: '9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM', pair: 'BONK/SOL', type: 'SELL', amount: 1000000, price: 0.0000089, pnl: 78.90, status: 'completed', signature: '6yNYF3mOzZl2YQJUAyN2YyFhNPrZgT3u7LvBn0O8X1R2P3V5' } ]; export const TradeLog: React.FC = () => { const [searchTerm, setSearchTerm] = useState(''); const filteredTrades = mockTrades.filter(trade => trade.pair.toLowerCase().includes(searchTerm.toLowerCase()) || trade.targetWallet.toLowerCase().includes(searchTerm.toLowerCase()) || trade.type.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleExportTrades = () => { // Create CSV content const csvContent = [ ['Timestamp', 'Target Wallet', 'Pair', 'Type', 'Amount', 'Price', 'P&L', 'Status', 'Signature'], ...filteredTrades.map(trade => [ trade.timestamp.toISOString(), trade.targetWallet, trade.pair, trade.type, trade.amount.toString(), trade.price.toString(), trade.pnl.toString(), trade.status, trade.signature ]) ].map(row => row.join(',')).join('\n'); // Create and download file const blob = new Blob([csvContent], { type: 'text/csv' }); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `trade-log-${new Date().toISOString().split('T')[0]}.csv`; document.body.appendChild(a); a.click(); document.body.removeChild(a); window.URL.revokeObjectURL(url); }; const getStatusBadge = (status: string) => { switch (status) { case 'completed': return Completed; case 'pending': return Pending; case 'failed': return Failed; default: return {status}; } }; const getPnLDisplay = (pnl: number, status: string) => { if (status === 'pending') { return --; } return ( = 0 ? 'text-profit' : 'text-loss'}> {pnl >= 0 ? '+' : ''}${pnl.toFixed(2)} ); }; return ( Trade Log setSearchTerm(e.target.value)} className="pl-8 w-64" /> Export CSV Time Target Wallet Pair Type Amount Price P&L Status Action {filteredTrades.map((trade, index) => ( {trade.timestamp.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' })} {trade.timestamp.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} {trade.targetWallet.slice(0, 6)}...{trade.targetWallet.slice(-4)} {trade.pair} {trade.type === 'BUY' ? ( ) : ( )} {trade.type} {trade.amount.toLocaleString()} ${trade.price.toFixed(4)} {getPnLDisplay(trade.pnl, trade.status)} {getStatusBadge(trade.status)} window.open(`https://explorer.solana.com/tx/${trade.signature}?cluster=devnet`, '_blank')} > View ))} {filteredTrades.length === 0 && ( No trades found {searchTerm ? 'Try adjusting your search terms' : 'Start trading to see your trade history'} )} ); };
No trades found
{searchTerm ? 'Try adjusting your search terms' : 'Start trading to see your trade history'}