import { Box, CircularProgress, Alert, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, Typography, Tooltip } from '@mui/material'; import ArrowUpwardIcon from '@mui/icons-material/ArrowUpward'; import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward'; import RemoveIcon from '@mui/icons-material/Remove'; // Importaciones de nuestro proyecto import type { CotizacionGrano } from '../models/mercadoModels'; import { useApiData } from '../hooks/useApiData'; import { useIsHoliday } from '../hooks/useIsHoliday'; import { formatInteger, formatDateOnly, formatFullDateTime } from '../utils/formatters'; import { HolidayAlert } from './common/HolidayAlert'; /** * Sub-componente para mostrar la variación con icono y color. */ const Variacion = ({ value }: { value: number }) => { const color = value > 0 ? 'success.main' : value < 0 ? 'error.main' : 'text.secondary'; const Icon = value > 0 ? ArrowUpwardIcon : value < 0 ? ArrowDownwardIcon : RemoveIcon; return ( {formatInteger(value)} ); }; /** * Widget autónomo para la tabla detallada del mercado de granos. */ export const GranosWidget = () => { // Hooks para obtener los datos y el estado de feriado para el mercado argentino. const { data, loading: dataLoading, error: dataError } = useApiData('/mercados/granos'); const isHoliday = useIsHoliday('BA'); // Estado de carga unificado. const isLoading = dataLoading || isHoliday === null; if (isLoading) { return ; } if (dataError) { return {dataError}; } // Si no hay ningún dato que mostrar. if (!data || data.length === 0) { if (isHoliday) { return ; } return No hay datos de granos disponibles en este momento.; } return ( {/* Si es feriado, mostramos la alerta como un aviso encima del contenido. */} {isHoliday && ( )} Grano Precio ($/Tn) Variación Fecha Operación {data.map((row) => ( {row.nombre} ${formatInteger(row.precio)} {formatDateOnly(row.fechaOperacion)} ))}
Fuente: Bolsa de Comercio de Rosario
); };