import { useState } from 'react'; import { Box, CircularProgress, Alert, Paper, Typography, Dialog, DialogTitle, DialogContent, IconButton } from '@mui/material'; import { PiCow } from "react-icons/pi"; import ScaleIcon from '@mui/icons-material/Scale'; import { PiChartLineUpBold } from "react-icons/pi"; import CloseIcon from '@mui/icons-material/Close'; import type { CotizacionGanado } from '../models/mercadoModels'; import { useApiData } from '../hooks/useApiData'; import { formatCurrency, formatInteger, formatDateOnly } from '../utils/formatters'; import { AgroHistoricalChartWidget } from './AgroHistoricalChartWidget'; // El subcomponente ahora tendrá un botón para el gráfico. const AgroCard = ({ registro, onChartClick }: { registro: CotizacionGanado, onChartClick: () => void }) => { return ( // Añadimos posición relativa para poder posicionar el botón del gráfico. { e.stopPropagation(); onChartClick(); }} sx={{ position: 'absolute', top: 8, right: 8, backgroundColor: 'rgba(255, 255, 255, 0.7)', // Fondo semitransparente backdropFilter: 'blur(2px)', // Efecto "frosty glass" para el fondo border: '1px solid rgba(0, 0, 0, 0.1)', boxShadow: '0 2px 5px rgba(0,0,0,0.1)', transition: 'all 0.2s ease-in-out', // Transición suave para todos los cambios '&:hover': { transform: 'translateY(-2px)', // Se eleva un poco boxShadow: '0 4px 10px rgba(0,0,0,0.2)', // La sombra se hace más grande backgroundColor: 'rgba(255, 255, 255, 0.9)', } }} > {registro.categoria} {registro.especificaciones} Precio Máximo: ${formatCurrency(registro.maximo)} Precio Mínimo: ${formatCurrency(registro.minimo)} Precio Mediano: ${formatCurrency(registro.mediano)} {/* Pie de la tarjeta */} {formatInteger(registro.cabezas)} Cabezas {formatInteger(registro.kilosTotales)} Kilos Dato Registrado el {formatDateOnly(registro.fechaRegistro)} ); }; export const MercadoAgroCardWidget = () => { const { data, loading, error } = useApiData('/mercados/agroganadero'); const [selectedCategory, setSelectedCategory] = useState(null); const handleChartClick = (registro: CotizacionGanado) => { setSelectedCategory(registro); }; const handleCloseDialog = () => { setSelectedCategory(null); }; if (loading) { return ; } if (error) { return {error}; } if (!data || data.length === 0) { return No hay datos del mercado agroganadero disponibles.; } return ( <> {data.map(registro => ( handleChartClick(registro)} /> ))} theme.palette.grey[500], backgroundColor: 'white', boxShadow: 3, // Añade una sombra para que destaque '&:hover': { backgroundColor: 'grey.100', // Un leve cambio de color al pasar el mouse }, }} > Mensual de {selectedCategory?.categoria} ({selectedCategory?.especificaciones}) {selectedCategory && ( )} ); };