import { Box, CircularProgress, Alert, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, Button } from '@mui/material'; import ContentCopyIcon from '@mui/icons-material/ContentCopy'; import { useApiData } from '../../hooks/useApiData'; import type { CotizacionBolsa } from '../../models/mercadoModels'; import { formatCurrency, formatFullDateTime } from '../../utils/formatters'; import { copyToClipboard } from '../../utils/clipboardUtils'; // Función para convertir datos a formato CSV const toCSV = (headers: string[], data: CotizacionBolsa[]) => { const headerRow = headers.join(';'); const dataRows = data.map(row => [ row.ticker, row.nombreEmpresa, formatCurrency(row.precioActual), formatCurrency(row.cierreAnterior), `${row.porcentajeCambio.toFixed(2)}%` ].join(';') ); return [headerRow, ...dataRows].join('\n'); }; export const RawBolsaLocalTable = () => { const { data, loading, error } = useApiData('/mercados/bolsa/local'); const handleCopy = () => { if (!data) return; const headers = ["Ticker", "Nombre", "Último Precio", "Cierre Anterior", "Variación %"]; const csvData = toCSV(headers, data); copyToClipboard(csvData) .then(() => { alert('¡Tabla copiada al portapapeles!'); }) .catch(err => { console.error('Error al copiar:', err); alert('Error: No se pudo copiar la tabla.'); }); }; if (loading) return ; if (error) return {error}; if (!data) return null; return ( Ticker Nombre Último Precio Cierre Anterior Variación % Última Act. {data.map(row => ( {row.ticker} {row.nombreEmpresa} ${formatCurrency(row.precioActual)} ${formatCurrency(row.cierreAnterior)} {row.porcentajeCambio.toFixed(2)}% {formatFullDateTime(row.fechaRegistro)} ))}
); };