Skip to content

Commit 22dec65

Browse files
committed
fix(web): Disable hooks when insufficient balance
1 parent f62a9eb commit 22dec65

File tree

3 files changed

+27
-16
lines changed

3 files changed

+27
-16
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const AcceptButton: React.FC = () => {
1616
const { id } = useTransactionDetailsContext();
1717
const refetchQuery = useQueryRefetch();
1818

19-
const { data: acceptSettlementConfig } = useSimulateEscrowUniversalAcceptSettlement({
19+
const { data: acceptSettlementConfig, isLoading, isError } = useSimulateEscrowUniversalAcceptSettlement({
2020
args: [BigInt(id)],
2121
});
2222

@@ -41,8 +41,8 @@ const AcceptButton: React.FC = () => {
4141

4242
return (
4343
<Button
44-
isLoading={isSending}
45-
disabled={isSending}
44+
isLoading={isSending || isLoading}
45+
disabled={isSending || isLoading || isError}
4646
text="Accept"
4747
onClick={handleAcceptSettlement}
4848
/>

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,23 @@ const RaiseDisputeButton: React.FC<IRaiseDisputeButton> = ({ toggleModal, button
3131
address: address as `0x${string}` | undefined,
3232
});
3333

34-
const insufficientBalance = parseFloat(arbitrationCost.toString()) > parseFloat(balanceData?.value.toString() || "0");
34+
const insufficientBalance = useMemo(() => {
35+
if(isUndefined(arbitrationCost) || isUndefined(balanceData)) return true;
36+
37+
return BigInt(arbitrationCost.toString()) > BigInt(balanceData.value.toString());
38+
},[arbitrationCost, balanceData]);
3539

3640
const { data: payArbitrationFeeByBuyerConfig } = useSimulateEscrowUniversalPayArbitrationFeeByBuyer({
3741
query: {
38-
enabled: isBuyer,
42+
enabled: isBuyer || !insufficientBalance,
3943
},
4044
args: [BigInt(id)],
4145
value: arbitrationCost,
4246
});
4347

4448
const { data: payArbitrationFeeBySellerConfig } = useSimulateEscrowUniversalPayArbitrationFeeBySeller({
4549
query: {
46-
enabled: !isBuyer,
50+
enabled: !isBuyer || !insufficientBalance,
4751
},
4852
args: [BigInt(id)],
4953
value: arbitrationCost,

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

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ import {
1717
useReadContract,
1818
useWriteContract,
1919
useSimulateContract,
20-
useBalance,
2120
} from "wagmi";
2221
import { parseEther, parseUnits } from "viem";
22+
import { normalize } from 'viem/ens'
2323
import { isUndefined } from "utils/index";
2424
import { wrapWithToast } from "utils/wrapWithToast";
2525
import { ethAddressPattern } from "utils/validateAddress";
@@ -58,7 +58,7 @@ const DepositPaymentButton: React.FC = () => {
5858
const [isSending, setIsSending] = useState(false);
5959
const [isApproved, setIsApproved] = useState(false);
6060
const { address, chain } = useAccount();
61-
const ensResult = useEnsAddress({ name: sellerAddress, chainId: 1 });
61+
const ensResult = useEnsAddress({ name: normalize(sellerAddress), chainId: 1 });
6262
const deadlineTimestamp = useMemo(() => BigInt(Math.floor(new Date(deadline).getTime() / 1000)), [deadline]);
6363
const isNativeTransaction = sendingToken?.address === "native";
6464
const transactionValue = useMemo(
@@ -68,15 +68,21 @@ const DepositPaymentButton: React.FC = () => {
6868

6969
const finalRecipientAddress = ensResult.data || sellerAddress;
7070

71-
const { data: balanceData } = useBalance({
72-
address: address as `0x${string}` | undefined,
73-
token: isNativeTransaction ? undefined : (sendingToken?.address as `0x${string}` | undefined),
71+
const { data: balanceData } = useReadContract({
72+
address: isNativeTransaction ? undefined : sendingToken?.address as `0x${string}`,
73+
abi: erc20Abi,
74+
functionName: "balanceOf",
75+
args: [address as `0x${string}`],
7476
});
7577

76-
const insufficientBalance = parseFloat(sendingQuantity) > parseFloat(balanceData?.value.toString() || "0");
78+
const insufficientBalance = useMemo(() => {
79+
if (isUndefined(sendingQuantity) || isUndefined(balanceData)) return true;
80+
81+
return BigInt(sendingQuantity.toString()) > BigInt(balanceData.toString());
82+
}, [sendingQuantity, balanceData]);
7783

7884
const { data: allowance, refetch: refetchAllowance } = useReadContract({
79-
query: { enabled: !isNativeTransaction && chain?.id },
85+
query: { enabled: !isNativeTransaction && chain?.id && !insufficientBalance },
8086
address: sendingToken?.address,
8187
abi: erc20Abi,
8288
functionName: "allowance",
@@ -91,7 +97,7 @@ const DepositPaymentButton: React.FC = () => {
9197

9298
const { data: createNativeTransactionConfig } = useSimulateEscrowUniversalCreateNativeTransaction({
9399
query: {
94-
enabled: isNativeTransaction && ethAddressPattern.test(finalRecipientAddress),
100+
enabled: isNativeTransaction && ethAddressPattern.test(finalRecipientAddress) && !insufficientBalance,
95101
},
96102
args: [deadlineTimestamp, transactionUri, finalRecipientAddress],
97103
value: transactionValue,
@@ -103,7 +109,8 @@ const DepositPaymentButton: React.FC = () => {
103109
!isNativeTransaction &&
104110
!isUndefined(allowance) &&
105111
allowance >= transactionValue &&
106-
ethAddressPattern.test(finalRecipientAddress),
112+
ethAddressPattern.test(finalRecipientAddress) &&
113+
!insufficientBalance,
107114
},
108115
args: [transactionValue, sendingToken?.address, deadlineTimestamp, transactionUri, finalRecipientAddress],
109116
});
@@ -115,7 +122,7 @@ const DepositPaymentButton: React.FC = () => {
115122
useWriteEscrowUniversalCreateErc20Transaction(createERC20TransactionConfig);
116123

117124
const { data: approveConfig } = useSimulateContract({
118-
query: { enabled: !isNativeTransaction && chain?.id },
125+
query: { enabled: !isNativeTransaction && chain?.id && !insufficientBalance },
119126
address: sendingToken?.address,
120127
abi: erc20Abi,
121128
functionName: "approve",

0 commit comments

Comments
 (0)