Fixing doube withdrawal Token to Cash by user
Some checks failed
Workflow push to Dappbundle / Build (push) Has been cancelled

1. Changed submit to button in withdrawal popup
2. Updated withdrawMoneyFromWallet() function to have balance check to prevent double request firing.
This commit is contained in:
tripathyr 2025-09-01 14:01:30 +05:30 committed by GitHub
parent e2a5d24df4
commit 871bab7642
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1128,7 +1128,7 @@
</div> </div>
<div class="multi-state-button"> <div class="multi-state-button">
<button id="withdraw_rupee_button" class="button button--primary cta" <button id="withdraw_rupee_button" class="button button--primary cta"
onclick="withdrawMoneyFromWallet()" type="submit">Withdraw</button> onclick="withdrawMoneyFromWallet()" type="button">Withdraw</button>
</div> </div>
</sm-form> </sm-form>
<div class="grid gap-0-5 hidden justify-center text-center"> <div class="grid gap-0-5 hidden justify-center text-center">
@ -2879,37 +2879,57 @@
getRef('topup_wallet__qr_wrapper').addEventListener('toggle', e => render.conditionalSteps()) getRef('topup_wallet__qr_wrapper').addEventListener('toggle', e => render.conditionalSteps())
function withdrawMoneyFromWallet() { let withdrawInProgress = false;
async function withdrawMoneyFromWallet() {
if (withdrawInProgress) {
console.warn("Withdraw already in progress, ignoring duplicate call.");
return;
}
withdrawInProgress = true;
let cashier = User.findCashier(); let cashier = User.findCashier();
if (!cashier) if (!cashier) {
withdrawInProgress = false;
return notify("No cashier online. Please try again in a while.", 'error'); return notify("No cashier online. Please try again in a while.", 'error');
}
let amount = parseFloat(getRef('send_cashier_amount').value.trim()); let amount = parseFloat(getRef('send_cashier_amount').value.trim());
const upiId = getRef('select_withdraw_upi_id').value; const upiId = getRef('select_withdraw_upi_id').value;
if (!upiId) if (!upiId) {
withdrawInProgress = false;
return notify("Please add an UPI ID to continue", 'error'); return notify("Please add an UPI ID to continue", 'error');
}
buttonLoader('withdraw_rupee_button', true); buttonLoader('withdraw_rupee_button', true);
getRef('withdrawal_blockchain_link').classList.add('hidden'); getRef('withdrawal_blockchain_link').classList.add('hidden');
User.sendToken(cashier, amount, 'for token-to-cash').then(txid => {
console.warn(`Withdraw ${amount} from cashier ${cashier}`, txid); try {
User.tokenToCash(cashier, amount, txid, upiId).then(result => { // 🔑 Live balance check (just before sendToken)
showChildElement('withdraw_wallet_process', 1); const rupeeBalance = Number(await floTokenAPI.getBalance(floGlobals.myFloID)) || 0;
refreshBalance().catch(console.error); if (amount > rupeeBalance) {
getRef('withdrawal_blockchain_link').classList.remove('hidden'); withdrawInProgress = false;
getRef('withdrawal_blockchain_link').href = `${floBlockchainAPI.current_server}tx/${txid}`
console.log(result);
}).catch(error => {
getRef('withdrawal_failed_reason').textContent = error;
showChildElement('withdraw_wallet_process', 2);
console.error(error)
}).finally(() => {
buttonLoader('withdraw_rupee_button', false); buttonLoader('withdraw_rupee_button', false);
}); return notify(`Insufficient balance. You only have ₹${rupeeBalance}.`, 'error');
}).catch(error => { }
// Proceed with token transfer
const txid = await User.sendToken(cashier, amount, 'for token-to-cash');
console.warn(`Withdraw ${amount} from cashier ${cashier}`, txid);
await User.tokenToCash(cashier, amount, txid, upiId);
showChildElement('withdraw_wallet_process', 1);
refreshBalance().catch(console.error);
getRef('withdrawal_blockchain_link').classList.remove('hidden');
getRef('withdrawal_blockchain_link').href = `${floBlockchainAPI.current_server}tx/${txid}`;
} catch (error) {
getRef('withdrawal_failed_reason').textContent = error; getRef('withdrawal_failed_reason').textContent = error;
showChildElement('withdraw_wallet_process', 2); showChildElement('withdraw_wallet_process', 2);
console.error(error);
} finally {
withdrawInProgress = false; // release latch
buttonLoader('withdraw_rupee_button', false); buttonLoader('withdraw_rupee_button', false);
console.error(error) }
})
} }
function openExternalTransferPopup(type) { function openExternalTransferPopup(type) {
let title = ``; let title = ``;