Skip to content

Commit d94be62

Browse files
committed
fix: disable button when user has insufficient native balance
1 parent 9f353a8 commit d94be62

File tree

8 files changed

+50
-8
lines changed

8 files changed

+50
-8
lines changed

web/src/pages/MyTransactions/TransactionDetails/PreviewCardButtons/AcceptSettlementButton.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { usePublicClient } from "wagmi";
44
import { isUndefined } from "utils/index";
55
import { wrapWithToast } from "utils/wrapWithToast";
66
import { useTransactionDetailsContext } from "context/TransactionDetailsContext";
7+
import { useNewTransactionContext } from "context/NewTransactionContext";
78
import {
89
useSimulateEscrowUniversalAcceptSettlement,
910
useWriteEscrowUniversalAcceptSettlement,
@@ -15,6 +16,7 @@ const AcceptButton: React.FC = () => {
1516
const publicClient = usePublicClient();
1617
const { id } = useTransactionDetailsContext();
1718
const refetchQuery = useQueryRefetch();
19+
const { hasSufficientNativeBalance } = useNewTransactionContext();
1820

1921
const { data: acceptSettlementConfig } = useSimulateEscrowUniversalAcceptSettlement({
2022
args: [BigInt(id)],
@@ -39,7 +41,14 @@ const AcceptButton: React.FC = () => {
3941
}
4042
};
4143

42-
return <Button isLoading={isSending} disabled={isSending} text="Accept" onClick={handleAcceptSettlement} />;
44+
return (
45+
<Button
46+
isLoading={isSending}
47+
disabled={isSending || !hasSufficientNativeBalance}
48+
text="Accept"
49+
onClick={handleAcceptSettlement}
50+
/>
51+
);
4352
};
4453

4554
export default AcceptButton;

web/src/pages/MyTransactions/TransactionDetails/PreviewCardButtons/ExecuteTransactionButton.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { usePublicClient } from "wagmi";
44
import { useTransactionDetailsContext } from "context/TransactionDetailsContext";
55
import { isUndefined } from "utils/index";
66
import { wrapWithToast } from "utils/wrapWithToast";
7+
import { useNewTransactionContext } from "context/NewTransactionContext";
78
import {
89
useSimulateEscrowUniversalExecuteTransaction,
910
useWriteEscrowUniversalExecuteTransaction,
@@ -15,6 +16,7 @@ const ExecuteTransactionButton: React.FC = () => {
1516
const publicClient = usePublicClient();
1617
const { id } = useTransactionDetailsContext();
1718
const refetchQuery = useQueryRefetch();
19+
const { hasSufficientNativeBalance } = useNewTransactionContext();
1820

1921
const { data: executeTransactionConfig } = useSimulateEscrowUniversalExecuteTransaction({
2022
args: [BigInt(id)],
@@ -41,7 +43,12 @@ const ExecuteTransactionButton: React.FC = () => {
4143
};
4244

4345
return (
44-
<Button isLoading={isSending} disabled={isSending} text="Execute Transaction" onClick={handleExecuteTransaction} />
46+
<Button
47+
isLoading={isSending}
48+
disabled={isSending || !hasSufficientNativeBalance}
49+
text="Execute Transaction"
50+
onClick={handleExecuteTransaction}
51+
/>
4552
);
4653
};
4754

web/src/pages/MyTransactions/TransactionDetails/PreviewCardButtons/ProposeSettlementButton.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { parseEther } from "viem";
55
import { isUndefined } from "utils/index";
66
import { wrapWithToast } from "utils/wrapWithToast";
77
import { useTransactionDetailsContext } from "context/TransactionDetailsContext";
8+
import { useNewTransactionContext } from "context/NewTransactionContext";
89
import {
910
useSimulateEscrowUniversalProposeSettlement,
1011
useWriteEscrowUniversalProposeSettlement,
@@ -28,6 +29,7 @@ const ProposeSettlementButton: React.FC<IProposeSettlementButton> = ({
2829
const publicClient = usePublicClient();
2930
const { id } = useTransactionDetailsContext();
3031
const refetchQuery = useQueryRefetch();
32+
const { hasSufficientNativeBalance } = useNewTransactionContext();
3133

3234
const { data: proposeSettlementConfig } = useSimulateEscrowUniversalProposeSettlement({
3335
args: [BigInt(id), parseEther(amountProposed)],
@@ -57,7 +59,7 @@ const ProposeSettlementButton: React.FC<IProposeSettlementButton> = ({
5759
return (
5860
<Button
5961
isLoading={isSending}
60-
disabled={isSending || !isAmountValid}
62+
disabled={isSending || !isAmountValid || !hasSufficientNativeBalance}
6163
text={buttonText}
6264
onClick={handleProposeSettlement}
6365
/>

web/src/pages/MyTransactions/TransactionDetails/PreviewCardButtons/RaiseDisputeButton.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React, { useMemo, useState } from "react";
22
import { Button } from "@kleros/ui-components-library";
33
import { useAccount, usePublicClient } from "wagmi";
4+
import { useNewTransactionContext } from "context/NewTransactionContext";
45
import {
56
useWriteEscrowUniversalPayArbitrationFeeByBuyer,
67
useWriteEscrowUniversalPayArbitrationFeeBySeller,
@@ -25,6 +26,7 @@ const RaiseDisputeButton: React.FC<IRaiseDisputeButton> = ({ toggleModal, button
2526
const { buyer, id } = useTransactionDetailsContext();
2627
const isBuyer = useMemo(() => address?.toLowerCase() === buyer?.toLowerCase(), [address, buyer]);
2728
const refetchQuery = useQueryRefetch();
29+
const { hasSufficientNativeBalance } = useNewTransactionContext();
2830

2931
const { data: payArbitrationFeeByBuyerConfig } = useSimulateEscrowUniversalPayArbitrationFeeByBuyer({
3032
args: [BigInt(id)],
@@ -76,7 +78,14 @@ const RaiseDisputeButton: React.FC<IRaiseDisputeButton> = ({ toggleModal, button
7678
}
7779
};
7880

79-
return <Button isLoading={isSending} disabled={isSending} text={buttonText} onClick={handleRaiseDispute} />;
81+
return (
82+
<Button
83+
isLoading={isSending}
84+
disabled={isSending || !hasSufficientNativeBalance}
85+
text={buttonText}
86+
onClick={handleRaiseDispute}
87+
/>
88+
);
8089
};
8190

8291
export default RaiseDisputeButton;

web/src/pages/MyTransactions/TransactionDetails/PreviewCardButtons/TimeOutButton.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React, { useMemo, useState } from "react";
22
import { Button } from "@kleros/ui-components-library";
33
import { useAccount, usePublicClient } from "wagmi";
4+
import { useNewTransactionContext } from "context/NewTransactionContext";
45
import {
56
useWriteEscrowUniversalTimeOutByBuyer,
67
useWriteEscrowUniversalTimeOutBySeller,
@@ -19,6 +20,7 @@ const TimeOutButton: React.FC = () => {
1920
const { buyer, id } = useTransactionDetailsContext();
2021
const isBuyer = useMemo(() => address?.toLowerCase() === buyer?.toLowerCase(), [address, buyer]);
2122
const refetchQuery = useQueryRefetch();
23+
const { hasSufficientNativeBalance } = useNewTransactionContext();
2224

2325
const { data: timeOutByBuyerConfig } = useSimulateEscrowUniversalTimeOutByBuyer({
2426
args: [BigInt(id)],
@@ -61,7 +63,14 @@ const TimeOutButton: React.FC = () => {
6163
}
6264
};
6365

64-
return <Button isLoading={isSending} disabled={isSending} text="Claim full payment back" onClick={handleTimeout} />;
66+
return (
67+
<Button
68+
isLoading={isSending}
69+
disabled={isSending || !hasSufficientNativeBalance}
70+
text="Claim full payment back"
71+
onClick={handleTimeout}
72+
/>
73+
);
6574
};
6675

6776
export default TimeOutButton;

web/src/pages/MyTransactions/TransactionDetails/WasItFulfilled/Buttons/ClaimFullPaymentButton.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { useState } from "react";
22
import { Button } from "@kleros/ui-components-library";
33
import { useToggle } from "react-use";
44
import PaymentReleased from "pages/MyTransactions/Modal/PaymentReleased";
5+
import { useNewTransactionContext } from "context/NewTransactionContext";
56
import {
67
useWriteEscrowUniversalExecuteTransaction,
78
useSimulateEscrowUniversalExecuteTransaction,
@@ -16,6 +17,7 @@ const ClaimFullPaymentButton: React.FC = () => {
1617
const [isSending, setIsSending] = useState<boolean>(false);
1718
const publicClient = usePublicClient();
1819
const { id } = useTransactionDetailsContext();
20+
const { hasSufficientNativeBalance } = useNewTransactionContext();
1921

2022
const { data: executeTransactionConfig } = useSimulateEscrowUniversalExecuteTransaction({
2123
args: [id],
@@ -47,7 +49,7 @@ const ClaimFullPaymentButton: React.FC = () => {
4749
<>
4850
<Button
4951
isLoading={isSending}
50-
disabled={isSending}
52+
disabled={isSending || !hasSufficientNativeBalance}
5153
text={"No. Claim full payment"}
5254
onClick={handleExecuteTransaction}
5355
/>

web/src/pages/MyTransactions/TransactionDetails/WasItFulfilled/Buttons/ReleasePaymentButton.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { useState } from "react";
22
import { Button } from "@kleros/ui-components-library";
33
import { useToggle } from "react-use";
44
import PaymentReleased from "pages/MyTransactions/Modal/PaymentReleased";
5+
import { useNewTransactionContext } from "context/NewTransactionContext";
56
import { useWriteEscrowUniversalPay, useSimulateEscrowUniversalPay } from "hooks/contracts/generated";
67
import { isUndefined } from "utils/index";
78
import { wrapWithToast } from "utils/wrapWithToast";
@@ -15,6 +16,7 @@ const ReleasePaymentButton: React.FC = () => {
1516
const publicClient = usePublicClient();
1617
const { id, amount } = useTransactionDetailsContext();
1718
const refetchQuery = useQueryRefetch();
19+
const { hasSufficientNativeBalance } = useNewTransactionContext();
1820

1921
const { data: releaseFullPaymentConfig } = useSimulateEscrowUniversalPay({
2022
args: [id, amount],
@@ -45,7 +47,7 @@ const ReleasePaymentButton: React.FC = () => {
4547
<>
4648
<Button
4749
isLoading={isSending}
48-
disabled={isSending}
50+
disabled={isSending || !hasSufficientNativeBalance}
4951
text={"Yes. Release full payment"}
5052
onClick={handleReleasePayment}
5153
/>

web/src/pages/NewTransaction/NavigationButtons/DepositPaymentButton.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React, { useEffect, useState, useMemo } from "react";
22
import styled from "styled-components";
33
import { Button } from "@kleros/ui-components-library";
4+
import { useNewTransactionContext } from "context/NewTransactionContext";
45
import {
56
useWriteEscrowUniversalCreateNativeTransaction,
67
useSimulateEscrowUniversalCreateNativeTransaction,
@@ -54,6 +55,7 @@ const DepositPaymentButton: React.FC = () => {
5455
() => (isNativeTransaction ? parseEther(sendingQuantity) : parseUnits(sendingQuantity, 18)),
5556
[isNativeTransaction, sendingQuantity]
5657
);
58+
const { hasSufficientNativeBalance } = useNewTransactionContext();
5759

5860
useEffect(() => {
5961
setFinalRecipientAddress(ensResult.data || sellerAddress);
@@ -151,7 +153,7 @@ const DepositPaymentButton: React.FC = () => {
151153
return (
152154
<StyledButton
153155
isLoading={isSending}
154-
disabled={isSending}
156+
disabled={isSending || !hasSufficientNativeBalance}
155157
text={isNativeTransaction || isApproved ? "Deposit the Payment" : "Approve Token"}
156158
onClick={isNativeTransaction || isApproved ? handleCreateTransaction : handleApproveToken}
157159
/>

0 commit comments

Comments
 (0)