import ArrowForward from '@mui/icons-material/ArrowForward' import ErrorRounded from '@mui/icons-material/ErrorRounded' import InfoRounded from '@mui/icons-material/InfoRounded' import { ListItemAvatar, ListItemText, Typography } from '@mui/material' import { useNavigate } from 'react-router-dom' import { useProcessMessage } from '../../hooks/useProcessMessage.js' import { useRouteExecution } from '../../hooks/useRouteExecution.js' import { RouteExecutionStatus } from '../../stores/routes/types.js' import { navigationRoutes } from '../../utils/navigationRoutes.js' import { TokenAvatarGroup } from '../Avatar/Avatar.style.js' import { TokenAvatar } from '../Avatar/TokenAvatar.js' import { StepTimer } from '../Timer/StepTimer.js' import { ListItem, ListItemButton } from './ActiveTransactions.style.js' 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': case 'MESSAGE_REQUIRED': case 'RESET_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()} ) }