import { useTransactionReceipt } from 'wagmi';
import { decodeEventLog } from 'viem';
import { useMemo } from "react";
import ArrowRightIcon from '@mui/icons-material/ArrowRight';
import { Box, Typography, Link } from "@mui/material";
import Token from "../../components/Token/Token";
import Modal from "../../components/Modal/Modal";
import GhostStyledIcon from "../../components/Icon/GhostIcon";
import { PrimaryButton } from "../../components/Button";
import { abi as StakingAbi } from "../../abi/GhostStaking.json";
import { DecimalBigNumber } from "../../helpers/DecimalBigNumber";
import { formatNumber, shorten } from "../../helpers";
import { useTokenSymbol } from "../../hooks/tokens";
import { getTokenDecimals } from "../../hooks/helpers";
const TokenBox = ({ tokenAmount, tokenSymbol, decimals, chainTokenSymbol }) => {
return (
{tokenSymbol}
{formatNumber(
new DecimalBigNumber(tokenAmount ? tokenAmount : 0n, decimals),
5
)}
)
}
const StakingViewModal = ({ chainId, isOpen, close, config, historyRecord }) => {
if (historyRecord === null) return null;
const { data: receipt, isLoading, error } = useTransactionReceipt({
hash: historyRecord?.txHash,
query: {
enabled: !!historyRecord?.txHash && isOpen,
}
});
const allDecodedLogs = useMemo(() => {
if (!receipt?.logs) return [];
return receipt.logs.map((log) => {
try {
const decoded = decodeEventLog({
abi: StakingAbi,
data: log.data,
topics: log.topics,
});
return {
eventName: decoded.eventName,
args: decoded.args,
address: log.address
};
} catch (e) {
return null;
}
}).filter(Boolean);
}, [receipt]);
const stakeInfo = useMemo(() => {
return allDecodedLogs.find(l => l.eventName === 'Staked');
}, [allDecodedLogs]);
const { symbol: ftsoSymbol } = useTokenSymbol(chainId, "FTSO");
const ftsoDecimals = getTokenDecimals("FTSO");
const chainInfo = useMemo(() => {
const client = config?.getClient();
return {
url: client?.chain?.blockExplorers?.default?.url,
symbol: client?.chain?.nativeCurrency?.symbol,
};
}, [config]);
return (
{stakeInfo && "Staked"}
{!stakeInfo && "Parsing Transaction Hash"}
>
}
onClose={() => close()}
>
{stakeInfo &&
Receiver
{shorten(stakeInfo.args.receiver, 9, -7)}
Amount
{formatNumber(
new DecimalBigNumber(stakeInfo ? stakeInfo.args.amount : 0n, ftsoDecimals),
5
)} {ftsoSymbol}
View Transaction Details
}
)
}
export default StakingViewModal;