import { useState } from 'react'; import { Box, Paper, Typography, ToggleButton, ToggleButtonGroup, CircularProgress, Alert } from '@mui/material'; import ArrowUpwardIcon from '@mui/icons-material/ArrowUpward'; import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward'; import RemoveIcon from '@mui/icons-material/Remove'; import type { CotizacionBolsa } from '../models/mercadoModels'; import { formatInteger, formatCurrency } from '../utils/formatters'; // <-- CORREGIDO: necesitamos formatCurrency import { HistoricalChartWidget } from './HistoricalChartWidget'; import { useApiData } from '../hooks/useApiData'; // --- V SUB-COMPONENTE AÑADIDO V --- const VariacionMerval = ({ actual, anterior }: { actual: number, anterior: number }) => { if (anterior === 0) return null; // Evitar división por cero const variacionPuntos = actual - anterior; const variacionPorcentaje = (variacionPuntos / anterior) * 100; const isPositive = variacionPuntos > 0; const isNegative = variacionPuntos < 0; const color = isPositive ? 'success.main' : isNegative ? 'error.main' : 'text.secondary'; const Icon = isPositive ? ArrowUpwardIcon : isNegative ? ArrowDownwardIcon : RemoveIcon; return ( {formatCurrency(variacionPuntos)} ({variacionPorcentaje.toFixed(2)}%) ); }; // --- ^ SUB-COMPONENTE AÑADIDO ^ --- export const MervalHeroCard = () => { const { data: allLocalData, loading, error } = useApiData('/mercados/bolsa/local'); const [dias, setDias] = useState(30); const handleRangoChange = ( _event: React.MouseEvent, nuevoRango: number | null ) => { if (nuevoRango !== null) { setDias(nuevoRango); } }; const mervalData = allLocalData?.find(d => d.ticker === '^MERV'); if (loading) { return ; } if (error) { return {error}; } if (!mervalData) { return No se encontraron datos para el índice MERVAL.; } return ( Índice S&P MERVAL {formatInteger(mervalData.precioActual)} {/* Ahora sí encontrará el componente */} Semanal Mensual Anual ); };