Add toast for failed txs

This commit is contained in:
Isha 2024-11-08 14:40:12 +05:30 committed by IshaVenikar
parent 97fa1988fb
commit 49c204affd
7 changed files with 27 additions and 17 deletions

View File

@ -17,6 +17,7 @@ VITE_GITHUB_IMAGE_UPLOAD_PWA_TEMPLATE_REPO = 'LACONIC_HOSTED_CONFIG_github_image
VITE_GITHUB_NEXT_APP_TEMPLATE_REPO = 'LACONIC_HOSTED_CONFIG_github_next_app_templaterepo' VITE_GITHUB_NEXT_APP_TEMPLATE_REPO = 'LACONIC_HOSTED_CONFIG_github_next_app_templaterepo'
VITE_WALLET_CONNECT_ID = 'LACONIC_HOSTED_CONFIG_wallet_connect_id' VITE_WALLET_CONNECT_ID = 'LACONIC_HOSTED_CONFIG_wallet_connect_id'
VITE_LACONICD_CHAIN_ID = 'LACONIC_HOSTED_CONFIG_laconicd_chain_id' VITE_LACONICD_CHAIN_ID = 'LACONIC_HOSTED_CONFIG_laconicd_chain_id'
VITE_WALLET_IFRAME_URL = 'LACONIC_HOSTED_CONFIG_wallet_iframe_url'
VITE_LIT_RELAY_API_KEY = 'LACONIC_HOSTED_CONFIG_lit_relay_api_key' VITE_LIT_RELAY_API_KEY = 'LACONIC_HOSTED_CONFIG_lit_relay_api_key'
VITE_BUGSNAG_API_KEY = 'LACONIC_HOSTED_CONFIG_bugsnag_api_key' VITE_BUGSNAG_API_KEY = 'LACONIC_HOSTED_CONFIG_bugsnag_api_key'
VITE_PASSKEY_WALLET_RPID = 'LACONIC_HOSTED_CONFIG_passkey_wallet_rpid' VITE_PASSKEY_WALLET_RPID = 'LACONIC_HOSTED_CONFIG_passkey_wallet_rpid'

View File

@ -18,6 +18,8 @@ record:
LACONIC_HOSTED_CONFIG_bugsnag_api_key: 8c480cd5386079f9dd44f9581264a073 LACONIC_HOSTED_CONFIG_bugsnag_api_key: 8c480cd5386079f9dd44f9581264a073
LACONIC_HOSTED_CONFIG_passkey_wallet_rpid: dashboard.staging.apps.snowballtools.com LACONIC_HOSTED_CONFIG_passkey_wallet_rpid: dashboard.staging.apps.snowballtools.com
LACONIC_HOSTED_CONFIG_turnkey_api_base_url: https://api.turnkey.com LACONIC_HOSTED_CONFIG_turnkey_api_base_url: https://api.turnkey.com
LACONIC_HOSTED_CONFIG_laconicd_chain_id:
LACONIC_HOSTED_CONFIG_wallet_iframe_url:
LACONIC_HOSTED_CONFIG_turnkey_organization_id: 5049ae99-5bca-40b3-8317-504384d4e591 LACONIC_HOSTED_CONFIG_turnkey_organization_id: 5049ae99-5bca-40b3-8317-504384d4e591
meta: meta:
note: Added by Snowball @ Mon Jun 24 23:51:48 UTC 2024 note: Added by Snowball @ Mon Jun 24 23:51:48 UTC 2024

View File

@ -15,4 +15,4 @@ VITE_PASSKEY_WALLET_RPID=
VITE_TURNKEY_API_BASE_URL= VITE_TURNKEY_API_BASE_URL=
VITE_LACONICD_CHAIN_ID= VITE_LACONICD_CHAIN_ID=
VITE_IFRAME_ORIGIN_URL= VITE_WALLET_IFRAME_URL=

View File

@ -7,7 +7,6 @@ const AccountsDropdown = ({
accounts: string[]; accounts: string[];
onAccountChange: (selectedAccount: string) => void; onAccountChange: (selectedAccount: string) => void;
}) => { }) => {
return ( return (
<div className="p-6 bg-slate-100 dark:bg-overlay3 rounded-lg mb-6 shadow-md"> <div className="p-6 bg-slate-100 dark:bg-overlay3 rounded-lg mb-6 shadow-md">
{!accounts.length ? ( {!accounts.length ? (

View File

@ -23,7 +23,7 @@ import { useGQLClient } from '../../../context/GQLClientContext';
import IFrameModal from './IFrameModal'; import IFrameModal from './IFrameModal';
import EnvironmentVariablesForm from 'pages/org-slug/projects/id/settings/EnvironmentVariablesForm'; import EnvironmentVariablesForm from 'pages/org-slug/projects/id/settings/EnvironmentVariablesForm';
import { EnvironmentVariablesFormValues } from 'types/types'; import { EnvironmentVariablesFormValues } from 'types/types';
import { VITE_LACONICD_CHAIN_ID, VITE_IFRAME_ORIGIN_URL } from 'utils/constants'; import { VITE_LACONICD_CHAIN_ID, VITE_WALLET_IFRAME_URL } from 'utils/constants';
import AccountsDropdown from './AccountsDropdown'; import AccountsDropdown from './AccountsDropdown';
type ConfigureDeploymentFormValues = { type ConfigureDeploymentFormValues = {
@ -37,7 +37,7 @@ type ConfigureFormValues = ConfigureDeploymentFormValues &
EnvironmentVariablesFormValues; EnvironmentVariablesFormValues;
const DEFAULT_MAX_PRICE = '10000'; const DEFAULT_MAX_PRICE = '10000';
const TX_APPROVAL_TIMEOUT = 60000; const TX_APPROVAL_TIMEOUT_MS = 60000;
const Configure = () => { const Configure = () => {
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
@ -216,6 +216,13 @@ const Configure = () => {
); );
if (!txHash) { if (!txHash) {
console.error('Tx not successful');
toast({
id: 'unsuccessful-tx',
title: 'Transaction rejected',
variant: 'error',
onDismiss: dismiss,
});
return; return;
} }
@ -289,6 +296,7 @@ const Configure = () => {
variant: 'error', variant: 'error',
onDismiss: dismiss, onDismiss: dismiss,
}); });
throw new Error('Error deploying app');
} }
}, },
[client, createProject, dismiss, toast], [client, createProject, dismiss, toast],
@ -318,7 +326,7 @@ const Configure = () => {
const cosmosSendTokensHandler = useCallback( const cosmosSendTokensHandler = useCallback(
async (selectedAccount: string, amount: string) => { async (selectedAccount: string, amount: string) => {
if (!selectedAccount) { if (!selectedAccount) {
return; throw new Error('Account not selected');
} }
const senderAddress = selectedAccount; const senderAddress = selectedAccount;
@ -330,14 +338,13 @@ const Configure = () => {
await requestTx(senderAddress, snowballAddress, amount); await requestTx(senderAddress, snowballAddress, amount);
const txHash = await new Promise<string>((resolve, reject) => { const txHash = await new Promise<string | null>((resolve, reject) => {
const handleTxStatus = async (event: MessageEvent) => { const handleTxStatus = async (event: MessageEvent) => {
if (event.origin !== VITE_IFRAME_ORIGIN_URL) return; if (event.origin !== VITE_WALLET_IFRAME_URL) return;
if (event.data.type === 'TRANSACTION_SUCCESS') { if (event.data.type === 'TRANSACTION_RESPONSE') {
const txResponse = event.data.data; const txResponse = event.data.data;
resolve(txResponse); resolve(txResponse);
setIsFrameVisible(false);
} else if (event.data.type === 'ERROR') { } else if (event.data.type === 'ERROR') {
console.error('Error from wallet:', event.data.message); console.error('Error from wallet:', event.data.message);
reject(new Error('Transaction failed')); reject(new Error('Transaction failed'));
@ -348,6 +355,7 @@ const Configure = () => {
onDismiss: dismiss, onDismiss: dismiss,
}); });
} }
setIsFrameVisible(false);
window.removeEventListener('message', handleTxStatus); window.removeEventListener('message', handleTxStatus);
}; };
@ -364,12 +372,12 @@ const Configure = () => {
variant: 'error', variant: 'error',
onDismiss: dismiss, onDismiss: dismiss,
}); });
}, TX_APPROVAL_TIMEOUT); }, TX_APPROVAL_TIMEOUT_MS);
}); });
return txHash; return txHash;
} catch (error) { } catch (error) {
console.error('Error in transaction:', error); console.error('Error in transaction:', error);
return; throw new Error('Error in transaction:');
} finally { } finally {
setIsPaymentLoading(false); setIsPaymentLoading(false);
} }
@ -393,7 +401,7 @@ const Configure = () => {
toAddress: recipient, toAddress: recipient,
amount, amount,
}, },
VITE_IFRAME_ORIGIN_URL VITE_WALLET_IFRAME_URL
); );
setIsFrameVisible(true); setIsFrameVisible(true);

View File

@ -2,7 +2,7 @@ import { useCallback, useEffect } from 'react';
import { Box, Modal } from '@mui/material'; import { Box, Modal } from '@mui/material';
import { VITE_LACONICD_CHAIN_ID, VITE_IFRAME_ORIGIN_URL } from 'utils/constants'; import { VITE_LACONICD_CHAIN_ID, VITE_WALLET_IFRAME_URL } from 'utils/constants';
const IFrameModal = ({ const IFrameModal = ({
setAccounts, setAccounts,
@ -16,7 +16,7 @@ const IFrameModal = ({
useEffect(() => { useEffect(() => {
const handleMessage = (event: MessageEvent) => { const handleMessage = (event: MessageEvent) => {
// TODO: Use env for origin URL // TODO: Use env for origin URL
if (event.origin !== VITE_IFRAME_ORIGIN_URL) return; if (event.origin !== VITE_WALLET_IFRAME_URL) return;
if (event.data.type === 'WALLET_ACCOUNTS_DATA') { if (event.data.type === 'WALLET_ACCOUNTS_DATA') {
setAccounts(event.data.data); setAccounts(event.data.data);
@ -45,7 +45,7 @@ const IFrameModal = ({
type: 'REQUEST_WALLET_ACCOUNTS', type: 'REQUEST_WALLET_ACCOUNTS',
chainId: VITE_LACONICD_CHAIN_ID, chainId: VITE_LACONICD_CHAIN_ID,
}, },
VITE_IFRAME_ORIGIN_URL VITE_WALLET_IFRAME_URL
); );
}, []); }, []);
@ -71,7 +71,7 @@ const IFrameModal = ({
<iframe <iframe
onLoad={getDataFromWallet} onLoad={getDataFromWallet}
id="walletIframe" id="walletIframe"
src={`${VITE_IFRAME_ORIGIN_URL}/WalletEmbed`} src={`${VITE_WALLET_IFRAME_URL}/WalletEmbed`}
width="100%" width="100%"
height="100%" height="100%"
sandbox="allow-scripts allow-same-origin" sandbox="allow-scripts allow-same-origin"

View File

@ -12,4 +12,4 @@ export const VITE_WALLET_CONNECT_ID = import.meta.env.VITE_WALLET_CONNECT_ID;
export const VITE_BUGSNAG_API_KEY = import.meta.env.VITE_BUGSNAG_API_KEY; export const VITE_BUGSNAG_API_KEY = import.meta.env.VITE_BUGSNAG_API_KEY;
export const VITE_LIT_RELAY_API_KEY = import.meta.env.VITE_LIT_RELAY_API_KEY; export const VITE_LIT_RELAY_API_KEY = import.meta.env.VITE_LIT_RELAY_API_KEY;
export const VITE_LACONICD_CHAIN_ID = import.meta.env.VITE_LACONICD_CHAIN_ID; export const VITE_LACONICD_CHAIN_ID = import.meta.env.VITE_LACONICD_CHAIN_ID;
export const VITE_IFRAME_ORIGIN_URL = import.meta.env.VITE_IFRAME_ORIGIN_URL; export const VITE_WALLET_IFRAME_URL = import.meta.env.VITE_WALLET_IFRAME_URL;