import Link from 'next/link' import { FC } from 'react' import { ContractTxResult, SubstrateExplorer, contractTx, useInkathon, } from '@scio-labs/use-inkathon' import { toast } from 'react-hot-toast' type ContractTxWithToastParams = Parameters export const contractTxWithToast = async (...contractTxParams: ContractTxWithToastParams) => { return toast.promise(contractTx(...contractTxParams), { loading: 'Sending transaction…', success: (result) => , error: (result) => , }) } export const ContractTxSuccessToast: FC = ({ extrinsicHash, blockHash }) => { const { activeChain } = useInkathon() const subscanUrl = activeChain?.explorerUrls?.[SubstrateExplorer.Subscan] const subscanDetailUrl = subscanUrl && extrinsicHash ? `${subscanUrl}/extrinsic/${extrinsicHash}` : null const polkadotjsUrl = activeChain?.explorerUrls?.[SubstrateExplorer.PolkadotJs] const polkadotjsDetailUrl = polkadotjsUrl && blockHash ? `${polkadotjsUrl}/query/${blockHash}` : null return (
Transaction successful
{(subscanDetailUrl || polkadotjsDetailUrl) && (
View on{' '} {subscanDetailUrl && ( Subscan ↗ )} {subscanDetailUrl && polkadotjsDetailUrl && ' ∙ '} {polkadotjsDetailUrl && ( Polkadot.js ↗ )}
)}
) } export const ContractTxErrorToast: FC = ({ errorMessage }) => { const { activeChain } = useInkathon() const faucetUrl = activeChain?.faucetUrls?.[0] let message: string switch (errorMessage) { case 'UserCancelled': message = 'Transaction cancelled' break case 'TokenBelowMinimum': message = 'Insufficient balance to pay for fees' break case 'ExtrinsicFailed': message = 'Transaction failed' break case 'Error': message = 'Transaction failed' break default: message = errorMessage ? `Transaction failed (${errorMessage})` : 'Transaction failed' } return (
{message}
{errorMessage === 'TokenBelowMinimum' && faucetUrl && (
Get tokens from a faucet ↗
)}
) }