import { Box, CircularProgress, Alert, Paper, Typography } from '@mui/material'; import ArrowUpwardIcon from '@mui/icons-material/ArrowUpward'; import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward'; import RemoveIcon from '@mui/icons-material/Remove'; // Iconos de react-icons para cada grano import { GiSunflower, GiWheat, GiCorn, GiGrain } from "react-icons/gi"; import { TbGrain } from "react-icons/tb"; import type { CotizacionGrano } from '../models/mercadoModels'; import { useApiData } from '../hooks/useApiData'; import { formatCurrency, formatDateOnly } from '../utils/formatters'; // Función para elegir el icono según el nombre del grano const getGrainIcon = (nombre: string) => { switch (nombre.toLowerCase()) { case 'girasol': return ; case 'trigo': return ; case 'sorgo': return ; case 'maiz': return ; default: return ; } }; // Subcomponente para una única tarjeta de grano const GranoCard = ({ grano }: { grano: CotizacionGrano }) => { const isPositive = grano.variacionPrecio > 0; const isNegative = grano.variacionPrecio < 0; const color = isPositive ? 'success.main' : isNegative ? 'error.main' : 'text.secondary'; const Icon = isPositive ? ArrowUpwardIcon : isNegative ? ArrowDownwardIcon : RemoveIcon; return ( {getGrainIcon(grano.nombre)} {grano.nombre} ${formatCurrency(grano.precio)} por Tonelada {formatCurrency(grano.variacionPrecio)} Operación: {formatDateOnly(grano.fechaOperacion)} ); }; export const GranosCardWidget = () => { const { data, loading, error } = useApiData('/mercados/granos'); if (loading) { return ; } if (error) { return {error}; } if (!data || data.length === 0) { return No hay datos de granos disponibles.; } return ( {data.map((grano) => ( ))} ); };