import ContentCopyIcon from '@mui/icons-material/ContentCopyRounded';
import { Box, IconButton, Typography } from '@mui/material';
import { useEffect, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { useLocation } from 'react-router-dom';
import { Card, CardTitle } from '../../components/Card';
import { ContractComponent } from '../../components/ContractComponent';
import { Insurance } from '../../components/Insurance';
import { PageContainer } from '../../components/PageContainer';
import { getStepList } from '../../components/Step';
import { useNavigateBack, useTools, useTransactionDetails } from '../../hooks';
import { useWidgetConfig } from '../../providers';
import { getSourceTxHash, useRouteExecutionStore } from '../../stores';
import { formatTokenAmount, navigationRoutes } from '../../utils';
import { buildRouteFromTxHistory } from '../../utils/converters';
import { ContactSupportButton } from './ContactSupportButton';
import { TransactionDetailsSkeleton } from './TransactionDetailsSkeleton';
export const TransactionDetailsPage: React.FC = () => {
const { t, i18n } = useTranslation();
const { navigate } = useNavigateBack();
const { subvariant, contractComponent, contractSecondaryComponent } =
useWidgetConfig();
const { state }: any = useLocation();
const { tools } = useTools();
const storedRouteExecution = useRouteExecutionStore(
(store) => store.routes[state?.routeId],
);
const { transaction, isLoading } = useTransactionDetails(
state?.transactionHash,
);
const routeExecution = useMemo(() => {
if (storedRouteExecution) {
return storedRouteExecution;
}
if (isLoading) {
return;
}
if (transaction) {
const routeExecution = buildRouteFromTxHistory(transaction, tools);
return routeExecution;
}
}, [isLoading, storedRouteExecution, tools, transaction]);
useEffect(() => {
if (!isLoading && !routeExecution) {
navigate(navigationRoutes.home);
}
}, [isLoading, navigate, routeExecution]);
const copySupportId = async () => {
await navigator.clipboard.writeText(supportId);
};
const sourceTxHash = getSourceTxHash(routeExecution?.route);
const insuranceCoverageId = sourceTxHash ?? routeExecution?.route.fromAddress;
let supportId = sourceTxHash ?? routeExecution?.route.id ?? '';
if (process.env.NODE_ENV === 'development') {
supportId += `_${routeExecution?.route.id}`;
}
const startedAt = new Date(
(routeExecution?.route.steps[0].execution?.process[0].startedAt ?? 0) *
(storedRouteExecution ? 1 : 1000), // local and BE routes have different ms handling
);
return isLoading && !storedRouteExecution ? (
) : (
{new Intl.DateTimeFormat(i18n.language, {
dateStyle: 'long',
}).format(startedAt)}
{new Intl.DateTimeFormat(i18n.language, {
timeStyle: 'short',
}).format(startedAt)}
{getStepList(routeExecution?.route, subvariant)}
{subvariant === 'nft' ? (
{contractSecondaryComponent || contractComponent}
) : null}
{routeExecution?.route?.insurance?.state === 'INSURED' ? (
) : null}
{t('main.supportId')}
{supportId}
);
};