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 { formatCurrency, formatCurrency2Decimal } from '../utils/formatters'; import { HistoricalChartWidget } from './HistoricalChartWidget'; import { useApiData } from '../hooks/useApiData'; 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)}%) ); }; 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 {formatCurrency2Decimal(mervalData.precioActual)} Semanal Mensual Anual ); };