Skip to content

Commit

Permalink
fix: preselect sys if no sysx is available
Browse files Browse the repository at this point in the history
  • Loading branch information
osiastedian committed Dec 11, 2023
1 parent 2afa3ee commit 5e4edf0
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 30 deletions.
26 changes: 19 additions & 7 deletions components/Bridge/WalletSwitchV2/UTXOConnect.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ const UTXOConnect: React.FC<UTXOConnectProps> = ({
changeAccount,
} = usePaliWalletV2();

const sysxBalance = useUtxoBalance(
transfer.utxoXpub!,
transfer.utxoAddress,
SYSX_ASSET_GUID
);
const sysxBalance = useUtxoBalance(transfer.utxoXpub!, {
address: transfer.utxoAddress,
assetGuid: SYSX_ASSET_GUID,
retry: false,
});

const setTransferUtxo = () => {
if (!connectedAccount || !xpubAddress) return;
Expand All @@ -62,10 +62,22 @@ const UTXOConnect: React.FC<UTXOConnectProps> = ({
const allowChange = transfer.status === "initialize";

useEffect(() => {
if (sysxBalance.isError && setSelectedAsset) {
if (!sysxBalance.isFetched || !transfer.utxoAddress || !isBitcoinBased) {
return;
}
const emptySysxBalance =
sysxBalance.data === undefined || sysxBalance.data === 0;
if ((sysxBalance.isError || emptySysxBalance) && setSelectedAsset) {
setSelectedAsset("sys");
}
}, [sysxBalance.isError, setSelectedAsset]);
}, [
sysxBalance.isError,
setSelectedAsset,
sysxBalance.data,
sysxBalance.isFetched,
transfer.utxoAddress,
isBitcoinBased,
]);

if (
isBitcoinBased && allowChange
Expand Down
5 changes: 4 additions & 1 deletion components/Bridge/v3/Steps/ConnectValidate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,10 @@ const BridgeV3ConnectValidateStep: React.FC<
const nevmAddress = watch("nevmAddress");

const utxoBalance = useUtxoBalance(utxoXpub);
const sysxBalance = useUtxoBalance(utxoXpub, utxoAddress, SYSX_ASSET_GUID);
const sysxBalance = useUtxoBalance(utxoXpub, {
address: utxoAddress,
assetGuid: SYSX_ASSET_GUID,
});
const nevmBalance = useNevmBalance(nevmAddress);

const useSysx = utxoAssetType === "sysx";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,10 @@ export const ConnectValidateStartTransferButton: React.FC<{
const useSysx = utxoAssetType === "sysx";
const amount = watch("amount");
const utxoBalance = useUtxoBalance(utxoXpub);
const sysxBalance = useUtxoBalance(utxoXpub, utxoAddress, SYSX_ASSET_GUID);
const sysxBalance = useUtxoBalance(utxoXpub, {
address: utxoAddress,
assetGuid: SYSX_ASSET_GUID,
});
const nevmBalance = useNevmBalance(nevmAddress);

const foundationFundingAvailable =
Expand Down
54 changes: 33 additions & 21 deletions utils/balance-hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,42 @@ interface BalanceResp {
tokensAsset: TokenAsset[];
}

type Options = {
address?: string;
assetGuid?: string;
retry?: boolean;
};

export const useUtxoBalance = (
xpub: string,
address?: string,
assetGuid?: string
options: Options = { retry: true }
) => {
return useQuery(["utxo", "balance", xpub, address, assetGuid], async () => {
if (!xpub || isValidEthereumAddress(xpub)) return Promise.resolve(0);
const url = BlockbookAPIURL + "/api/v2/xpub/" + xpub;
const balanceInText = await fetch(url)
.then((res) => res.json())
.then((res: BalanceResp) => {
if (assetGuid && address) {
const total = res.tokensAsset.reduce((acc, asset) => {
if (asset.assetGuid === assetGuid) {
return acc + parseInt(asset.balance);
}
return acc;
}, 0);
return total.toString();
}
return res.balance;
});
return parseInt(balanceInText) / Math.pow(10, 8);
});
const { address, assetGuid, retry } = options;
return useQuery(
["utxo", "balance", xpub, address, assetGuid],
async () => {
if (!xpub || isValidEthereumAddress(xpub)) return Promise.resolve(0);
const url = BlockbookAPIURL + "/api/v2/xpub/" + xpub;
const balanceInText = await fetch(url)
.then((res) => res.json())
.then((res: BalanceResp) => {
if (assetGuid && address) {
const total = res.tokensAsset.reduce((acc, asset) => {
if (asset.assetGuid === assetGuid) {
return acc + parseInt(asset.balance);
}
return acc;
}, 0);
return total.toString();
}
return res.balance;
});
return parseInt(balanceInText) / Math.pow(10, 8);
},
{
retry,
}
);
};

export const useNevmBalance = (address?: string) => {
Expand Down

0 comments on commit 5e4edf0

Please sign in to comment.