import type { RouteExtended } from '@lifi/sdk'
import { Box } from '@mui/material'
import { domMax, LazyMotion, MotionConfig } from 'motion/react'
import type React from 'react'
import type { JSX } from 'react'
import { Card } from '../../components/Card/Card.js'
import { ExecutionStatusCard } from '../../components/ExecutionStatusCard/ExecutionStatusCard.js'
import { StatusIcon } from '../../components/ExecutionStatusCard/StatusIcon.js'
import { WarningMessages } from '../../components/Messages/WarningMessages.js'
import { RouteTokens } from '../../components/RouteCard/RouteTokens.js'
import { useExecutionRows } from '../../components/StepActions/executionRows.js'
import { useRouteExecutionMessage } from '../../hooks/useRouteExecutionMessage.js'
import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'
import { RouteExecutionStatus } from '../../stores/routes/types.js'
import { hasEnumFlag } from '../../utils/enum.js'
import { ExecutionDoneCard } from './ExecutionDoneCard.js'
import { TransactionDoneButtons } from './TransactionDoneButtons.js'
import { TransactionFailedButtons } from './TransactionFailedButtons.js'
export interface TransactionExecutionContentProps {
route: RouteExtended
status: RouteExecutionStatus
restartRoute: () => void
deleteRoute: () => void
}
/**
* Execution-phase layout for the Transaction page.
* Renders the {@link ExecutionStatusCard}, warning messages,
* and terminal action buttons.
*/
export const TransactionExecutionContent: React.FC<
TransactionExecutionContentProps
> = ({ route, status, restartRoute, deleteRoute }): JSX.Element => {
const { title, message } = useRouteExecutionMessage(route, status)
const {
mode,
contractCompactComponent,
contractSecondaryComponent,
defaultUI,
} = useWidgetConfig()
const isDone = hasEnumFlag(status, RouteExecutionStatus.Done)
const rows = useExecutionRows(route, isDone ? route.toAddress : undefined)
const showContract =
mode === 'custom' &&
isDone &&
!!(contractCompactComponent || contractSecondaryComponent)
const iconSlot = showContract ? (
contractCompactComponent || contractSecondaryComponent
) : (
)
const footerSlot = isDone ? (
) : (
)
return (
{status === RouteExecutionStatus.Failed ? (
<>
>
) : isDone ? (
) : null}
)
}