import type { ReactNode } from 'react';
import { Dialog, Icon, Intent, Loader } from '@vegaprotocol/ui-toolkit';
import { WalletClientError } from '@vegaprotocol/wallet-client';
import type { VegaTxState } from '../../lib/proposals-hooks/use-vega-transaction';
import { VegaTxStatus } from '../../lib/proposals-hooks/use-vega-transaction';
import { useVegaWallet } from '@vegaprotocol/wallet';
import { useT } from '../../use-t';
export type VegaTransactionContentMap = {
[C in VegaTxStatus]?: JSX.Element;
};
export interface VegaTransactionDialogProps {
isOpen: boolean;
transaction: VegaTxState;
onChange?: (isOpen: boolean) => void;
intent?: Intent;
title?: string;
icon?: ReactNode;
content?: VegaTransactionContentMap;
}
export const VegaTransactionDialog = ({
isOpen,
transaction,
onChange,
intent,
title,
icon,
content,
}: VegaTransactionDialogProps) => {
const t = useT();
const computedIntent = intent ? intent : getIntent(transaction);
const computedTitle = title ? title : getTitle(transaction, t);
const computedIcon = icon ? icon : getIcon(transaction);
return (
);
};
interface ContentProps {
transaction: VegaTxState;
content?: VegaTransactionContentMap;
}
const Content = ({ transaction, content }: ContentProps) => {
if (!content) {
return
{t( 'Please open your wallet application and confirm or reject the transaction' )}
{network !== 'MAINNET' && ({t('[This is {{network}} transaction only]', { network })}
)} > ); } if (transaction.status === VegaTxStatus.Error) { let messageText = ''; if (transaction.error instanceof WalletClientError) { messageText = `${transaction.error.title}: ${transaction.error.message}`; } else if (transaction.error instanceof Error) { messageText = transaction.error.message; } content ={t('Please wait for your transaction to be confirmed')} - {transaction.txHash && ( {t('View in block explorer')} )}
{t('Your transaction has been confirmed')} - {transaction.txHash && ( {t('View in block explorer')} )}