import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; import ErrorRoundedIcon from '@mui/icons-material/ErrorRounded'; import InfoRoundedIcon from '@mui/icons-material/InfoRounded'; import { ListItemAvatar, ListItemText, Typography } from '@mui/material'; import { useNavigate } from 'react-router-dom'; import { useProcessMessage, useRouteExecution } from '../../hooks'; import { RouteExecutionStatus } from '../../stores'; import { navigationRoutes } from '../../utils'; import { StepTimer } from '../Step/StepTimer'; import { TokenAvatar, TokenAvatarGroup } from '../TokenAvatar'; import { ListItem, ListItemButton } from './ActiveTransactions.style'; export const ActiveTransactionItem: React.FC<{ routeId: string; dense?: boolean; }> = ({ routeId, dense }) => { const navigate = useNavigate(); const { route, status } = useRouteExecution({ routeId, executeInBackground: true, }); const lastActiveStep = route?.steps.findLast((step) => step.execution); const lastActiveProcess = lastActiveStep?.execution?.process.at(-1); const { title } = useProcessMessage(lastActiveStep, lastActiveProcess); if (!route || !lastActiveStep) { return null; } const handleClick = () => { navigate(navigationRoutes.transactionExecution, { state: { routeId } }); }; const getStatusComponent = () => { switch (lastActiveProcess?.status) { case 'ACTION_REQUIRED': return ; case 'FAILED': return ; default: return ( ); } }; const ListItemComponent = dense ? ListItem : ListItemButton; return ( {route.fromToken.symbol} {route.toToken.symbol} } secondary={ status !== RouteExecutionStatus.Done ? ( {title} ) : null } /> {getStatusComponent()} ); };