Skip to content

Commit 1a60000

Browse files
improvements
1 parent 51f10c4 commit 1a60000

File tree

3 files changed

+33
-30
lines changed

3 files changed

+33
-30
lines changed

apps/playground-web/src/components/pay/transaction-button.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
useActiveAccount,
1414
useReadContract,
1515
} from "thirdweb/react";
16-
import { toWei } from "thirdweb/utils";
1716
import { THIRDWEB_CLIENT } from "../../lib/client";
1817
import { StyledConnectButton } from "../styled-connect-button";
1918

packages/thirdweb/src/react/web/ui/TransactionButton/DepositScreen.tsx

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,19 @@ import {
1313
} from "../../../core/design-system/index.js";
1414
import { useActiveAccount } from "../../../core/hooks/wallets/useActiveAccount.js";
1515
import { useActiveWallet } from "../../../core/hooks/wallets/useActiveWallet.js";
16+
import { hasSponsoredTransactionsEnabled } from "../../../core/utils/wallet.js";
1617
import { ErrorState } from "../../wallets/shared/ErrorState.js";
1718
import { LoadingScreen } from "../../wallets/shared/LoadingScreen.js";
1819
import { CoinsIcon } from "../ConnectWallet/icons/CoinsIcon.js";
1920
import type { ConnectLocale } from "../ConnectWallet/locale/types.js";
2021
import { useTransactionCostAndData } from "../ConnectWallet/screens/Buy/main/useBuyTxStates.js";
2122
import { WalletRow } from "../ConnectWallet/screens/Buy/swap/WalletRow.js";
2223
import { formatTokenBalance } from "../ConnectWallet/screens/formatTokenBalance.js";
24+
import { isNativeToken } from "../ConnectWallet/screens/nativeToken.js";
2325
import { CopyIcon } from "../components/CopyIcon.js";
2426
import { QRCode } from "../components/QRCode.js";
2527
import { Skeleton } from "../components/Skeleton.js";
2628
import { Spacer } from "../components/Spacer.js";
27-
import { Spinner } from "../components/Spinner.js";
2829
import { WalletImage } from "../components/WalletImage.js";
2930
import { Container, ModalHeader } from "../components/basic.js";
3031
import { Button } from "../components/buttons.js";
@@ -99,6 +100,8 @@ export function DepositScreen(props: {
99100
refetchIntervalMs: 10_000,
100101
});
101102
const theme = useCustomTheme();
103+
const sponsoredTransactionsEnabled =
104+
hasSponsoredTransactionsEnabled(activeWallet);
102105

103106
if (transactionCostAndDataError) {
104107
return (
@@ -122,13 +125,16 @@ export function DepositScreen(props: {
122125
return <LoadingScreen />;
123126
}
124127

128+
const totalCost =
129+
isNativeToken(transactionCostAndData.token) && !sponsoredTransactionsEnabled
130+
? transactionCostAndData.transactionValueWei +
131+
transactionCostAndData.gasCostWei
132+
: transactionCostAndData.transactionValueWei;
125133
const insufficientFunds =
126-
transactionCostAndData.walletBalance.value <
127-
transactionCostAndData.transactionValueWei;
134+
transactionCostAndData.walletBalance.value < totalCost;
128135
const requiredFunds = transactionCostAndData.walletBalance.value
129-
? transactionCostAndData.transactionValueWei -
130-
transactionCostAndData.walletBalance.value
131-
: transactionCostAndData.transactionValueWei;
136+
? totalCost - transactionCostAndData.walletBalance.value
137+
: totalCost;
132138

133139
const openFaucetLink = () => {
134140
window.open(
@@ -175,29 +181,26 @@ export function DepositScreen(props: {
175181
client={client}
176182
/>
177183
)}
178-
{transactionCostAndData.walletBalance.value ? (
184+
{transactionCostAndData.walletBalance.value !== undefined &&
185+
!transactionCostAndDataFetching ? (
179186
<Container flex="row" gap="3xs" center="y">
180-
{transactionCostAndDataFetching ? (
181-
<Spinner size="sm" color="secondaryText" />
182-
) : (
183-
<>
184-
<Text size="xs" color="secondaryText" weight={500}>
185-
{formatTokenBalance(
186-
transactionCostAndData.walletBalance,
187-
false,
188-
)}
189-
</Text>
190-
<TokenSymbol
191-
token={transactionCostAndData.token}
192-
chain={props.tx.chain}
193-
size="xs"
194-
color="secondaryText"
195-
/>
196-
</>
197-
)}
187+
<Text size="xs" color="secondaryText" weight={500}>
188+
{formatTokenBalance(
189+
transactionCostAndData.walletBalance,
190+
false,
191+
)}
192+
</Text>
193+
<TokenSymbol
194+
token={transactionCostAndData.token}
195+
chain={props.tx.chain}
196+
size="xs"
197+
color="secondaryText"
198+
/>
198199
</Container>
199200
) : (
200-
<Skeleton width="70px" height={fontSize.xs} />
201+
<Container flex="row" gap="3xs" center="y">
202+
<Skeleton width="70px" height={fontSize.xs} />
203+
</Container>
201204
)}
202205
</Container>
203206
</Container>

packages/thirdweb/src/react/web/ui/TransactionButton/ExecutingScreen.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@ export function ExecutingTxScreen(props: {
2424
payModal: false,
2525
});
2626
const [txHash, setTxHash] = useState<Hex | undefined>();
27+
const [txError, setTxError] = useState<Error | undefined>();
2728
const chainExplorers = useChainExplorers(props.tx.chain);
2829
const [status, setStatus] = useState<"loading" | "failed" | "sent">(
2930
"loading",
3031
);
3132

3233
const sendTx = useCallback(async () => {
3334
setStatus("loading");
35+
setTxError(undefined);
3436
try {
3537
const txData = await sendTxCore.mutateAsync(props.tx);
3638
setTxHash(txData.transactionHash);
@@ -40,6 +42,7 @@ export function ExecutingTxScreen(props: {
4042
// Do not reject the transaction here, because the user may want to try again
4143
// we only reject on modal close
4244
console.error(e);
45+
setTxError(e as Error);
4346
setStatus("failed");
4447
}
4548
}, [sendTxCore, props.tx, props.onTxSent]);
@@ -81,9 +84,7 @@ export function ExecutingTxScreen(props: {
8184
</Text>
8285
<Spacer y="sm" />
8386
<Text color="danger" center size="sm">
84-
{status === "failed" && sendTxCore.error
85-
? sendTxCore.error.message
86-
: ""}
87+
{status === "failed" && txError ? txError.message || "" : ""}
8788
</Text>
8889

8990
<Spacer y="xxl" />

0 commit comments

Comments
 (0)